モデルのしくみ 中級

勾配降下法

Gradient Descent

損失関数の値が小さくなる方向へ、パラメータを少しずつ動かして最適な値を探す方法です。ニューラルネットワークの学習で最も基本的に使われる手法で、山を下るような動きにたとえられます。

例ファインチューニングでは学習率を大きくしすぎると元の能力が壊れやすいので、小さめの値から勾配降下法を始める。

詳しく

勾配降下法は、「間違いの大きさ」を表す損失関数をできるだけ小さくするために、パラメータを少しずつ調整していく方法です。勾配とは、パラメータを動かしたときに損失がどちらへ・どの程度増減するかを示す傾きです。その傾きを手がかりに、損失が下がる向き(下り坂)へ進むので「降下」と呼ばれます。

しくみ

基本の更新式は単純です。

新しい値 = 今の値 − 学習率 × 勾配

勾配は逆伝播法で求め、学習率は「1歩の大きさ」を決める設定値です。これを何万回、何百万回も繰り返して、損失を少しずつ下げていきます。

具体例

霧のかかった山で、頂上ではなく谷底を目指す登山者を想像してください。視界は足元の数メートルしかありません。それでも、足元の傾きを確かめて「下っているほうへ一歩」を繰り返せば、谷に着けます。勾配降下法はこの方法そのものです。

学習率は歩幅にあたります。

  • 歩幅が大きすぎる:谷を飛び越えてしまい、損失が振動したり、発散したりする。
  • 歩幅が小さすぎる:進みが遅く、学習に時間がかかる。
  • 実際には、最初は大きめにして徐々に小さくする方法(学習率スケジュール)がよく使われます。

実際に使われる変種

全データの勾配を毎回計算するのは重すぎるため、実用では少量ずつ使います。

  • 確率的勾配降下法(SGD)/ミニバッチ:データを小さな塊(バッチ)に分けて、塊ごとに更新する。勾配に多少の揺れが生じますが、計算が軽く、かえって局所的な落とし穴から抜けやすいと言われます。
  • Adam などの最適化手法:過去の勾配の動きも使って、パラメータごとに歩幅を調整する。大規模言語モデルの学習では、Adam の改良版がよく使われています。

使うときの注意・よくある誤解

  • 必ず最良の答えに着くわけではない:谷が複数ある地形では、浅い谷(局所最適)で止まることがあります。ただし、巨大なネットワークでは、実用上十分に良い解が見つかることが経験的に知られています。
  • 損失が下がることと、役に立つことは別:学習用データの損失ばかり下げると過学習になります。別に取り分けた検証用データでも確認します。
  • 設定値の影響が大きい:学習率やバッチの大きさは、結果を大きく左右します。ファインチューニングでも調整対象です。

関連する考え方

勾配を効率よく求める仕組みが誤差逆伝播法で、「何を小さくするか」を決めるのが損失関数です。LoRA のような軽量な追加学習でも、動かすパラメータが少ないだけで、更新の手続きは勾配降下法です。

あわせて知りたい言葉

「モデルのしくみ」の言葉をすべて見る