用語集 ~最適化アルゴリズム~

目次

~最適化アルゴリズムに関する用語~

勾配降下法 (Gradient Descent)

勾配降下法(Gradient Descent)は、機械学習モデルのパラメータを最適化するためのアルゴリズムで、損失関数の勾配(傾き)を基にして、誤差を最小化する方向にパラメータを調整する手法です。具体的には、パラメータが現在の位置における勾配の逆方向に更新されます。勾配降下法は、損失関数が最小値に到達するまで繰り返しパラメータを更新し、最適な解を見つけます。更新ステップは次の式で表されます:
$\theta = \theta – \eta \cdot \nabla J(\theta)$
ここで、( \theta ) はパラメータ、( \eta ) は学習率、( \nabla J(\theta) ) はパラメータに対する損失関数の勾配です。勾配降下法は、全てのトレーニングデータを一度に処理して損失関数の勾配を計算する「バッチ勾配降下法」が基本形となりますが、計算コストが高く、特に大規模なデータセットでは非効率です。これを改善するために、確率的勾配降下法やミニバッチ勾配降下法が開発されました。

確率的勾配降下法 (SGD: Stochastic Gradient Descent)

確率的勾配降下法(Stochastic Gradient Descent, SGD)は、勾配降下法の一種で、全てのトレーニングデータを一度に使用する代わりに、各ステップで1つのサンプル(または少数のサンプル)をランダムに選んで損失関数の勾配を計算し、パラメータを更新します。これにより、計算が非常に高速化され、特に大規模データセットでの学習が効率的になります。SGDの更新式は次の通りです:
[ \theta = \theta – \eta \cdot \nabla J(\theta; x^{(i)}, y^{(i)}) ]
ここで、( x^{(i)}, y^{(i)} ) はデータセットの一つのサンプルです。SGDの利点は、学習のスピードが速く、リアルタイム更新が可能な点ですが、デメリットとして、パラメータの更新がノイズの影響を受けやすく、損失関数が安定して収束しにくいことがあります。これを改善するために、モーメンタムNesterov加速勾配法などのテクニックがよく用いられます。

ミニバッチ勾配降下法 (Mini-Batch Gradient Descent)

ミニバッチ勾配降下法(Mini-Batch Gradient Descent)は、バッチ勾配降下法と確率的勾配降下法(SGD)の中間に位置する手法で、トレーニングデータを小さな「ミニバッチ」に分割し、そのミニバッチ単位で勾配を計算してパラメータを更新します。ミニバッチサイズ(通常32~256サンプル程度)はハイパーパラメータとして設定されます。ミニバッチ勾配降下法の更新式は次の通りです:
[ \theta = \theta – \eta \cdot \frac{1}{m} \sum_{i=1}^{m} \nabla J(\theta; x^{(i)}, y^{(i)}) ]
ここで、( m ) はミニバッチのサイズです。ミニバッチ勾配降下法は、SGDに比べてノイズが少なく、計算効率が良いという利点があります。また、GPUや分散環境を利用して並列処理ができるため、トレーニング速度が向上します。ミニバッチ勾配降下法は、ほとんどの現代的なディープラーニングフレームワークで標準的に使用されており、効率的なトレーニングを実現します。

モーメンタム (Momentum)

モーメンタム(Momentum)は、勾配降下法の収束を加速し、学習過程での振動を抑えるためのテクニックです。モーメンタムは、過去の勾配に基づく「慣性」を持たせることで、現在の更新に対して影響を与えます。これにより、勾配が一定方向に向かっている場合は更新速度が上がり、局所的な最小値に引っかかるリスクや、ジグザグした動きを抑える効果があります。モーメンタムの更新式は次の通りです:
[ v_t = \beta v_{t-1} + (1 – \beta) \nabla J(\theta) ]
[ \theta = \theta – \eta v_t ]
ここで、( \beta ) はモーメンタムの係数(通常は0.9程度)で、過去の勾配の影響度を調整します。モーメンタムにより、勾配が小さい領域では動きが加速され、勾配が大きく変動する場所では安定性が保たれるため、SGDの収束が速くなり、より安定した学習が可能になります。

Nesterov Accelerated Gradient (NAG)

Nesterov Accelerated Gradient(NAG)は、モーメンタムを改良した最適化手法で、モーメンタムの先読み機能を追加することで、より正確に損失関数の最小値を見つけることを目指しています。NAGは、現在の位置ではなく、モーメンタムによって予測される位置で勾配を計算するという特徴があります。これにより、パラメータの更新がより正確になり、過剰な修正を防ぐことができます。NAGの更新式は次の通りです:
[ v_t = \beta v_{t-1} + (1 – \beta) \nabla J(\theta – \eta \beta v_{t-1}) ]
[ \theta = \theta – \eta v_t ]
NAGは、モーメンタムが持つ収束の加速効果を維持しつつ、勾配をより精密に計算することで、特に複雑な損失関数の地形での学習を安定化させます。ディープラーニングの分野では、SGDにモーメンタムを加えた手法が標準的に使用されていますが、NAGはさらに効率的な収束を提供します。

AdaGrad

AdaGrad(Adaptive Gradient Algorithm)は、勾配降下法の拡張版で、各パラメータごとに学習率を自動的に調整することで、最適化を効率化するアルゴリズムです。従来の勾配降下法では、全てのパラメータに対して同じ学習率が適用されますが、AdaGradでは頻繁に更新されるパラメータの学習率を小さくし、あまり更新されないパラメータの学習率を大きくすることで、学習の安定性と効率を向上させます。更新式は次の通りです:
[ \theta_{t+1} = \theta_t – \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot \nabla J(\theta_t) ]
ここで、( G_t ) は過去の勾配の累積の二乗和、( \epsilon ) はゼロ除算を防ぐための小さな値です。AdaGradは、まばらなデータセット(例えば自然言語処理や推薦システムなど)において効果的で、異なるスケールの特徴量を持つ問題に対しても適応可能です。しかし、累積した勾配の二乗和が大きくなりすぎると、学習率が極端に小さくなり、学習が進まなくなるという欠点もあります。

RMSProp

RMSProp(Root Mean Square Propagation)は、AdaGradの欠点を改善した最適化アルゴリズムで、学習率の減少を防ぐために、勾配の二乗和の累積を指数移動平均で制御する手法です。これにより、長期間にわたる勾配の影響が徐々に薄れ、学習が停止する問題を軽減します。RMSPropの更新式は次の通りです:
[ E[g^2]t = \beta E[g^2]{t-1} + (1 – \beta) g_t^2 ]
[ \theta_{t+1} = \theta_t – \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \cdot \nabla J(\theta_t) ]
ここで、( E[g^2]_t ) は勾配の二乗の移動平均、( \beta ) は減衰率(通常0.9)、( \epsilon ) は数値の安定性を保つための小さな値です。RMSPropは、特にオンライン学習リカレントニューラルネットワーク(RNN)など、勾配が変動しやすいタスクで優れた性能を発揮します。勾配の履歴を柔軟に扱いながら適応的に学習率を調整するため、長期的な学習にも適しています。

Adamオプティマイザ (Adam Optimizer)

Adam(Adaptive Moment Estimation)は、勾配降下法の進化系で、RMSPropとモーメンタムを組み合わせた最適化アルゴリズムです。Adamは、勾配の一次モーメント(移動平均)と二次モーメント(勾配の二乗の移動平均)を両方考慮しながら、パラメータの更新を行います。これにより、学習率が適応的に調整され、収束が速く、安定した学習が可能です。更新式は次の通りです:
[ m_t = \beta_1 m_{t-1} + (1 – \beta_1) g_t ]
[ v_t = \beta_2 v_{t-1} + (1 – \beta_2) g_t^2 ]
[ \hat{m}t = \frac{m_t}{1 – \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 – \beta_2^t} ] [ \theta{t+1} = \theta_t – \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t ]
ここで、( m_t ) と ( v_t ) はそれぞれ勾配の移動平均と二乗移動平均、( \beta_1 ) と ( \beta_2 ) はそれぞれモーメントの係数(通常は0.9と0.999)、( \epsilon ) は数値の安定性を保つための小さな定数です。Adamは、収束速度学習の安定性が高いため、非常に広く使用されている最適化手法です。特にディープラーニングの分野で、複雑なモデルに対して優れた性能を発揮します。

AdaDelta

AdaDeltaは、AdaGradの累積した勾配の影響を制限し、学習率が過度に低下する問題を改善した最適化アルゴリズムです。AdaDeltaは、勾配の履歴に依存しすぎないように、勾配の移動平均を利用してパラメータ更新を行います。これにより、AdaGradのように学習率が極端に小さくなるのを防ぎます。AdaDeltaの更新式は次の通りです:
[ E[g^2]t = \rho E[g^2]{t-1} + (1 – \rho) g_t^2 ]
[ \Delta \theta_t = – \frac{\sqrt{E[\Delta \theta^2]{t-1} + \epsilon}}{\sqrt{E[g^2]_t + \epsilon}} g_t ] [ E[\Delta \theta^2]_t = \rho E[\Delta \theta^2]{t-1} + (1 – \rho) (\Delta \theta_t)^2 ]
ここで、( \rho ) は減衰率、( E[g^2]_t ) は勾配の二乗の移動平均、( E[\Delta \theta^2]_t ) はパラメータ更新量の移動平均です。AdaDeltaは、学習率の手動設定を不要にし、すべてのパラメータに対して動的に学習率を調整するため、大規模なデータセットや複雑なモデルでも安定して動作します。

Adamax

Adamaxは、Adamオプティマイザの拡張版で、L∞ノルムを用いた最適化アルゴリズムです。Adamaxは、特にパラメータのスケールが大きい場合に有効であり、Adamよりも数値的に安定するケースがあります。Adamaxの更新式は、基本的にはAdamに似ていますが、二次モーメントの計算にL∞ノルムを使用する点が異なります。具体的には、更新式は次のように表されます:
[ m_t = \beta_1 m_{t-1} + (1 – \beta_1) g_t ]
[ u_t = \max(\beta_2 u_{t-1}, |g_t|) ]
[ \theta_{t+1} = \theta_t – \frac{\eta}{u_t} m_t ]
ここで、( u_t ) は勾配のL∞ノルムの移動平均を示します。Adamaxは、Adamの特性を引き継ぎつつ、スケーリングや数値安定性が重要なタスクで効果的に機能します。

Nadam

Nadam(Nesterov-accelerated Adaptive Moment Estimation)は、Adamオプティマイザの拡張版で、Nesterov加速勾配法(NAG)の概念を取り入れた最適化アルゴリズムです。Adamがモーメンタムと勾配の移動平均を組み合わせて学習率を適応的に調整するのに対し、Nadamは勾配を更新する際に、Nesterovの先読みを加え、より正確な勾配計算を行います。これにより、Adamよりも安定して早く収束することが期待できます。Nadamの更新式は次の通りです:
[ m_t = \beta_1 m_{t-1} + (1 – \beta_1) g_t ]
[ v_t = \beta_2 v_{t-1} + (1 – \beta_2) g_t^2 ]
[ \hat{m}t = \frac{m_t}{1 – \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 – \beta_2^t} ] [ \theta{t+1} = \theta_t – \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} (\beta_1 \hat{m}_t + (1 – \beta_1) g_t) ]
Nadamは、特にRNNやLSTMなどのシーケンシャルデータの学習で効果的とされ、収束速度や安定性の面でAdamに対して優位性が見られる場合があります。

AMSGrad

AMSGradは、Adamオプティマイザの修正版で、Adamが持つ潜在的な欠点である「過学習」の問題を緩和するために開発された最適化アルゴリズムです。Adamでは、勾配の二乗の移動平均を使用してパラメータを更新しますが、AMSGradでは、その二乗移動平均の過去の最大値を保持し、これをパラメータ更新に使用します。これにより、学習率が極端に大きくなることを防ぎ、安定した収束が期待されます。AMSGradの更新式は次の通りです:
[ v_t = \beta_2 v_{t-1} + (1 – \beta_2) g_t^2 ]
[ \hat{v}t = \max(\hat{v}{t-1}, v_t) ]
[ \theta_{t+1} = \theta_t – \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} m_t ]
AMSGradは、長期間にわたる学習や、大規模なデータセットに対して適した最適化手法であり、特にモデルが局所最小値に引っかかりにくく、より良い収束を提供します。

学習率減衰 (Learning Rate Decay)

学習率減衰(Learning Rate Decay)は、ニューラルネットワークのトレーニング中に、学習率(Learning Rate)を徐々に減少させる手法です。初期のトレーニング段階では高い学習率で大きなステップを取り、トレーニングが進むにつれて学習率を小さくして細かい調整を行うことで、最適解への収束をより安定させます。代表的な減衰方法には、次のようなアプローチがあります:

  1. ステップ減衰:一定のエポックごとに学習率を減少させる。
    [ \eta_t = \eta_0 \cdot \gamma^{\lfloor \frac{t}{T} \rfloor} ]
    ここで、( \eta_0 ) は初期学習率、( \gamma ) は減衰率、( T ) は減衰のタイミングです。
  2. 指数減衰:時間とともに学習率が指数的に減少する。
    [ \eta_t = \eta_0 \cdot e^{-\lambda t} ]
  3. 余弦減衰(Cosine Decay):学習率がコサイン曲線に沿って減少する。
    学習率減衰を適切に使うことで、モデルが最適な解に効率よく収束することが期待されます。特に、学習後半での細かな調整が必要なタスクでは有効です。

早期終了 (Early Stopping)

早期終了(Early Stopping)は、モデルのトレーニングが進んでいる途中で、過学習(オーバーフィッティング)を防ぐために、トレーニングを途中で停止する手法です。通常、モデルはトレーニングデータに対しては精度が上がり続けますが、過学習が進むと、テストデータや検証データに対する性能が低下し始めます。早期終了では、検証データに対する損失が改善しなくなった時点でトレーニングを終了します。具体的には、いくつかのエポックにわたって検証損失が改善しない場合に停止する仕組みです。早期終了は次のようなフローで実装されます:

  1. トレーニング中に検証損失をモニター。
  2. 設定された「パットエンス」(待機エポック数)以上に損失が改善しない場合にトレーニングを終了。
    早期終了は、トレーニングのコストを削減し、最適なエポック数で学習を止めるため、モデルがデータに過度に適合するのを防ぎ、汎化能力を向上させます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社PROMPTは生成AIに関する様々な情報を発信しています。
記事にしてほしいテーマや調べてほしいテーマがあればお問合せフォームからご連絡ください。
---
PROMPT Inc. provides a variety of information related to generative AI.
If there is a topic you would like us to write an article about or research, please contact us using the inquiry form.

コメント

コメントする

目次