本文へ移動

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