G検定(ジェネラリスト検定)
あだでるた
アダデルタ
AdaDelta
Adagradで学習率が単調に小さくなり続ける弱点を、過去の勾配の2乗の指数移動平均で抑え、更新式から学習率そのものも消した最適化手法。
詳しい説明
Adagradの弱点を和らげる拡張
Adagradは、過去の勾配の2乗を更新式の分母に足し続けます。足す項はどれも正なので、この累積和は学習のあいだずっと増え続けます。その結果、学習率は縮み続けて最終的にほぼ0になり、それ以上学習が進まなくなります。
アダデルタ(Adadelta)は、このように急激かつ単調に減っていく学習率を抑えるための、Adagradの拡張です。過去の勾配の2乗をすべて累積するのではなく、累積する範囲を一定の幅wの窓に限ります。ただし、過去w個の勾配の2乗を保存しておくのは効率が悪いため、過去のすべての勾配の2乗を減衰させた平均(指数移動平均)として再帰的に定義します。
勾配の2乗の指数移動平均
時刻tの移動平均E[g^2]_tは、直前の平均と現在の勾配だけで決まります。
E[g^2]_t = γ*E[g^2]_(t-1) + (1-γ)*g_t^2
γはモメンタム項と同じくらいの値、0.9前後に設定します。
Adagradの分母を置き換える
パラメータの更新量Δθ_tを使うと、SGDの更新は Δθ_t = -η*g_(t,i)、θ_(t+1) = θ_t + Δθ_t と書けます。Adagradの更新量は次のとおりです。
Δθ_t = -(η/sqrt(G_t + ε))*g_t
この対角行列G_tを、過去の勾配の2乗の減衰平均E[g^2]_tに置き換えます。
Δθ_t = -(η/sqrt(E[g^2]_t + ε))*g_t
分母は勾配の二乗平均平方根(RMS)なので、Δθ_t = -(η/RMS[g]_t)*g_t と略して書けます。
更新量の単位をパラメータに合わせる
この式では、SGD、Momentum、Adagradと同じく、更新量の単位がパラメータの単位と一致しません。本来、更新量はパラメータと同じ単位を持つべきです。そこで、勾配ではなくパラメータ更新量の2乗について、もう1つ指数移動平均を定義します。
E[Δθ^2]_t = γ*E[Δθ^2]_(t-1) + (1-γ)*Δθ_t^2
RMS[Δθ]_t = sqrt(E[Δθ^2]_t + ε)
時刻tではRMS[Δθ]_tがまだ分からないため、1つ前の時刻までの値RMS[Δθ]_(t-1)で近似します。そして、前の式の学習率ηをこの値で置き換えます。
最終的な更新式
Δθ_t = -(RMS[Δθ]_(t-1)/RMS[g]_t)*g_t
θ_(t+1) = θ_t + Δθ_t
更新式から学習率ηが消えているため、Adadeltaでは学習率の既定値を設定する必要すらありません。
学習のポイント
Adagradとの違いは、分母を全期間の累積和ではなく減衰する平均にした点と、学習率の代わりに過去の更新量のRMSを使う点の2つです。アダデルタは、G検定のシラバス2024のキーワードに含まれる語です。
試験で問われること
G検定
- AdadeltaはAdagradの拡張で、過去の勾配の2乗を累積し続けるために学習率が単調に減って最終的にほぼ0になり、学習が進まなくなる弱点を和らげるためのものである。
- 過去の勾配の2乗をすべて累積せず固定幅wの窓に限る考え方を、過去の値を保存しない指数移動平均E[g^2]_t = γ*E[g^2]_(t-1) + (1-γ)*g_t^2で再帰的に実現する。
- 減衰率γはモメンタム項と同じくらいの0.9前後に設定する。Adagradの更新式の分母にある対角行列G_tをE[g^2]_tに置き換えると、分母は勾配のRMSであるRMS[g]_tになる。
- SGD、Momentum、Adagradの更新量はパラメータと単位が合わないため、Adadeltaはパラメータ更新量の2乗の指数移動平均E[Δθ^2]_tを定義し、そのRMSで学習率ηを置き換える。
- 最終的な更新式はΔθ_t = -(RMS[Δθ]_(t-1)/RMS[g]_t)*g_tである。時刻tのRMSは未知なので1つ前の値で近似し、式から学習率が消えるため既定値の設定も要らない。
最終更新日: 2026/09/23