回帰分析

次のような問題を考えてみよう.

入力データの集合を $X$, 出力データの集合を $Y$ とし, 未知の関数 $f:X \to Y$ を考える. 今, $X$ から $n$ 個の入力データ $x_1,\ldots,x_n$ が, $Y$ から $n$ 個の出力データ $y_1,\ldots,y_n$ が与えられていると仮定する. このとき, $f(x_i)$ が $y_i$ にできるだけ近くなるように関数 $f$ を構成せよ.

機械学習においては, 訓練データ $(x_1,y_1),\ldots,(x_n,y_n)$ による「教師あり学習」を行って, 関数 $f$ を構成する問題と捉えることができる.

「$f(x_i)$ が $y_i$ にできるだけ近くなる」を数学的に表現するには, $f(x_i)$ と $y_i$ の差の2乗和を導入する. \begin{align} E&=\frac{1}{2} \sum_{i=1}^n(f(x_i)-y_i)^2 \tag{1.1} \label{eq1.1} \end{align} このような関数 $E$ を誤差関数とか損失関数と呼ぶ. $E$ の性質として, 必ず非負の値をとる. つまり $E \geq 0$ が成り立つ. また, $E = 0$ が成り立つのは $y_1 = f(x_1), \ldots, y_n = f(x_n)$ が成り立つときである.

ここで, さらに深い議論をするために $f$ に次のような仮定をおく. $f$ は未知関数であるが, 未知のパラメータ $\theta_1,\ldots,\theta_r$ を用いて \begin{align} f(x)&=\hat{f}(\theta_1,\ldots,\theta_r;x) \tag{1.2} \label{eq1.2} \end{align} と書けると仮定する. ここで $\hat{f}$ は与えられた既知の関数である. すると, 誤差関数は \eqref{eq1.2} を \eqref{eq1.1} に代入して \begin{align} E(\theta_1,\ldots,\theta_r)&= \frac{1}{2} \sum_{i=1}^n (\hat{f}(\theta_1,\ldots,\theta_r;x_i)-y_i)^2 \tag{1.3} \label{eq1.3} \end{align} となる. $f$ を構成する問題は, $E$ が最小となるようなパラメータ $\theta_1,\ldots,\theta_r$ を決定する問題となった.

$E$ が最小になるとき, $\theta_1, \ldots, \theta_r$ の満たすべき必要条件として, 次が成り立つ. \begin{align} \frac{\partial E}{\partial \theta_j} &= \sum_{i=1}^n (\hat{f}(\theta_1,\ldots,\theta_r;x_i)-y_i)\frac{\partial \hat{f}}{\partial \theta_j}(\theta_1,\ldots,\theta_r;x_i) = 0 \quad j=1,\ldots,r \tag{1.4} \label{eq1.4} \end{align} \eqref{eq1.4} は$\theta_1, \ldots, \theta_r$ を未知とする $r$ 個の式からなる連立方程式である.

勾配降下法

連立方程式 \eqref{eq1.4} を厳密に解くのは難しい. ここでは, 勾配降下法と呼ばれる近似手法を紹介する. \eqref{eq1.3} をテイラー展開すると \begin{align} E(\theta_1 + h_1,\ldots,\theta_r + h_r) &= E(\theta_1,\ldots,\theta_r) + \sum_{j=1}^r \frac{\partial E}{\partial \theta_j}(\theta_1,\ldots,\theta_r)h_j + (\text{$2$次以上の項}) \tag{1.5} \label{eq1.5} \end{align} となる. \eqref{eq1.5} の左辺を小さくするには, ベクトル $h=(h_j)_{j=1}^r$ をベクトル $(\partial E / \partial \theta_j)_{j=1}^r$ の逆向きにしたものにすればよい. 即ち \begin{align} h_j &= - \eta \frac{ \partial E}{\partial \theta_j}(\theta_1,\ldots,\theta_r) = - \eta \sum_{i=1}^n (\hat{f}(\theta_1,\ldots,\theta_r;x_i)-y_i)\frac{\partial \hat{f}}{\partial \theta_j}(\theta_1,\ldots,\theta_r;x_i) \quad j=1,\ldots,r \tag{1.6} \label{eq1.6} \end{align} とおけばよい. 但し, $\eta$ は学習係数と呼ばれる正の実数である. $\eta$ は小さすぎると $E$ の最小値に到達ぜず極小値に留まる可能性がある. 逆に大きすぎると振動が発生する可能性がある. $\eta$ の選び方には注意が必要である.

確率的勾配降下法(SGD)

\eqref{eq1.5} の左辺を小さくするために, まず, 訓練データ $(x_1,y_1),\ldots,(x_n,y_n)$ の中からランダムにデータを一つ $(x_i,y_i)$ 選ぶ. そしてベクトル $h=(h_j)_{j=1}^r$ を \begin{align} h_j &= - \eta (\hat{f}(\theta_1,\ldots,\theta_r;x_i)-y_i)\frac{\partial \hat{f}}{\partial \theta_j}(\theta_1,\ldots,\theta_r;x_i) \quad j=1,\ldots,r \tag{1.7} \label{eq1.7} \end{align} で定義する. $h$ が一つの訓練データ $(x_i,y_i)$ で計算できるのが特徴である. パラメータ $\theta_1,\ldots,\theta_r$ が更新されることに, ランダムに訓練データを選びなおす. この方法を確率的勾配降下法と呼ぶ. 勾配降下法より計算量が抑えられる.