コンテンツにスキップ

LLM の仕組み (ざっくり)

ここまで 13 章を使う側の視点で書いてきた。この章では一歩中に入って「LLM は内部で何をしているのか」を概説する。厳密な数学や論文の詳細には踏み込まず、今までの章の背景として納得感が上がる程度にとどめる。

結論を先に: LLM は「次のトークンを確率的に予測する関数」

どれだけ高機能に見えても、LLM がしている計算は大雑把に言ってこれだけ:

これまでの文脈 (トークン列)
   [ Transformer (巨大な関数) ]
次のトークンの確率分布 (例: "3776" = 0.42, "富士" = 0.31, "約" = 0.12, ...)
   [ サンプリング (temperature 等、第 12 章) ]
   次のトークンを 1 つ選ぶ
   末尾に追加して、また 1 番目に戻る

これを何十〜何千回と繰り返すことで 1 つの応答が生まれる。推論 / 会話 / ツール呼出 / 知識の呼び出し、全部この「次トークン予測の連鎖」から発現している

Transformer の超大雑把な構造

Transformer は「次トークン予測関数」の中身。2017 年の論文 "Attention Is All You Need" で発表され、今の LLM の全てが基本的にこの系統。

構成要素 (詳細は飛ばして存在だけ):

  1. Tokenizer — テキスト → トークン ID 列 (第 3 章)
  2. Embedding layer — トークン ID → 高次元ベクトル
  3. Transformer layers (N 段、数十〜数百層) — 各層で self-attention + feed-forward
  4. Output layer — 最終ベクトル → 語彙数分の確率分布

Self-attention の直感

Transformer の核心は self-attention という仕組み。大雑把な直感:

文の中の各トークンが、他のどのトークンにどれくらい注目すべきかを動的に計算する

例: "富士山の高さは 3776 メートル" という文で「3776」というトークンを生成するとき、直前の「高さは」と「富士山」に強く注目することで「これは富士山の高さを答える文脈だ」と判断する。

この「何に注目するか」の重み (attention weights) が、文脈を踏まえた予測を可能にしている。単純な n-gram 統計 (前の n 個から次を予測) では捉えられない長距離依存が扱える。

なぜ「理解している」ように見えるか

  • 大量のデータを学習 → パラメータ数が数十 B〜数 T
  • Self-attention で長距離の文脈関係を捉える
  • 層を積み重ねることで階層的な表現 (単語 → 句 → 文 → 段落 → 論理構造) が創発する

結果として「論理推論」「抽象化」「複数ステップの問題解決」に見えるふるまいが出てくる。でも中身は終始「次のトークンの確率」を出しているだけ

学習の 3 段階

LLM は典型的に 3 段階で学習される。

(1) Pretraining (事前学習)

インターネット + 書籍 + コード等の数兆トークンを読んで「次のトークン当て」を訓練

  • 目的: 言語の統計的パターン / 世界の一般知識をパラメータに焼き込む
  • データ: Common Crawl / Wikipedia / GitHub / 書籍等。品質フィルタ + 重複除去が重要
  • 計算資源: 数千〜数万枚の GPU で数週間〜数ヶ月
  • 成果物: base model (指示追従はまだ不得意、ただ「次に来そうな言葉を続ける」だけ)

ここまでが「学習データに含まれる事実 ≒ LLM の知識」の正体 (第 1 章 の Q6 "富士山の高さ" はここで覚えた)。

(2) Instruction tuning (指示追従訓練)

「指示 → 適切な応答」の例を大量に与えて、指示に従うふるまいを学習

  • データ: {"instruction": "...", "response": "..."} のペア数万〜数百万件
  • 効果: base model が「質問に答える」「指示に従う」スタイルを獲得
  • 教師: 人手で書く場合もあれば、別の強い LLM に生成させる場合も (synthetic data)

ここで base model がチャット形式に順応する。tool calling の能力もここで仕込まれる (tool スキーマと tool_calls の形式を学習データに含める)。

(3) RLHF / RLAIF (人間フィードバック強化学習)

「複数の応答候補のうちどれが良いか」を人間 (または別 AI) が評価し、その評価を報酬として微調整

  • 人間に A と B の応答を見せて「どっちがよい?」と聞く (preference data)
  • 報酬モデルを訓練
  • PPO 等の強化学習アルゴリズムで LLM を「報酬を最大化する」方向に調整

効果:

  • 有害な応答を避ける
  • 丁寧な口調になる
  • 指示に素直に従う
  • 自信のない回答に「分からない」と言えるようになる

副作用:

  • sycophancy (お追従): ユーザに同意しすぎる傾向
  • mode collapse: 応答の多様性が減る
  • refusal over-triggering: 無害な質問も拒否する

現代の主要モデル (GPT-5.4 / Claude / Gemini) は全てこの 3 段階を経ている。

なぜ hallucination するのか

「hallucination (幻覚)」 = LLM が事実でないことを自信満々に言う現象。原因は複数:

(1) 次トークン予測の本質

LLM は「正しいこと」を目指しているのではなく、「次に来そうなトークン」を予測している。確率的に尤もらしい文字列を生成しているだけなので、正しい情報が無くても「それっぽい文字列」を作れてしまう

(2) 学習データの欠損

学習データに無い情報を聞かれても、LLM は「知りません」と返す代わりに周辺知識から補完してしまうことがある (instruction tuning で「それっぽく答える」訓練を受けているため)。

(3) 長文生成での蓄積

一度間違ったトークンを出力すると、その後はその間違いを前提に続きを生成する → 雪だるま式に間違いが拡大する。

(4) 訓練と推論のズレ

訓練時は正しい次トークンを教師データから受け取るが、推論時は自分の出力を次のステップの入力にする (exposure bias)。このズレが誤差を蓄積させる。

(5) context の無視

context に情報があっても、LLM の attention が他に向いてしまえば使われない。情報がコンテキストに有ること ≠ LLM が使うこと

対策 (アプリ側)

  • RAG (第 10 章) で正しい情報を context に注入
  • Citation 強制: 出典を明記させる → 嘘は検証可能になる
  • 「分からない」を許可: system prompt で「不確かなら推測せず分からないと答えよ」と指示
  • 評価 (第 11 章) で hallucination 率を定期測定

LLM 側の技術的対策としては constrained decoding (正解の集合以外出さない) / retrieval augmentation / factuality 報酬モデル 等があるが、アプリ層では hallucination を前提に設計するのが現実的。

なぜ推論モデルは強いか (GPT-5.4 reasoning / Claude thinking 等)

最近の「推論モデル」(OpenAI GPT-5.4 reasoning、Claude extended thinking、Gemini thinking) は、数学や論理パズルで著しく性能が高い。仕組みは大雑把に:

  1. 推論 (思考) トークンを出力する訓練: 応答の前に「考えをたくさん書く」ように強化学習
  2. test-time compute の増加: 1 回の応答で大量の思考トークンを消費 (数千〜数万)
  3. 思考過程の探索: 「この方向で考えて、駄目なら別の方向」のような backtracking も学習

結果として、同じモデルアーキテクチャでも「考える時間 (計算量) を増やせば精度が上がる」というスケーリングが働く。

代償:

  • レイテンシ: 数秒〜数分
  • コスト: 思考トークンも課金対象
  • 不透明: 思考過程は見せない / 見せるかはモデル次第

全てのタスクに推論モデルを使う必要はなく、難しい問題だけ投げるのが実用的。

なぜ量子化 / 蒸留が効くのか

ローカルで動かす小さいモデル (Llama / Qwen / Gemma 等) は、大抵:

  • 量子化 (quantization): 重みを FP16 → INT8 / INT4 に圧縮 (メモリ 1/4)
  • 蒸留 (distillation): 大きいモデルの出力を教師データにして小さいモデルを訓練

これで「そこそこの性能を手元で動かせる」サイズにしている。トレードオフ:

  • 量子化: 精度わずかに低下、メモリと速度は大幅改善
  • 蒸留: 特定タスクに特化、汎用性は劣る

本リポジトリの Ollama + Qwen3.5 等はこの恩恵で動いている。GPU なしでも M 系 Mac で十分実用速度が出る。

エージェント視点での関係

章 01-14 で書いた内容と、この章の「中身」の対応:

中身との対応
02 ステートレス 1 回の呼び出し = 1 回の「次トークン予測の連鎖」。サーバには何も残らない
03 トークン モデルの入力単位。Tokenizer で ID 化される
05 Tool calling instruction tuning で学習した「tools 形式の応答」ふるまい
06 エージェントループ 1 つの LLM 呼び出しは 1 回の autoregressive 生成。エージェントループは外側で複数の呼び出しを繋げているだけ
07 記憶 L1 pretraining で焼き込まれた事実
12 サンプリング 次トークンの確率分布からどう選ぶかの制御
14 プロンプトインジェクション LLM が指示とデータを区別できないのは、全部を同じ「文脈トークン列」として読むから

まとめ

  • LLM は「次のトークンを確率的に予測する関数」の連鎖。どれだけ複雑に見えてもこの骨格
  • Transformer の core は self-attention — 各トークンが他のどこに注目すべきかを学習する
  • 学習は 3 段階: (1) Pretraining / (2) Instruction tuning / (3) RLHF
  • 知識はパラメータに焼き込まれている (L1 記憶)、学習カットオフ以降は知らない
  • Hallucination は次トークン予測の本質的な副作用。アプリ層で対策する (RAG / citation / 評価)
  • 推論モデルは「考えるトークンを大量に使う」訓練で精度を上げる。高レイテンシ / 高コストとトレードオフ
  • 量子化 / 蒸留でローカル実行可能な小さいモデルが作られる (Ollama 等)
  • 章 01-14 の内容は全てこの「次トークン予測の連鎖」という骨格から発現している