深層学習:ニューラルネットワークにおけるコスト関数最小化法 AdaGrad、RMSProp、ADAM

Ada Grad

Ada Gradは、重みの各成分での勾配の累積平方和から、学習率を各成分の更新頻度を調整する方法である。
 よって、前記事の勾配降下法、モーメンタム法とは表記を変えて、各成分毎の偏微分で表し、ベクトルの成分毎の積の演算を$${\odot}$$で表す。
$${{\bm a}\odot{\bm b}=(a_1 \times b_1, \cdots, a_n \times b_n)}$$
これを用いると、$${\bm{w}_t}$$の更新$${\Delta {\bm w}_{t+1}}$$は、
$${\displaystyle{\Delta {\bm w}_{t+1} = -\eta \frac{{\bm \nabla} J}{\sqrt{\sum_{t'=1}^{t}{\bm \nabla}_{t'}J\odot{\bm \nabla}_{t'}J}+\epsilon}}}$$
であり、$${w_{t+1,k}}$$の更新は、
$${\displaystyle{\Delta w_{t+1,k} = -\frac{\eta} {\sqrt{\sum_{t'=1}^{t} \left( \frac{\partial J({\bm w}_t)}{\partial w_{t,k}}\right)^2}+\epsilon} \times \frac{\partial J({\bm w}_t)}{\partial w_{t,k}}}}$$
で与えられ、学習率$${\eta}$$が、累積二乗和で調整されているのがわかる。

RMSProp

 Sutskeverのネストロフモーメンタム法と同じくRNNで使われることが多い。AdaGradの学習率を調整で使われる$${\displaystyle{\sum_{t'=1}^{t}{\bm \nabla}_{t'}J\odot{\bm \nabla}_{t'}J}}$$は、更新が進み、最適解に近づくにつれ、$${{\bm \nabla}_{t}J}$$が小さくなっていくことから、その時に最も近い更新の情報が反映されづらくなる。
 よって、累積和の代わりに、移動平均の時に使われる荷重和を使う。
 $${t}$$での荷重和$${\displaystyle{ {\text SW}\left( \left(\frac{\partial J({\bm w}_t)}{\partial w_{t,k}}\right)^2 \right) }}$$は、荷重係数$${\beta}$$を用いて、以下のように計算される。
$${\displaystyle{ {\text SW}\left( \left(\frac{\partial J({\bm w}_t)}{\partial w_{t,k}}\right)^2 \right) = \beta{\text SW}\left( \left(\frac{\partial J({\bm w}_{t-1})}{\partial w_{t-1,k}}\right)^2 \right) + (1-\beta)\left(\frac{\partial J({\bm w}_{t})}{\partial w_{t,k}}\right)^2 }}$$
重みの更新の学習率の調整に、この荷重和を用いる。
$${\displaystyle{\Delta w_{t+1,k} = -\frac{\eta} {\sqrt{{\text SM}\left( \left(\frac{\partial J({\bm w}_{t})}{\partial w_{t,k}}\right)^2 \right)}+\epsilon} \times \frac{\partial J({\bm w}_t)}{\partial w_{t,k}}}}$$

ADAM

モーメントを2種導入し、モーメント法とRMS Propを合わせたもので、最も効率良い最適化解法の一つである。
 第一モーメントを$${m_t}$$、第二モーメントを$${v_t}$$とする。
 第一モーメントはモーメント法に従い、以下のように更新する。
$${{\bm m}_{t+1}=\rho_1{\bm m}_{t}+(1-\rho_1){\bm \nabla}_tJ({\bm w}_t)}$$
 第二モーメントは、RMSPropに従い、
$${{\bm v}_{t+1}=\rho_2{\bm v}_{t}+(1-\rho_2)({\bm \nabla}_tJ({\bm w}_t)\odot{\bm \nabla}_tJ({\bm w}_t)) }$$
で、更新される。
 モーメントの初期値は、両方とも$${0}$$と与えられているため、このバイアス補正が必要となる。
 この補正は以下のように行われる。
$${{\bm m}_0 = 0}$$
$${{\bm m}_{t+1}=\rho_1{\bm m}_{t}+(1-\rho_1){\bm \nabla}_tJ({\bm w}_t)}$$
の$${{\bm m}_{t}}$$に以下を代入する。
$${{\bm m}_{t}=\rho_1{\bm m}_{t-1}+(1-\rho_1){\bm \nabla}_{t-1}J({\bm w}_{t-1})}$$より、
$${{\bm m}_{t+1}=\rho_1^2{\bm m}_{t-1}+\rho_1(1-\rho_1){\bm \nabla}_{t-1}J({\bm w}_{t-1})+(1-\rho_1){\bm \nabla}_tJ({\bm w}_t )}$$、さらに、
$${{\bm m}_{t+1}=\rho_1^3{\bm m}_{t-2}+\rho_1^2(1-\rho_1){\bm \nabla}_{t-2}J({\bm w}_{t-2})+\rho_1(1-\rho_1){\bm \nabla}_{t-1}J({\bm w}_{t-1})+(1-\rho_1){\bm \nabla}_tJ({\bm w}_t) }$$と順次時項を下げていけば、最終的に
$${{\bm m}_{t+1}=\rho_1^{t+1} {\bm m}_{0}+(1-\rho_1)\sum_{t'=1}^{t}\rho_1^{t-t'}{\bm \nabla}_{t'}J({\bm w}_{t'})}$$
$${=(1-\rho_1)\sum_{t'=1}^{t}\rho_1^{t-t'}{\bm \nabla}_{t'}J({\bm w}_{t'})}$$
 ここで、両辺にて期待値を取ると、
$${E[{\bm m}_{t+1}] = (1-\rho)E[{\bm \nabla}J({\bm w})]\cdot \sum_{t'=1}^{t}\rho_1^{t-t'} = (1-\rho^{t+1})E[{\bm \nabla}J({\bm w})] }$$
 よって、$${{\bm m}_{t+1}}$$の補正項として、$${\displaystyle{\frac{1}{1-\rho_1^{t+1}}}}$$が必要となり、
$${\hat{{\bm m}}_{t}=\displaystyle{\frac{{\bm m}_t}{1-\rho_1^{t}}}}$$.
同様の計算で、
$${\hat{{\bm v}}_{t}=\displaystyle{\frac{{\bm v}_t}{1-\rho_2^{t}}}}$$
が得られる。
 新しい重みは両モーメントのバイアス補正後の$${\hat{{\bm m}}_t}$$と$${\hat{{\bm v}}_t}$$を通じ、
$${\displaystyle{\Delta{\bm w}_{t+1}=-\eta_t \frac{\hat{{\bm m}}_{t+1}}{\sqrt{\hat{{\bm v}}_{t+1}}+\epsilon} }}$$
で与えられる。


この記事が気に入ったらサポートをしてみませんか?