最適化の役割:モデルの重みを「良い方向に少しずつ動かす」
LLM学習は、正解トークンの確率を上げる方向にモデルの重みを更新し続けるプロセスだ。更新の基本は、誤差が減る方向へ重みを少し動かすことにある。ただしLLMはパラメータが膨大で、勾配のスケールやノイズが層や時期によって大きく変わる。そこで単純な更新よりも、勾配の平均的な大きさや過去の傾向を見ながら調整する更新法が使われる。
実務でよく使われるのは、勾配の履歴を使って更新幅を自動調整するタイプの最適化である。直観としては、よく揺れる方向には慎重に、小さくしか動かない方向には積極的に、という調整を行う。これにより学習が安定しやすくなる。
学習率がすべてを左右する:大きすぎると壊れ、小さすぎると進まない
学習率は、1回の更新でどれだけ重みを動かすかを決める。大きすぎれば発散して損失がNaNになり、小さすぎればいつまでも良くならない。LLMの学習では、学習の序盤に特に不安定になりやすい。そこで多くの学習では、最初は小さく始めて徐々に上げる「ウォームアップ」が使われる。直観的には、いきなり全力で走るのではなく、体を温めてから速度を上げるイメージだ。
その後は、徐々に学習率を下げていくスケジュールがよく使われる。学習の後半では、既にそれなりに良い解に近づいているため、細かく調整して収束させたい。学習率を下げるのは、そのための制御である。こうしたスケジュール設計は、単に早く学習するためだけでなく、到達点の品質にも影響する。
混合精度と数値安定化:速くするほど壊れやすい
LLM学習は計算量が巨大なので、速度とメモリを稼ぐために混合精度が使われることが多い。これは、一部の計算を低精度で行い、必要な部分だけ高精度を保つ工夫である。低精度は速いが、表現できる数の範囲が狭く、丸め誤差やオーバーフローが起きやすい。そこで学習では、数値が壊れないようにいくつかの安全策を入れる。
代表的なのが、勾配が大きくなりすぎたときに上限を設けるクリッピングだ。直観的には、急激な更新がモデルを壊す前にブレーキをかける。また、低精度で小さな値がゼロに潰れる問題を避けるために、計算のスケールを一時的に持ち上げる手法も使われる。これらはすべて、学習を「最後まで走らせ切る」ための工学である。
バッチ設計と勾配蓄積:一度にどれだけ見せるかは通信と収束の両方に効く
学習は、一定量のデータをまとめて処理し、その平均的な誤差に基づいて更新する。この「まとめて処理する量」がバッチサイズだ。バッチが大きいと更新が安定しやすいが、メモリを食い、計算資源が必要になる。バッチが小さいとノイズが大きくなり、学習が不安定になる場合がある。
実務では、GPUメモリの制約で一度に大きなバッチを載せられないことが多い。その場合に使われるのが勾配蓄積で、複数回の小さなバッチ処理の結果を足し合わせてから一回更新する。これにより「見かけのバッチサイズ」を大きくできる。ただし、蓄積回数が増えると更新頻度が下がるため、学習率やスケジュールの調整が必要になる。
分散学習の基本:大きすぎるモデルとデータをどう分けるか
LLM学習では、単一GPUではモデルもデータも載り切らない。そこで複数GPU、複数ノードで分散して学習する。分散のやり方には大きく三つの発想がある。
一つはデータ並列で、同じモデルを各GPUに持たせ、違うデータをそれぞれ処理し、最後に勾配を集めて平均する。これは概念が分かりやすいが、モデルが大きくなると各GPUに載らない問題が出る。
二つ目はモデルの内部計算を分割する並列化で、巨大な行列演算などを複数GPUに分けて計算する。これによりモデルを物理的に分割して保持できるが、GPU間の通信が増えやすく、設計が難しくなる。
三つ目は層を分割してパイプライン化する方法で、前半の層をGPU群A、後半の層をGPU群Bが担当し、ミニバッチを流れ作業で処理する。これによりメモリを分散できるが、パイプラインの詰まりや待ち時間の調整が重要になる。
現実の大規模学習では、これらを組み合わせる。どれをどう組み合わせるかが、性能とコストを支配する。
デバッグと再現性:LLM学習は「壊れたら終わり」なので観測が重要
LLM学習は時間もコストも大きい。途中で数値が壊れて停止すると損失が甚大になる。だから学習では、損失の推移だけでなく、勾配の大きさ、更新のスケール、NaNの兆候、各層の統計などを観測し、異常を早期に検知する。チェックポイントをこまめに保存して復旧できるようにするのも基本である。
さらに研究や実務の改善では再現性が重要になる。乱数シード、データのシャッフル、分散設定、混合精度の挙動など、微妙な差が結果を変えることがある。完全な再現は難しくても、「何が変わったか」を追える形でログと設定を残すことが、学習工学の核心になる。
まとめ:LLM学習は最適化と分散システムの結節点である
LLM学習は、次トークン予測という単純な目的を、巨大な計算で実現するプロセスだが、成功の鍵は学習率、安定化、精度、バッチ、分散の設計にある。最適化は重みを正しい方向へ導き、学習率スケジュールはその道筋を制御する。混合精度とクリッピングは壊れやすさを抑え、バッチと蓄積は計算資源の制約を吸収する。分散学習は、そもそも学習を可能にする土台だ。モデルを理解するだけでは足りず、学習を「回し切る」ための工学を理解して初めて、LLMを作る側の視点が手に入る。