深層学習:ニューラルネットワークにおけるコスト関数最小化法 勾配降下法、確率勾配降下法、ミニバッチ勾配降下法
ロジスティック回帰、または多クラス分離に使われる、単層/多層ニュラールネットワークにおいて使用されるコスト関数の最小化方法の代表的なものについて扱う。
入力信号を$${{\bm x}}$$、重みを$${{\bm w}}$$のベクトルとし、活性化関数$${\phi(z)}$$の入力$${z}$$は$${z={\bm w}^T {\bm x}}$$で与えられているとする。
コスト関数$${J}$$は活性化関数の関数として$${J(\phi(z))}$$と与えられ、ニューラルネットワークの層で与えられる重み$${{\bm w}}$$は、$${z}$$を通した変数となる。
よって、コスト関数の重みによる偏微分は、$${\displaystyle{\frac{\partial J({\bm w})}{\partial {\bm w}}={\bm \nabla}J({\bm w}) }}$$と表せる。
例として、コスト関数を誤差二乗和(SSE)とした時、
$${J({\bm w})=\displaystyle{\frac{1}{2}\sum_{i}(y^{(i)}-\phi(z^{(i)}))^2}}$$
である。
重みの更新は、$${{\bm w}_{new}={\bm w}_{old}+ \Delta{\bm w}}$$で行われ、$${\Delta{\bm w}}$$の定義が各方法によって違っている。
勾配降下法
コスト関数の重みについての傾きの逆方向を$${\Delta{\bm w}}$$に、学習係数$${\eta}$$と共に与える。
$${\Delta{\bm w}=-\eta{\bm \nabla} J({\bm w})=-\eta\displaystyle{\frac{\partial J({\bm w})}{\partial {\bm w}} }}$$
コスト関数をSSEとし、線形活性化関数$${\phi(z)=z={\bm w}^T {\bm x}=\sum_{k}w_k x_k}$$としたADALINEの場合、
$${\displaystyle{\frac{\partial J({\bm w})}{\partial {\bm w}}= -\sum_{i}(y^{(i)}-\phi(z^{(i)})) \frac{\partial z^{(i)}}{\partial {\bm w}} }}$$
これを成分で表せば、
$${\displaystyle{\frac{\partial J({\bm w})}{\partial w_j}= -\sum_{i}(y^{(i)}-\phi(z^{(i)})) \frac{\partial z^{(i)}}{\partial w_j} = -\sum_{i}(y^{(i)}-\phi(z^{(i)})) x^{(i)}_j}}$$
よって、$${\Delta w_j=\eta\sum_{i}(y^{(i)}-\phi(z^{(i)}))x^{(i)}_j}$$となる。
確率勾配降下法
上記の勾配降下法は重みの更新のために、全てのデータ点を通し、和を取る必要があった。これによって、データ数が大きい場合、あるデータが示す効率の良い方向が他のデータによって薄められてしまうという欠点がある。
これを補うために、データ毎に重みを更新する方法が確率勾配降下法である。またこの方法は、オンライン学習で、次々とデータが送られてくる場合も適用できる。
この場合、$${\Delta w^{(i)}_j=\eta(y^{(i)}-\phi(z^{(i)}))x^{(i)}_j}$$で与えられ、更新頻度が高いことから、ノイズを多く含んでいる。
ミニバッチ勾配降下法
勾配降下法のように全てのデータの和を取らず、確率勾配降下法のようにデータ毎に重みを更新するのではなく、あらかじめ決めたバッチ数で和を取り重みを更新する。確率勾配降下法よりも重みの動向に雑音は少なく、また勾配降下法のように偽の局所解から逃れにくいという欠点もない。
ここでは、勾配降下法について、バッチ、確率的、ミニバッチと並べたが、この全データを使って重みを更新するか、各データ毎に更新するか、または一定のデータ数で更新するかは、以降に述べるモーメンタム、アダム法等にも適用できる扱いである。
故に、次の記事からは、データ数扱いを示す$${\sum_i}$$の項を除くこととする。