前回のレッスンで、AIが「次のトークンを予測する巨大な分類器」だって学びましたよね。でも、ここで大事な疑問が浮かびます。
「どうやってそんなに上手に予測できるようになったの?」
生まれたばかりのAIモデルは、ほぼランダムに予測します。それがどうやって賢くなるのか。今回は、その学習プロセスの核心に迫りますよ!
学習の基本:予測して、比較して、調整する
AIモデルの学習は、シンプルなフィードバックループなんです:
- 予測する:「次のトークンは何か?」と推測
- 比較する:正しい答えと比べて、どれだけ間違っていたか測定
- 調整する:次回もっと良い予測ができるように、内部のパラメータ(重み)を調整
このサイクルを何十億回も繰り返すことで、ランダムなモデルが有能なモデルに変わっていくんです。
では、この「予測→比較→調整」のプロセスを詳しく見ていきましょう!
トレーニングの目標:次のトークンを予測
モデルの目標は明確です。「これまでに見たすべてを考慮して、次のトークンを予測する」こと。
たったこれだけの目標から、驚くべきことが学習されます:
- 文法
- スタイル
- 推論
- 世界についての事実
すべて「次に通常何が来るか」を予測するだけで!
例えば、こんな文章でトレーニングするとします:
「The cat sat on the …(猫は…の上に座った)」
トレーニング中、モデルは文章をそのまま見るんじゃなくて、トークン化されたバージョン(単語を数字に変換したもの)を見ます。そして、各トークンを順番に予測しようとするんです。
各ステップで、モデルは語彙全体(約5万個のトークン)にわたって確率分布を生成します:
- 「mat」:78%
- 「floor」:8%
- 「chair」:3%
- …
「mat」が0.78の確率を得たら、それは良い予測です。逆に、「mat」に0.01しか与えず、「chair」に0.70を与えたら、それは間違いです。
次の質問は:「それがどれほど大きな間違いだったか」をどうやって知るの?
間違いの測定:クロスエントロピー損失
学習は間違いから始まります。でも、間違いを測定する方法が必要ですよね。
それが損失関数(そんしつかんすう)の役割です。モデルの予測確率と正しい答えを比べて、どれだけズレているかを計算します。
言語モデルでは、ほぼ常にクロスエントロピー損失(Cross-Entropy Loss)という関数が使われます。
数式は難しく見えますが、やってることは単純。正しいトークンの確率に対して「負の対数」を取るだけです:
損失 = - log(正しいトークンの予測確率)
具体例で見てみましょう:
「The cat sat on the …」の後、モデルが各トークンにこんな確率を予測したとします:
- 「mat」:0.78(正解!)
- 「floor」:0.08
- 「chair」:0.03
正しい答えは「mat」なので、その確率0.78を使って損失を計算:
損失 = -log(0.78) ≈ 0.25
損失が低いほど、予測が良いってことです。
もしモデルが「mat」に0.99を予測していれば:
損失 = -log(0.99) ≈ 0.01(すごく良い!)
逆に0.01しか予測していなければ:
損失 = -log(0.01) ≈ 4.61(すごく悪い...)
この損失値がトレーニング信号になります。モデルはこれを使って、どの内部接続(重み)を強化するか弱めるかを決めるんです。
1つのトークンからシーケンス全体へ
実際のトレーニング例は1つのトークンより長いですよね。文章全体とか。
その場合、モデルはシーケンス内のすべての位置でこの予測プロセスを繰り返します。
例えば「The cat sat on the mat.」という文があったら:
- 「The」を見て → 「cat」を予測 → 損失を計算
- 「The cat」を見て → 「sat」を予測 → 損失を計算
- 「The cat sat」を見て → 「on」を予測 → 損失を計算
- 「The cat sat on」を見て → 「the」を予測 → 損失を計算
- 「The cat sat on the」を見て → 「mat」を予測 → 損失を計算
各ステップの損失を平均して、シーケンス全体の損失を出します。
ここで重要なポイント:
トレーニング中、モデルは自分の予測トークンをシーケンスに追加しません。常に「正しいトークン」を次のステップの入力に使います。これを教師強制(きょうしきょうせい)と言います。
これにより、モデルは自分の間違いを複合化せず、正しいコンテキストから学習できるんです。
「正しい」答えがペナルティを受ける不思議
ここで面白いことが起きます。
こんなトレーニングデータがあるとします:
質問: フランスの首都は何ですか?
回答: フランスの首都はパリです。
「フランスの首都は何ですか?」を見て、次のトークンを予測する時、モデルがこう割り当てたとします:
- 「Paris」:50%
- 「The」:30%(トレーニング例の実際の次のトークン)
損失は「The」で計算されます:
損失 = -log(0.30) ≈ 1.20
待って!モデルは「Paris」により高い信頼度を与えたのに、ペナルティを受けてる?「Paris」って意味的に正しいじゃん!
なぜペナルティを受けるの?
モデルは「意味的に正しいか」で判断されるんじゃなく、「トレーニングデータの正確なシーケンスと一致するか」で判断されるからです。
この場合、トレーニング例はたまたま「The capital of…」で始まり、「Paris…」じゃなかった。両方とも有効な回答だけど、トレーニングデータに合うのは1つだけ。
「これって欠陥じゃない?」って思うかもしれませんね。でも、実は問題ないんです。
なぜ問題ないか?
モデルは数十億の例を見ます。いくつかの回答は1つのフォーマット、他は別のフォーマット。その膨大な分布全体で、モデルはより深いパターンを学習します。「パリはフランスの首都に関連付けられている」みたいな本質的な知識を。
損失はローカル、学習はグローバルなんです。個々のトークン予測は恣意的に見えるかもしれないけど、数十億のトレーニングステップで平均化されると、一貫した言語理解に収束していきます。
マスキング:どのトークンが重要かを決める
ここまで、すべてのトークンを同じように重要扱いしてきました。でも実は、すべてのトークンが損失に寄与すべきじゃないんです。
そこでマスキングの出番!
マスキングには2つの目的があります:
- 予測時に各トークンが見れるものを制御(因果マスキング)
- 実際に損失にカウントされるトークンを制御(選択的スコアリング)
1. 因果マスキング(ベースモデル)
因果マスキングは、予測中にモデルが「未来のトークン」を見れないようにします。これがモデルを自己回帰的(左から右へ予測)に保つんです。
例えば「The cat sat on」という文があったら:
- 「The cat sat」を使って「on」を予測できる(OK)
- 「on the」を使って「sat」を予測できない(NG)
視覚的には、三角形のマスクを想像してください。各トークンは自分自身と以前のトークンにのみ注意を払えます。
これにより、推論時(実際に使う時)と同じ動作が保たれます。
2. アシスタントのみマスキング(チャットモデル)
チャットボットをトレーニングする時は、因果マスキングに加えてアシスタントのみマスキングを使います。
何をするかというと、ユーザーの入力部分じゃなく、AIの回答部分にだけ損失を計算するんです。
例:
ユーザー: フランスの首都は何ですか?
アシスタント: フランスの首都はパリです。
損失は「フランスの首都はパリです。」の部分だけで計算されます。
モデルはユーザーの入力を予測することを学ばない。適切な返信を生成することだけを学ぶんです。
つまり:
アシスタントのみマスキング = 因果マスキング + 選択的損失スコアリング
この区別が、「テキストを続けるだけのベースモデル」と「命令に従うチャットモデル」を分けるんですね。
選択的スコアリングの力
この「シーケンスのどの部分に損失を適用するか選択する」アイデアは、超強力です。
損失を適用する部分を選ぶことで、トレーニングするモデルの種類を形作れるからです。
例えば:
- チャットモデル:ユーザー入力をマスクして、AI回答にだけ損失を集中
- 推論モデル:答えを出す前の「段階的な思考過程」に損失を適用
- バランス型:推論と最終回答の両方を異なる重みでスコアリング
マスキングは単にトークンを除外するだけじゃなく、モデルが最適化する動作の種類を細かく制御できるツールなんです。
学習ループ:すべてがどう組み合わさるか
まとめましょう。
言語モデルのトレーニングは、こんな繰り返しループです:
- テキストのバッチを取る
- すべての位置で次のトークンを予測
- 損失を計算(クロスエントロピーを使用)
- マスキングを適用(有効なトークンのみカウント)
- モデルの重みを更新(損失を減らす方向に)
これを何十億回も繰り返す。
それだけです!
このサイクル — 予測 → 損失 → マスキング → 更新 — が、すべてのベースモデル、すべてのファインチューニング、すべてのAI学習の背後にあるエンジンなんです。
事前トレーニングとファインチューニングの違い
同じ学習プロセスが、事前トレーニングとファインチューニングの両方を支えています。変わるのは:
事前トレーニング:
– データ:大規模で多様なテキストコーパス(ネット上のあらゆるテキスト)
– 目標:一般的な言語パターンを学習
ファインチューニング:
– データ:対象を絞ったデータセット(命令-回答ペア、専門文書など)
– 目標:特定のスキル、ドメイン、動作に適応
単一のトレーニングメカニズムが、汎用アシスタントから高度に専門化されたドメインモデルまで、すべてを生み出すわけです。
まとめ:学習の3つの柱
言語モデルがどう学習するか、わかりましたか?
- 次トークン予測:目標を与える
- クロスエントロピー損失:どれだけ間違っていたか伝える
- マスキング:どの部分が学習に重要か決める
これら3つを組み合わせることで、生データが理解に変わるんです。
次のレッスンでは、この学習ループが教師ありファインチューニング(SFT)をどう支えるか見ていきます。厳選されたラベル付き例が、事前トレーニング済みモデルを特定のスキルやドメインに導く方法です。
お楽しみに!

コメント