logo

機械学習における線形回帰モデルの勾配降下法学習 📂機械学習

機械学習における線形回帰モデルの勾配降下法学習

概要1

線形回帰モデルの学習方法の一つである勾配降下法gradient descentを使った方法を紹介する。

説明

データセットをX={xi}i=1NX = \left\{ \mathbf{x}_{i} \right\}_{i=1}^{N}、ラベルセットをY={yi}i=1NY = \left\{ y_{i} \right\}_{i=1}^{N}としよう。そして、以下のような線形回帰モデルを仮定する。

y^=j=0nwjxj=wTx \hat{y} = \sum\limits_{j=0}^{n} w_{j}x_{j} = \mathbf{w}^{T} \mathbf{x}

この時、x=[x0xn]T\mathbf{x} = \begin{bmatrix} x_{0} & \dots & x_{n} \end{bmatrix}^{T}w=[w0wn]T\mathbf{w} = \begin{bmatrix} w_{0} & \dots & w_{n} \end{bmatrix}^{T}である。勾配降下法とは、関数のグラディエントが関数値が最も多く増加する方向を意味することを利用した学習法である。損失関数JJを以下のようにMSEとする。

J(w)=12i=1N(yiwTxi)2 J(\mathbf{w}) = \dfrac{1}{2} \sum\limits_{i=1}^{N} (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i})^{2}

前に定数12\frac{1}{2}が付くのは、JJを微分する時に22が飛び出るからであり、これを約分するためである。つまりJJを最小化することも、12J\frac{1}{2}Jを最小化することも同じだ。要するに、与えられたXXYYに対して、次のような最適解w\mathbf{w}_{\ast}を見つけることが目標だ。

w=arg minw(J(w)=12i=1N(yiwTxi)2) \mathbf{w}_{\ast} = \argmin\limits_{\mathbf{w}} \left( J(\mathbf{w}) = \dfrac{1}{2} \sum\limits_{i=1}^{N} (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i})^{2} \right)

表記法

数学、物理学、工学全般でスカラ関数のグラディエントを次のように表記する。

J(w)=[J(w)w0J(w)wn] \nabla J (\mathbf{w}) = \begin{bmatrix} \dfrac{\partial J(\mathbf{w})}{\partial w_{0}} & \dots & \dfrac{\partial J(\mathbf{w})}{\partial w_{n}} \end{bmatrix}

機械学習では、次のような表記もよく使われる。

J(w)w=[J(w)w0J(w)wn] \dfrac{\partial J(\mathbf{w})}{\partial \mathbf{w}} = \begin{bmatrix} \dfrac{\partial J(\mathbf{w})}{\partial w_{0}} & \dots & \dfrac{\partial J(\mathbf{w})}{\partial w_{n}} \end{bmatrix}

つまり、J=Jw\nabla J = \dfrac{\partial J}{\partial \mathbf{w}}である。この記事では、グラディエントの表記法としてJ\nabla Jを使うことにする。

アルゴリズム

グラディエントの性質により、J\nabla JJJが最も大きく増加する方向を指す。その逆に、J-\nabla JJJが減少する方向を指す。私たちの目標はJJの関数値が減少することであるため、重みw\mathbf{w}J-\nabla Jの方向に移動させる。言い換えれば、次のように更新する。

wαJw \mathbf{w} - \alpha \nabla J \to \mathbf{w}

この時、α\alpha学習率learning rateである。実際にJ\nabla Jを計算すると次のようになる。xi=[xi0xin]\mathbf{x}_{i} = \begin{bmatrix} x_{i0} & \dots & x_{in} \end{bmatrix}としよう。wTxiwj=kwkxikwj=xij\dfrac{\partial \mathbf{w}^{T}\mathbf{x}_{i}}{\partial w_{j}} = \dfrac{\partial \sum_{k}w_{k}x_{ik}}{\partial w_{j}} = x_{ij}なので、

J=[12i=1Nw1(yiwTxi)212i=1Nwn(yiwTxi)2]=[i=1N(yiwTxi)xi0i=1N(yiwTxi)xin]=i=1N(yiwTxi)[xi0xin]=i=1N(yiwTxi)xi \begin{align*} \nabla J &= \begin{bmatrix} \dfrac{1}{2}\sum\limits_{i=1}^{N} \dfrac{\partial}{\partial w_{1}}(y_{i} - \mathbf{w}^{T}\mathbf{x}_{i})^{2} & \cdots & \dfrac{1}{2}\sum\limits_{i=1}^{N} \dfrac{\partial}{\partial w_{n}}(y_{i} - \mathbf{w}^{T}\mathbf{x}_{i})^{2} \end{bmatrix} \\ &= \begin{bmatrix} \sum\limits_{i=1}^{N} (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i})x_{i0} & \cdots & \sum\limits_{i=1}^{N} (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i})x_{in} \end{bmatrix} \\ &= \sum\limits_{i=1}^{N} (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i}) \begin{bmatrix} x_{i0} & \cdots & x_{in} \end{bmatrix} \\ &= \sum\limits_{i=1}^{N} (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i}) \mathbf{x}_{i} \end{align*}

したがって、具体的にw\mathbf{w}を更新する式は次のようになる。

wαi(yiwTxi)xiw \mathbf{w} - \alpha \sum\limits_{i}(y_{i} - \mathbf{w}^{T}\mathbf{x}_{i}) \mathbf{x}_{i} \to \mathbf{w}

これはウィドロー・ホフWidrow-HoffまたはLMSLeast Mean Squareアルゴリズムと呼ばれる。この式で、括弧内は誤差なので、誤差が大きいとw\mathbf{w}が多く更新され、誤差が小さいとw\mathbf{w}が少し更新されることがわかる。

更新方法2

重みを更新する方法には大きく分けて二つある。両方の方法は適切な学習率α\alphaに対して、最適解に収束することが知られている。

バッチ学習

バッチ学習batch learningは、全データセットXXの誤差に対して、一度に重みを修正することをいう。つまり、上で説明した通りである。

Repeat until convergence: wαi(yiwTxi)xiw \begin{align*} &\text{Repeat until convergence: }\\ &\quad \mathbf{w} - \alpha \sum\limits_{i}(y_{i} - \mathbf{w}^{T}\mathbf{x}_{i}) \mathbf{x}_{i} \to \mathbf{w} \end{align*}

オンライン学習

オンライン学習online learningは、各データxi\mathbf{x}_{i}の誤差に対して、重みを修正することをいう。

Repeat until convergence: For i=1 to N:wα(yiwTxi)xiw \begin{align*} &\text{Repeat until convergence: } \\ &\quad \text{For } i = 1 \text{ to } N: \\ &\qquad \mathbf{w} - \alpha (y_{i} - \mathbf{w}^{T}\mathbf{x}_{i}) \mathbf{x}_{i} \to \mathbf{w} \end{align*}

参考


  1. Simon Haykin, Neural Networks and Learning Machines (3rd Edition, 2009), p91-96 ↩︎

  2. Simon Haykin, Neural Networks and Learning Machines (3rd Edition, 2009), p127 ↩︎