モデルのしくみ 中級
勾配降下法
Gradient Descent
損失関数の値が小さくなる方向へ、パラメータを少しずつ動かして最適な値を探す方法です。ニューラルネットワークの学習で最も基本的に使われる手法で、山を下るような動きにたとえられます。
例ファインチューニングでは学習率を大きくしすぎると元の能力が壊れやすいので、小さめの値から勾配降下法を始める。
詳しく
勾配降下法は、「間違いの大きさ」を表す損失関数をできるだけ小さくするために、パラメータを少しずつ調整していく方法です。勾配とは、パラメータを動かしたときに損失がどちらへ・どの程度増減するかを示す傾きです。その傾きを手がかりに、損失が下がる向き(下り坂)へ進むので「降下」と呼ばれます。
しくみ
基本の更新式は単純です。
新しい値 = 今の値 − 学習率 × 勾配
勾配は逆伝播法で求め、学習率は「1歩の大きさ」を決める設定値です。これを何万回、何百万回も繰り返して、損失を少しずつ下げていきます。
具体例
霧のかかった山で、頂上ではなく谷底を目指す登山者を想像してください。視界は足元の数メートルしかありません。それでも、足元の傾きを確かめて「下っているほうへ一歩」を繰り返せば、谷に着けます。勾配降下法はこの方法そのものです。
学習率は歩幅にあたります。
- 歩幅が大きすぎる:谷を飛び越えてしまい、損失が振動したり、発散したりする。
- 歩幅が小さすぎる:進みが遅く、学習に時間がかかる。
- 実際には、最初は大きめにして徐々に小さくする方法(学習率スケジュール)がよく使われます。
実際に使われる変種
全データの勾配を毎回計算するのは重すぎるため、実用では少量ずつ使います。
- 確率的勾配降下法(SGD)/ミニバッチ:データを小さな塊(バッチ)に分けて、塊ごとに更新する。勾配に多少の揺れが生じますが、計算が軽く、かえって局所的な落とし穴から抜けやすいと言われます。
- Adam などの最適化手法:過去の勾配の動きも使って、パラメータごとに歩幅を調整する。大規模言語モデルの学習では、Adam の改良版がよく使われています。
使うときの注意・よくある誤解
- 必ず最良の答えに着くわけではない:谷が複数ある地形では、浅い谷(局所最適)で止まることがあります。ただし、巨大なネットワークでは、実用上十分に良い解が見つかることが経験的に知られています。
- 損失が下がることと、役に立つことは別:学習用データの損失ばかり下げると過学習になります。別に取り分けた検証用データでも確認します。
- 設定値の影響が大きい:学習率やバッチの大きさは、結果を大きく左右します。ファインチューニングでも調整対象です。
関連する考え方
勾配を効率よく求める仕組みが誤差逆伝播法で、「何を小さくするか」を決めるのが損失関数です。LoRA のような軽量な追加学習でも、動かすパラメータが少ないだけで、更新の手続きは勾配降下法です。
あわせて知りたい言葉
- 誤差逆伝播法ニューラルネットワークの出力の誤差を、出力側から入力側へさかのぼって伝え、各パラメータをどちらにどれだけ直せばよいかを効率よく求める方法です。現在の深層学習の学習の基本です。
- 損失関数モデルの予測が正解からどれだけずれているかを、1つの数値で表す仕組みです。学習とは、この値をできるだけ小さくするようにパラメータを調整していく作業のことを指します。
- 過学習学習に使ったデータには非常によく合う一方で、初めて見るデータには通用しなくなる状態です。問題を丸暗記してしまい、本質的なパターンを学べていないときに起こります。
- ニューラルネットワーク人間の脳の神経細胞のつながりをヒントにした、数値の計算を何層にも重ねて入力から出力を導くしくみです。現在の生成 AI を含む、ほとんどの AI モデルの土台になっています。
- ファインチューニング学習済みのモデルに、特定の用途向けのデータを追加で学習させて調整することです。出力の形式や口調、特定分野の判断のしかたをモデルに覚えさせるのに使い、プロンプトだけでは安定しない場面で検討します。