深層学習ことはじめ その10

これから数回にわたって深層学習についての記事を書きます.ひとまとめに長文としたものを数回に分けて紹介していきます.初学者向けです,何かの参考になれば.前回の記事を読んでいない方は先にそちらを見てください.

******

現代の手法による逆伝搬の改善 – 運動量、適応学習率、および正則化

ここで説明するテクニックはすべて簡単に説明できます。しかし、この単純さはそれらの有用性を隠し、少し誤解を招く可能性があります。しかし、私たちがここで行っているのはコンピュータサイエンス、つまりプログラミングであることを忘れないでください。

Momentum

勾配降下における運動量は、物理学における運動量のように働く。あなたがすでに特定の方向に動いていたならば、あなたはその方向に動き続け、あなたの運動量によって進められます。運動量は最後の体重変化として定義される。次の重みの変化は、重みに関するコストの勾配と運動量の両方の関数です。
w(t)= w(t-1)+ mu * v(t) – learning_rate * dJ(t)/ dw
ここで、muは運動量パラメータと呼ばれます(通常は0.99前後に設定されます)。これを次のように単純化することができます。
dw(t)= mu * dw(t-1) – learning_rate * dJ(t)/ dw
そして、
w(t)+ = dw(t)の運動量は学習プロセスを大幅にスピードアップします。適応学習率適応学習率には多くの種類がありますが、それらはすべて1つの共通のテーマを持っています – 時間とともに減少します。たとえば、10エポックごとに学習率を半分にすることができます。例えば
if epoch%10 == 0
:learning_rate / = 2

inverse decay

learning_rate = A /(1 + kt)もう1つの方法は指数関数的減衰です。learning_rate = A * exp(-kt)より現代的な適応方法はAdaGradです。これは重みの変化のキャッシュをこれまでのところ保持することを含みます。各重みの各次元には独自のキャッシュがあります。 cache = cache + gradient * gradient Numpyの規約に従って、要素ごとの乗算があることに注意してください。
w -= learning_rate * gradient /(sqrt(cache)+ epsilon)
ここで、epsilonは0で割ることを避けるために10 ^ -10のような小さな数です。研究者達はAdaGradがしばしば勾配が大きくなりすぎることを発見しました。 RMSpropはAdaGradに似たもう1つの方法で、キャッシュが「リーク」しています(つまり、以前の値のほんの一部しか保持していません)。この場合、cache = decay_rate * cache +(1 – decay_rate)* grad ^ 2そして、重み更新の公式は変わりません。

コメント

タイトルとURLをコピーしました