KATUBLO
2019年03月19日

【DeepLearning】nesterov モメンタムを始め、学習率を最適化する手法をまとめた

こんにちは、KATUOです。

昨日twitterで

 

 

このようなことを呟いたばかりの私ですが、Youtubeで動画編集などをしていた影響で、気がついたら深夜1時、結局記事を書くことができませんでした。(なんて情けない)

今考えると1日でかける時間はたくさんあったはず。隙間時間を有効活用するべきですね。ということで昨日の失態を埋めるべく、本日は朝と夜の2回投稿を行います。

 

学習率の最適化

今回はdeepleraningにおける、学習率の設定手法をいくつかさらっと紹介します。一番始めにdeeplearningを参考書等で学んだとき、学習率は固定値として扱いますが、学習率を変数値として扱う方法があります。学習率を可変とすると多くの場合、精度が向上するというメリットがあります。

 

モメンタム(momentum)

オーバーフィッテングを避けて、効率よく最適解を見つける為に有効な手段として、「学習率は始めは大きく、だんだん小さくする」という方法が効果的です。

ですが学習率は固定としても同様の方法を取ることができます。これを実現する方法としてパラメータを以下のようにして、更新します。

 

$$
\Delta \mathbf { w } _ { t } = – \epsilon \nabla _ { \mathbf { w } } E ( \mathbf { w } ) + p \Delta \mathbf { w } _ { t – 1 }
$$

 

Eは誤差関数、wは重み、εは学習率、pはモーメンタムパラメータ。この式の大元はかなり有名な更新式、最急降下法(Gradient descent, steepest descent)を応用したものです。この手法を用いると、急な勾配ではパラメータの更新が細かくなる為、「学習率は始めは大きく、だんだん小さくする」と同じようなことを実現できるようになります。

 

ネステロフ モメンタム(nesterov momentum)

ネステロフモメンタムはモメンタムを少し応用したものです。この手法のエッセンスとなる式を紹介します。

 

$$
\begin{array} { c } { v _ { t + 1 } = \mu v _ { t } – \eta \nabla l ( \theta ) } \\ { \theta _ { t + 1 } = \theta _ { t } + v _ { t + 1 } } \end{array}
$$

 

μはモーメンタムパラメータ、vはベクトルです。この式の意味を図示すると

それぞれのベクトルを足し合わせることで、θを更新していきます。この足し合わせたベクトルは「どこの方向に向かったほうがいいのか」を示し、最適解を探索してくれます。具体的な解説がなくてすみません。この辺りはしっかり論文や海外サイトを読んで勉強するべきですね。まとめ次第、記事を更新したいと思います。

 

参考サイト

 

最後まで読んで頂き、ありがとうございました。
SNS等でのシェアが頂ければ幸いです。

関連記事

プロフィール

@KATUO

現在都内私立大学に通う大学4年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習をスタート。この時期からプログラミングにどハマりし、現在までに「AIスタートアップ」「Webマーケティング会社」でエンジニアとしての業務に没頭してきた。

過去の投稿