チャプター 06 · 学習 · 10 min

どのように学ぶか

損失関数、勾配降下法、バックプロパゲーション。そして数十億のパラメータが必要な理由。

誤差を測る

最初、モデルはランダムだ。「空は」と入力すると、「バナナ」を「青い」と同じくらいの確率で予測してしまう。私たちが望むのは、「青い」(あるいは自然な続き)を予測させることだ。

そのために必要なことは2つだけだ:

  1. どれだけ間違っているかを測る方法。
  2. 正しい方向にパラメータを修正する仕組み。

それが学習(トレーニング)のすべてだ。

損失関数:正確さの代償

各ステップで、モデルにテキストの断片を与える。モデルは次のトークンを確率分布として予測する(第1章参照)。私たちは、実際にテキストに存在するトークンにモデルが割り当てた確率を確認する。確率が高ければ正解、低ければ不正解だ。

クロスエントロピー損失は、この誤差を対数確率で測る:

モデルが確信を持って正解するほど、損失は小さくなる。 モデルが確信を持って誤るほど、損失は爆発的に大きくなる。

これは厳しい指標だ。正解に0.01%を割り当てることは、10%を割り当てることよりはるかに高いコストを払う。モデルは誤った確信を避けることを学ぶ。

勾配降下法:坂を下りる

損失が計算されたら、どうやってパラメータを調整するのか?

損失を巨大な空間(パラメータと同じ数だけの次元:数十億)上の曲面として想像しよう。モデルはその曲面上の一点だ。私たちはそれを谷に向かって下降させたい。

このアルゴリズムは勾配降下法と呼ばれる:各ステップで、最も急な下降方向(勾配)を計算し、その方向に少しだけ移動する。

パラメータ ← パラメータ − η × 勾配

η(イータ)は学習率だ:ステップのサイズ。小さすぎると前進しない。大きすぎると谷を飛び越えて発散する。

Loss 曲線は階段状に下がる。各段は、モデルが新しいパターンを学び終えたことに対応する。4 種類の Learning Rate のレジームは古典的な落とし穴を示している:低すぎるとモデルは停滞し、高すぎると発散する。

可視化で観察できる3つのパターン:

  • 非常に低い学習率(≤ 0.001) — 曲線は下降するが、ゆっくりだ。モデルは学習しているが、待つ時間がない。
  • 最適な学習率(≈ 0.01) — 安定した下降、低い漸近線。これが目標だ。
  • 高すぎる学習率(≥ 0.05) — 損失が振動し、発散することさえある。モデルが極小値を「飛び越えて」落ち着けない。

実際には、トレーニング中に学習率を動的に調整する:最初にリニアウォームアップ(何もかも壊さないため)、その後コサイン減衰。

Adam:勾配降下、ただしより良く

パラメータ ← パラメータ − η × 勾配 という式は純粋な勾配降下を記述している。実際には、LLMの訓練でこれをそのまま使う人はいない。

リファレンスとなるオプティマイザはAdam(およびその現代的な変種AdamW)と呼ばれる。アイデア:現在の勾配の方向に盲目的に進むのではなく、各パラメータについて最近の平均的な方向モーメンタム)と更新の分散を記憶しておく。

  • 勾配が一貫して同じ方向を指すパラメータは大きなステップを取る。
  • 振動する(ノイジーな勾配)パラメータは小さなステップを取る。

このようにAdamは各パラメータに自動的に適応する。SGDがすべてに同じ学習率を適用するのに対して、Adamはそうしない。より安定し、実際にははるかに速く収束する。AdamW(最も使われるバリアント)はさらに重み減衰と呼ばれる正則化を加え、訓練中に重みが爆発するのを防ぐ。

今日、AdamWなしでLLMを訓練するのは、正当な理由なくアセンブリでコーディングするのと同じくらい稀なことだ。

バックプロパゲーション

勾配を計算する——つまり各パラメータが損失にどう影響するかを知る——には、バックプロパゲーションを使う。これは出力から入力に向けて誤差を伝播させ、層ごとに微分の連鎖律を適用するアルゴリズムだ。

直感的に考えよう:

「このダイヤルを0.001単位回したら、損失は上がったか下がったか、そしてどれくらい?」

その質問への答えを、モデルの数十億個のダイヤルすべてに対して並列に計算する——それがバックプロパゲーションの仕事だ。これによって、700億パラメータのモデルをクラスター上で約10日でトレーニングすることが可能になる。

事前学習:インターネットを読む

LLMが何か有用なことを学ぶには、大量のテキストが必要だ。本当に大量だ。現代のモデルは事前学習で:

  • 1兆から15トークンを学習する
  • フィルタリングされたテキスト(Common Crawl、Wikipedia、書籍、コード、論文)を使用する
  • 特定の部分(最高の書籍、複数エポック)を複数回通過する

このプロセス全体を通じて、タスクは常に同じだ:次のトークンを予測すること。ラベル付きの質問と回答のペアも、「これが正しい翻訳だ」という指示も、人間の報酬もない。生のテキストと、続きを予測するという目標だけだ。

これが自己教師あり学習と呼ばれる所以だ:データ自体が「ラベル」を提供する。アノテーションのために人間は必要ない——テキストがあれば十分だ。

バッチサイズ:一度に何個の例を使うか

勾配を1つの例だけで計算することは決してない。複数のシーケンスをバッチにまとめ、バッチ全体の平均勾配を計算してから、パラメータを一度だけ更新する。

バッチが大きいほど、勾配は安定し(ノイズが少ない)、より大きな学習率を使えるようになる。ただし、すべてを保持するのに十分なGPUメモリが必要だ。

現代のLLMでは、実効バッチサイズは数百万トークンに達する——通常、以下を組み合わせて得られる:

  • ローカルバッチ(GPUあたり)——VRAMによって制限される。
  • 勾配累積 ——複数の小さなバッチを計算し、最後にだけ更新を適用する。
  • データ並列性 ——バッチを数十、数百、時には数千のGPUに分散させる。

エンジニアがグローバルバッチサイズと呼ぶものは、単一の最適化ステップに寄与するデータの総量だ。GPT-4では、ステップあたり数百万トークンという話になる。

データ:仕事の半分

パラメータについてはよく語られる。データの準備についてはあまり語られない——にもかかわらず、モデルを訓練する真剣なチームの時間の半分を実際に占めているのはこれだ。

  • フィルタリング ——低品質のコンテンツ(スパム、404エラーページ、機械生成コンテンツ、文脈のない商品リスト)を取り除く。
  • 重複除去 ——重複を取り除く。Common Crawlには同じページのコピーがたくさん含まれている。それらを残すと、モデルは汎化する代わりにそれらのページを丸暗記してしまう。
  • 混合 ——ソース(Wikipedia、書籍、コード、科学論文)を、その生のサイズではなく教育的価値に応じてバランスさせる。
  • 品質フィルタリング ——最高のチームでは、分類器が各ドキュメントをスコアリングし、教科書や十分に調査された記事のように見えるものだけを残す。
  • 汚染除去 ——評価ベンチマーク(MMLU、HumanEval……)が訓練コーパスに漏れていないことを確認する。

Metaの研究者の率直なまとめ:「我々はモデルを訓練するのに10%、データを準備するのに90%の時間を費やしている。」

これがまた、最良のオープンモデル(Llama、Mistral、DeepSeek)が自分たちのデータレシピの詳細をほとんど明かさない理由でもある:それが彼らの主な競争優位性なのだ。

過学習と検証

モデルをトレーニングするほど、コーパスをそのまま暗記するようになる。ある時点で、汎化ではなく記憶を始める。これが過学習だ。

検出するには、コーパスの一部——検証セット——を脇に取り置き、そこではトレーニングしない。トレーニング中、両方の損失を測定する。両方が下降する限り、問題はない。検証損失が上昇し始め、トレーニング損失が下がり続けるとき、過学習が始まっている。止める時だ(またはデータを増やすか、正則化を行う)。

可視化では、破線の曲線が検証損失を表している。最後にわずかに上昇している——まさにそれだ。

スケールが能力だ

最後に一つ。なぜこれほど多くのパラメータとこれほど多くのデータが必要なのか?学習は非常に規則的なスケーリング則に従うからだ:

損失 = A × (計算量)−α

計算量(パラメータ × データ × イテレーション)を2倍にすると、損失は一定係数で割られる。曲線は滑らかで、6桁の大きさにわたって予測可能だ。業界全体がこの規則性の上に成り立っている。GPUへの投資を10倍にすれば、測定可能な改善が得られることが事前にわかる。

これについては第 19 章(KaplanとChinchillaのスケーリング則)で詳しく戻ってくる——GPT-3がなぜデータ不足だったのか、パラメータとトークンの最適な比率は何かを含めて。

次へ

事前学習されたモデルは、今や非常に有能なトークン予測機だ。驚くほど自然にどんなテキストも完成させることができる。しかしまだアシスタントではない。

そこへ到達する前に、もう一つ理解すべきことがある:分布が予測されたら、どうやってトークンを選ぶのか?次の章でこの点に戻る。

更新日

LLM はどう学ぶか(loss、勾配、逆伝播) · Step by Token