16. AIはどうやって賢くなる?損失関数とマスキングの秘密

スポンサーリンク

前回のレッスンで、AIが「次のトークンを予測する巨大な分類器」だって学びましたよね。でも、ここで大事な疑問が浮かびます。

「どうやってそんなに上手に予測できるようになったの?」

生まれたばかりのAIモデルは、ほぼランダムに予測します。それがどうやって賢くなるのか。今回は、その学習プロセスの核心に迫りますよ!

学習の基本:予測して、比較して、調整する

AIモデルの学習は、シンプルなフィードバックループなんです:

  1. 予測する:「次のトークンは何か?」と推測
  2. 比較する:正しい答えと比べて、どれだけ間違っていたか測定
  3. 調整する:次回もっと良い予測ができるように、内部のパラメータ(重み)を調整

このサイクルを何十億回も繰り返すことで、ランダムなモデルが有能なモデルに変わっていくんです。

では、この「予測→比較→調整」のプロセスを詳しく見ていきましょう!

トレーニングの目標:次のトークンを予測

モデルの目標は明確です。「これまでに見たすべてを考慮して、次のトークンを予測する」こと。

たったこれだけの目標から、驚くべきことが学習されます:

  • 文法
  • スタイル
  • 推論
  • 世界についての事実

すべて「次に通常何が来るか」を予測するだけで!

例えば、こんな文章でトレーニングするとします:

「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.」という文があったら:

  1. 「The」を見て → 「cat」を予測 → 損失を計算
  2. 「The cat」を見て → 「sat」を予測 → 損失を計算
  3. 「The cat sat」を見て → 「on」を予測 → 損失を計算
  4. 「The cat sat on」を見て → 「the」を予測 → 損失を計算
  5. 「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. 予測時に各トークンが見れるものを制御(因果マスキング)
  2. 実際に損失にカウントされるトークンを制御(選択的スコアリング)

1. 因果マスキング(ベースモデル)

因果マスキングは、予測中にモデルが「未来のトークン」を見れないようにします。これがモデルを自己回帰的(左から右へ予測)に保つんです。

例えば「The cat sat on」という文があったら:

  • 「The cat sat」を使って「on」を予測できる(OK)
  • 「on the」を使って「sat」を予測できない(NG)

視覚的には、三角形のマスクを想像してください。各トークンは自分自身と以前のトークンにのみ注意を払えます。

これにより、推論時(実際に使う時)と同じ動作が保たれます。

2. アシスタントのみマスキング(チャットモデル)

チャットボットをトレーニングする時は、因果マスキングに加えてアシスタントのみマスキングを使います。

何をするかというと、ユーザーの入力部分じゃなく、AIの回答部分にだけ損失を計算するんです。

例:

ユーザー: フランスの首都は何ですか?
アシスタント: フランスの首都はパリです。

損失は「フランスの首都はパリです。」の部分だけで計算されます。

モデルはユーザーの入力を予測することを学ばない。適切な返信を生成することだけを学ぶんです。

つまり

アシスタントのみマスキング = 因果マスキング + 選択的損失スコアリング

この区別が、「テキストを続けるだけのベースモデル」と「命令に従うチャットモデル」を分けるんですね。

選択的スコアリングの力

この「シーケンスのどの部分に損失を適用するか選択する」アイデアは、超強力です。

損失を適用する部分を選ぶことで、トレーニングするモデルの種類を形作れるからです。

例えば:

  • チャットモデル:ユーザー入力をマスクして、AI回答にだけ損失を集中
  • 推論モデル:答えを出す前の「段階的な思考過程」に損失を適用
  • バランス型:推論と最終回答の両方を異なる重みでスコアリング

マスキングは単にトークンを除外するだけじゃなく、モデルが最適化する動作の種類を細かく制御できるツールなんです。

学習ループ:すべてがどう組み合わさるか

まとめましょう。

言語モデルのトレーニングは、こんな繰り返しループです:

  1. テキストのバッチを取る
  2. すべての位置で次のトークンを予測
  3. 損失を計算(クロスエントロピーを使用)
  4. マスキングを適用(有効なトークンのみカウント)
  5. モデルの重みを更新(損失を減らす方向に)

これを何十億回も繰り返す。

それだけです!

このサイクル — 予測 → 損失 → マスキング → 更新 — が、すべてのベースモデル、すべてのファインチューニング、すべてのAI学習の背後にあるエンジンなんです。

事前トレーニングとファインチューニングの違い

同じ学習プロセスが、事前トレーニングとファインチューニングの両方を支えています。変わるのは:

事前トレーニング
– データ:大規模で多様なテキストコーパス(ネット上のあらゆるテキスト)
– 目標:一般的な言語パターンを学習

ファインチューニング
– データ:対象を絞ったデータセット(命令-回答ペア、専門文書など)
– 目標:特定のスキル、ドメイン、動作に適応

単一のトレーニングメカニズムが、汎用アシスタントから高度に専門化されたドメインモデルまで、すべてを生み出すわけです。

まとめ:学習の3つの柱

言語モデルがどう学習するか、わかりましたか?

  1. 次トークン予測:目標を与える
  2. クロスエントロピー損失:どれだけ間違っていたか伝える
  3. マスキング:どの部分が学習に重要か決める

これら3つを組み合わせることで、生データが理解に変わるんです。

次のレッスンでは、この学習ループが教師ありファインチューニング(SFT)をどう支えるか見ていきます。厳選されたラベル付き例が、事前トレーニング済みモデルを特定のスキルやドメインに導く方法です。

お楽しみに!

コメント

タイトルとURLをコピーしました