Adamの仕組みと計算手順を具体例で解説

こんにちは。ゆうせいです。

機械学習のモデルが予測の精度を向上させるためには、誤差を最小にするように重みパラメータを調整する最適化アルゴリズムが不可欠です。代表的な手法として広く活用されているアルゴリズムに、Adam(Adaptive Moment Estimation)があります。Adamの基礎概念、更新の計算手順、長所と短所を順を追って解説します。

Adamの基本概念

機械学習では、勾配降下法を基礎としてモデルのパラメータを更新します。Adamは、過去の勾配の勢いを保持するMomentumの考え方と、パラメータごとに学習率を調整するRMSpropの考え方を組み合わせたアルゴリズムです。

過去の勢いと歩幅の調整を自転車の走行に例える

従来の最適化アルゴリズムでは、勾配の向きだけに頼って進むか、歩幅の調整だけに特化する傾向がありました。

Adamの挙動は、変速ギアのついた自転車で坂道を下る状況に例えられます。平坦な場所や緩やかな下り坂では、これまでに獲得した走行の勢い(慣性)を維持して滑らかに進みます。同時に、急な傾斜や不整地に遭遇した際には、過去の振動の激しさに応じて自動的にギアを調整し、1漕ぎで進む距離(歩幅)を適切に抑制します。進行の勢いと適切な歩幅の管理を同時に行う手法がAdamです。

Adamの計算手順と更新式

Adamでは、過去の勾配の平均値に相当する1次モーメントと、過去の勾配の二乗平均値に相当する2次モーメントを計算し、学習初期の偏りを補正した上でパラメータを更新します。

変数の定義は次の通りです。

調整対象の重みパラメータ:w

学習率:eta

勾配の指数移動平均(1次モーメント):m

勾配二乗の指数移動平均(2次モーメント):v

1次モーメントの減衰率:beta1(標準的な値は0.9)

2次モーメントの減衰率:beta2(標準的な値は0.999)

微小な値(ゼロ除算防止用):epsilon

現在の更新回数(ステップ数):t

損失関数:E

更新の手順は次の4段階で進行します。

ステップ1:勾配の移動平均(mとv)の更新

直前の移動平均に減衰率を掛け、現在の勾配の成分を加算します。

m = beta1 * m + (1 - beta1) * (dE / dw)

v = beta2 * v + (1 - beta2) * (dE / dw)^2

ステップ2:初期値の偏り(バイアス)の補正

mとvの初期値は0に設定されているため、学習の開始直後は値が0に近づきすぎる偏りが生じます。更新回数tを用いて偏りを補正した値、m_hatとv_hatを算出します。

\hat{m} = \frac{m}{1 - \beta_{1}^{t}}

\hat{v} = \frac{v}{1 - \beta_{2}^{t}}

ステップ3:パラメータの更新

補正されたm_hatとv_hatを用いて、重みパラメータwを更新します。

w_{new} = w - \frac{\eta}{\sqrt{\hat{v}} + \epsilon} \cdot \hat{m}

Adamの具体的な計算例

数値を当てはめて、1回目の更新における計算手順を確認します。

設定条件

初期のパラメータ設定を定めます。

重みパラメータ初期値:w = 2.0

1次モーメント初期値:m = 0.0

2次モーメント初期値:v = 0.0

学習率:eta = 0.1

減衰率:beta1 = 0.9

減衰率:beta2 = 0.999

ゼロ除算防止用の定数:epsilon = 0.00000001(計算への影響が極めて小さいため省略します)

現在のステップ数:t = 1

予測式:y = w * x

損失関数:E = \frac{1}{2}(y - t)^{2}

損失の勾配は次の式で計算されます。

\frac{\partial E}{\partial w} = (y - t) \cdot x

入力データx = 1、正解データt = 1が与えられた状況を想定します。

1回目の更新計算の実行

  1. 予測値の算出y = 2.0 * 1 = 2.0
  2. 勾配の算出dE / dw = (2.0 - 1.0) * 1 = 1.0
  3. 1次モーメントmと2次モーメントvの計算m = 0.9 * 0.0 + (1 - 0.9) * 1.0 = 0.1v = 0.999 * 0.0 + (1 - 0.999) * (1.0)^2 = 0.001 * 1.0 = 0.001
  4. バイアス補正の計算ステップ数t = 1を代入して補正値を求めます。

\hat{m} = \frac{0.1}{1 - 0.9^{1}} = \frac{0.1}{0.1} = 1.0

\hat{v} = \frac{0.001}{1 - 0.999^{1}} = \frac{0.001}{0.001} = 1.0

補正計算を経由することで、初期値0の影響が解消され、m_hatとv_hatの値が適切に補正されました。

  1. パラメータwの更新平方根を用いた更新式に数値を代入します。

w_{new} = 2.0 - \frac{0.1}{\sqrt{1.0}} \times 1.0 = 2.0 - 0.1 \times 1.0 = 1.9

1回目の更新を終えた段階で、重みパラメータwは2.0から1.9へ更新されました。2回目以降の更新では、直前のmの値0.1とvの値0.001が引き継がれ、過去の履歴を踏まえた更新が連続して行われます。

Adamの長所と短所

Adamの運用面における特性を整理します。

長所

  • 過去の勾配の勢いとパラメータごとの学習率の調整を兼ね備えているため、幅広い機械学習モデルにおいて安定した収束挙動を示します。
  • ハイパーパラメータである減衰率beta1やbeta2の推奨値が理論的に整っており、標準設定のままでも良好に機能する場合が多く見られます。
  • バイアス補正の機構が組み込まれているため、学習開始直後の更新量が極端に小さくなる現象を防ぐことができます。

短所

  • 過去の勾配情報を保持するために、各重みパラメータに対してmとvという2つの追加変数をメモリ上に確保する必要があり、記憶容量の消費が増加します。
  • 学習の終盤において、過去の急激な勾配情報の影響が残り続け、最適な最小値の周辺を飛び越えてしまう現象が一部の課題で報告されています。

まとめ

Adamに関する理解を深めるための学習手順は次の通りです。

  1. 過去の勾配の勢いを扱うMomentumと、学習率の減衰を扱うRMSpropのそれぞれの単体での計算式を再確認する。
  2. ステップ数tが増加した際に、バイアス補正項である分母の数値がどのように1へ収束していくかを数式上で確認する。
  3. Adamの終盤における過剰な移動を抑制するために提案された改良アルゴリズムである「AdamW」や「AMSGrad」の更新規則へと学習を進める。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。