深層学習

適応的最適化法

座標ごとの勾配履歴から実効学習率を調整し、スケールや勾配の疎らさに左右されにくくする最適化の考え方です。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

適応的最適化法は、全座標に同じ学習率を掛けるのではなく、各座標の勾配履歴から実効的な学習率を変える方法です。勾配の大きさや出現頻度が座標ごとに違っても、更新を一律に止めにくくします。

坂道を歩くとき、傾斜の急な方向には小さく、緩い方向には大きく歩幅を変えるようなものです。全方向に同じ歩幅で進むより、座標ごとの地形に合わせて動けます。

なぜ必要か

通常の確率的勾配降下法では、更新幅を決める学習率 η\eta は全座標で共通です。しかし、ある座標だけ勾配が頻繁かつ大きく出ると、その座標は振動しやすく、逆にまれにしか勾配が現れない座標はほとんど動きません。特に疎な特徴では、頻出する座標を抑えつつ、まれだが予測に効く座標を見逃さない調整が必要です。

そこで、過去の勾配の大きさを座標別に記録し、大きな勾配を受け続けた座標の歩幅を縮めます。AdaGradはこの考え方を累積履歴で実現しましたが、累積し続けると分母が増え、後半に更新が小さくなりすぎることがあります。移動平均を使う手法は、最近の履歴を重くしてこの問題を扱います。

座標の状態調整の方向
勾配が大きく頻繁に出る実効学習率を下げ、振動を抑える
勾配がまれにしか出ない相対的に大きな歩幅を残し、更新を拾う

仕組み

時刻 tt の勾配を gt\mathbf{g}_t、パラメータを θt\boldsymbol{\theta}_t、小さな正数を ε\varepsilon とします。二乗勾配の移動平均を vt\mathbf{v}_t とすると、考え方の中心は次の実効学習率です。

実効学習率t,i=ηvt,i+ε\text{実効学習率}_{t,i}=\frac{\eta}{\sqrt{v_{t,i}}+\varepsilon}

ii はパラメータの座標、η\eta は基準となる学習率です。vt,iv_{t,i} が大きい座標ほど分母が大きくなり、同じ勾配でも更新幅が小さくなります。AdaGradは二乗勾配を累積し、Adamは二乗勾配の移動平均に加えて勾配そのものの一次モーメントも持ちます。一次モーメントは方向の平滑化、二次モーメントは座標別のスケール調整を担う、と切り分けると覚えやすいです。

モーメントをゼロから始めると、最初の数ステップでは観測データが少ないため平均値がゼロ寄りに偏ります。とくに二次モーメントの推定値が小さく見えると、分母が過小評価されて初期更新が過大になります。Adamのバイアス補正は、ゼロ初期化で生じたこの偏りを時刻に応じて戻す処理です。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
適応的学習率の意味二乗勾配の履歴で座標ごとに分母を変える学習率を全座標で同じにする
Adamの構成一次モーメントと二次モーメントを併用する二次モーメントだけを持つ
バイアス補正の理由モーメントをゼロ初期化するため初期推定がゼロ寄りになる正則化のための補正とする
手法の選択収束の速さだけでなく、検証性能と再現性で比較するAdamなら常にSGD+モメンタムより汎化する

実装で確かめる

二乗勾配の移動平均だけを取り出し、座標ごとに実効学習率が変わる様子を確認します。コードはAdam全体の更新を再現するものではなく、適応の核を示す最小例です。

import numpy as np

grads = np.array([[4.0, 0.2], [2.0, 0.1], [1.0, 0.05]])
beta2, eta, eps = 0.9, 0.01, 1e-8
v = np.zeros(2)
for g in grads:
    v = beta2 * v + (1 - beta2) * g**2
    rate = eta / (np.sqrt(v) + eps)
    print(np.round(rate, 6))

出力は次のようになります。

[0.007905 0.079057]
[0.006258 0.062579]
[0.005611 0.056114]

第一座標は大きな勾配を受け続けるため、第二座標より実効学習率が小さくなります。実務では、適応法で訓練損失が早く下がっても、検証性能まで自動的に優れるとは限りません。汎化を重視するなら、SGD+モメンタムも候補に残して同じ検証条件で比較します。

取り違えやすいもの

用語適応的最適化法との切り分け
AdaGrad二乗勾配の累積で座標別に学習率を下げる。長期には更新が小さくなりやすい
Adam一次モーメントと二次モーメントを使い、初期モーメントのバイアスも補正する
SGD+モメンタム過去の更新方向を利用するが、座標別の二乗勾配で分母を調整する発想とは別
RMSProp二乗勾配の移動平均でスケールを調整する系統。Adamとの違いは一次モーメントやバイアス補正の扱いにある

想起チェック

適応的手法は何を座標ごとに変えるか

二乗勾配の履歴を使って、基準学習率から実効学習率を変えます。勾配の大きい座標ほど更新を抑えます。

Adamが持つ二つのモーメントは何か

勾配そのものの一次モーメントと、勾配の二乗の二次モーメントです。前者は方向、後者は座標別のスケールに対応します。

初期ステップでバイアス補正が必要な理由は何か

モーメントをゼロで初期化するため、観測が少ない間は推定値がゼロ寄りになります。そのままでは分母が小さく見え、更新が過大になり得ます。

出典