学習の停滞を改善するRMSPropをPythonで書いてみた

  • このエントリーをはてなブックマークに追加

勾配降下法に代表される最適化手法には様々な手法があります。ここではAdaGradの弱点を改善するRMSPropの概要を説明し、PythonのNumpyで実装、他の手法と比較してみます。

こんにちは。wat(@watlablog)です。ここでは機械学習最適化手法の1つ、RMSPropを学習していきます

RMSPropの概要

RMSPropに至るまでの変遷

この記事を読んでいる方はおそらく勾配降下法がどんなものか、MomentumAdaGradがどんなものかある程度把握している方と予想します。RMSPropもこれら機械学習で使われる最適化手法の1つです。

まだこれらの手法が曖昧な方は、是非以下の3つの記事を順番に読んでみて下さい。それぞれの最適化手法のメリットとデメリットを知ると、このページで学ぶRMSPropの改善点がより理解できると考えられます。

①「Pythonで1変数と2変数関数の勾配降下法を実装してみた
②「勾配降下法に慣性項を追加するMomentumをPythonで実装
③「Python/Numpyで機械学習の最適化!AdaGradを実装

①の記事は基本中の基本となる勾配降下法(GD)の内容です。非常にシンプルな式で関数の勾配を下っていく有名な手法です。この勾配降下法は機械学習以外の様々な分野で使われていますが、緩やかな勾配にさしかかった途端に学習が遅くなるというデメリットがありました。

②はMomentumという勾配降下法の式に慣性項を追加した手法です。Momentumは前の更新情報を現在の値の更新にも使うので、あたかも運動方程式中の質点のような振る舞いをします。しかし、その学習率は重みにかかわらず一定で、さらにハイパーパラメータが2つ必要で調整が困難というデメリットがありました。

③はAdaGradという手法で、それぞれの重みに適応させた学習率になるように勾配降下法の更新式を変更した画期的な発想を持っていました。しかし学習が進むにつれ更新量がどんどん小さくなっていき、場合によっては学習が全くされない状況となるデメリットを持っていました。

RMSPropはAdaGradの改善を狙った手法で、過去の情報を「忘れる」というコンセプトを持っています(RMSPropはCouseraの講義でヒントン氏が提案した手法で、正式に論文はないとか?)。

RMSPropの更新式とメリット

RMSPropの更新式を式(1)、式(2)に示します。

$$\mathbf{h}_{i+1}=\rho \mathbf{h}_{i}+ (1 - \rho)( \nabla f)^{2} (1)$$
$$\mathbf{x}_{i+1}=\mathbf{x}_{i}-\eta \frac{1}{\sqrt{\mathbf{h}_{i+1}}} (\nabla f) (2)$$

こうしてみると、最終的な更新式である式(2)はAdaGradと全く同じですが、式(1)の\(\mathbf{h}\)の更新式が異なります。

式(1)は\(\rho\)の存在(\(\rho\)は1より小さい値(ヒントン氏は0.9を推奨))により前回の更新量を小さくする方向に働きます。

AdaGradはどんどん更新量が小さくなっていきますが、RMSPropは適度な\(\rho\)を設定することにより更新量が小さくなり過ぎないような改善を狙っています。

RMSPropをその他手法と比較するコード

全コード

先ほど紹介した3記事と同じコードなので詳細な説明は省きますが、このRMSPropをGD、Momentum、AdaGradの下に追記しました。

実行結果

以下が実行結果です。
…GDやMomentumと比べるとAdaGradやRMSPropは降下方向が違うので、重みそれぞれに適応しているというのがわかりますが、静止画だとAdaGradとRMSPropの違いはいまいちわかりませんね。

GD,Momentum,AdaGrad,RMSPropの比較

しかし動画にすると一目瞭然でした。同じ学習率を設定していますが、AdaGradが慎重に降下している最中にRMSPropがダントツでゴールに到達しました。

GD,Momentum,AdaGrad,RMSPropの比較(動画)

\(\rho\)が入っているだけでこの違い。流石ヒントンさん。

まとめ

本ページでは最適化手法のRMSPropを試してみました。
RMSPropは「忘れる」ということを式の中で表現したユニークな適応的降下法で、Numpyで書いたコードでもAdaGradと比べると改善傾向が見られました。

ちょっとした式変化でこんなに挙動が変わるということに毎回驚かされます!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*