前回の続きで他の最適化手法も見ていきましょう!
最適化手法② AdaGrad
これは学習率を更新ごとに変化させていく手法です。
基本的に勾配降下法、Momentumでは学習率は一定でした。
学習率を最初は大きく段々と小さくしていくという手法はニューラルネットワークの学習においてよく使用される手法のようです。(Learning Rate Decay)
学習率を勾配の計算時に毎回更新していくのがこの手法の特徴です。
定義は以下の通り。
h ← h + ∂L / ∂W * ∂L / ∂W
W ← W - η * 1 / √h * ∂L / ∂W
W: 重みパラメータ
η: 学習率
∂L / ∂W: 損失関数の勾配
h: 過去の勾配の2乗和
η: 学習率
∂L / ∂W: 損失関数の勾配
h: 過去の勾配の2乗和
勾配が大きくなるほどhも大きくなり、学習率が下がっていくわけですねー。
実際に計算してみましょう!
- f(x,y) = (1/20) * x^2 + y^2 の最小値をAdaGradで求める
- 初期値=(-3.0, 4.0), 学習率=0.1, step=3, h=0
Step1
偏微分の計算
xについて微分すると ∂f / ∂x = 10 / x
yについて微分すると ∂f / ∂x1 = 2 * y
∂f / ∂x = -3/10 = -0.3
∂f / ∂y = 8
hx = 0 + (-0.3) * (-0.3) = 0.09
hy = 0 + 8 * 8 = 64
x=-3.0 - 0.1 * (1 / √0.09) * -0.3 = -2.9
y=4.0 - 0.1 * (1 / √64) * 8 = 3.9
Step2
∂f / ∂x = -2.9/10 = -0.29
∂f / ∂y = 3.9 * 2 = 7.8
hx = 0.09 + (-0.29) * (-0.29) = 0.174
hy = 64 + 7.8 * 7.8 = 124.84
x=-2.9 - 0.1 * (1 / √0.174) * -0.29 = -2.830
y=3.9 - 0.1 * (1 / √124.84) * 7.8 = 3.8301
Step3
∂f / ∂x = -2.830 / 10 = -0.283
∂f / ∂y = 3.8301 * 2 = 7.6602
hx = 0.174 + (-0.283) * (-0.283) = 0.2540
hy = 124.84 + 7.6602 * 7.6602 = 183.518
x=-2.83 - 0.1 * (1 / √0.2540) * -0.283 = -2.7738
y=3.8301 - 0.1 * (1 / √183.518) * 7.6602 = 3.7735
xはMomentumよりも早くなっていますが、yは遅くなっていますね。
大きく動くものは遅くなり、小さくしか動かないものを大きく動かすというのがAdaGradの特徴なんですねー。
コメント
コメントを投稿