LLMとは何か——その正体
LLMは関数である。テキストを入力すると、次トークンの確率分布が出力される。生成とはこの関数をループで回すこと——トークンをサンプルし、追加し、全体を再入力し、繰り返す——ストップトークンか長さ上限に達するまで。チャットアプリからコーディングエージェントまで、LLMの上に作られたプロダクトはすべて、このループを包むオーケストレーションにすぎない。
モデルファイルの中身は2つだけ。数十億個の浮動小数点重み(パラメータ)と、それらを組み合わせる固定の計算グラフ(transformerの内部を参照)。そこにデータベースもルールエンジンもスクラッチメモリもない。推論時の重みは凍結されており、会話中にモデルが「記憶」するすべては、プロンプトウィンドウに置かれたテキストにすぎない。
コアループ
生成エンジン全体の擬似コード。どのベンダーの製品もこれ以上深くない。
tokens = tokenize(prompt)
while not done and len(tokens) < max_context:
probs = model(tokens) # 1回のフォワードパス
next = sample(probs, temperature)
tokens.append(next)
stream_to_user(next)
if next == stop_token:
done = True
このループで日常動作を左右する2つのノブは、どちらも重みの外にある。temperature(サンプリングの大胆さ)と最大コンテキスト(会話の収容量)。どちらもエンジンが適用するランタイム設定(エンジンパラメータを参照)。
重みの実体
「7B」モデルは70億個の浮動小数点パラメータである。保存サイズを変えるのは精度だけで、賢さではない。
| 精度 | パラメータあたりバイト数 | 7Bモデルのサイズ |
|---|---|---|
| FP16(ネイティブ) | 2 | 約14 GB |
| 8ビット量子化 | 約1 | 約7 GB |
| 4ビット量子化 | 約0.55 | 約4 GB |
同じ重みを粗い格納にするだけ——少々の品質を大量のメモリと交換している(量子化を参照)。パラメータ数自体は学習時に固定で、使っても変わらない。
スケールの梯子
パラメータ数は、いつ何が登場したかを示す粗削りだが正直な物差しである。
| クラス | パラメータ | 時代 | できたこと |
|---|---|---|---|
| GPT-2 | 125M–1.5B | 2019 | 整合的な段落、脆い事実 |
| GPT-3 | 175B | 2020 | few-shotプロンプティングが機能し始める |
| 小さい秀才(Phi-3、Qwen 3B) | 3–4B | 2024 | 実用に耐える軽量アシスタント |
| オープン7B(Mistral、Llama 2) | 7B | 2023 | コンシューマGPU1枚で堅牢なチャットとコード |
| オープン70B級 | 70B | 2023+ | フロンティア級に迫る推論。2×24 GBが必要 |
| オープンフロンティア密(Llama 3.1) | 405B | 2024 | フロンティア級のオープンウェイト、マルチGPU |
| MoEフロンティア | 総100B–600B+、アクティブ10–40B | 2024+ | 現実的なサービングコストで最高級の出力 |
各段は前段の約10倍で、下位では絶対に出なかった挙動を解き放つ——「同じだが少し良い」ではない。スケールがスキルを追加し、パッケージングがそれを使えるようにした。
セッション間の記憶はない
モデルはステートレスである。状態は会話の中——あなたとモデルが生成したトークンの実行中ウィンドウ——に存在する。タブを閉じれば消え、新しいチャットを始めればあなたの存在を知らない。すべての「記憶」機能は、古いテキストを新しいプロンプトに再注入するラッパーにすぎない。
実用的な帰結:ウィンドウに残っているものが、モデルの現在の知識のすべて。長い会話は、ウィンドウが一杯になると冒頭を静かに切り捨てる——モデルは欠けたテキストに「気づかない」(トークンを参照)。
流暢は正しさではない
学習目標はもっともらしい継続であって、真実ではない。要点は以下。
- モデルは自信に満ちた整った嘘を出力する。ハルシネーションは次トークン予測の性質であり、誰かが直し忘れたバグではない。
- 流暢さは真実の貧弱なシグナル。誤った回答は正しい回答とまったく同じ読み心地になる。
- キャリブレーションは当てにならない。「どのくらい確信している?」と聞くと、でっち上げの数値が返ってくる。
- よくある事実は信頼できる——学習データに何百万回も登場したから。ロングテールの事実は、自信満々のフィクションへ滑らかに劣化する。
- モデルは迎合的に傾く。正しい回答に反論すると折れることがある。正しさと自信は別の軸。
- 検証可能な出力の強制(フィールドを埋めるJSON、多肢選択)は、モデルへの内省要求に勝る。
知識は学習時に凍結される
モデルの知識はすべて、学習時に焼き込まれた。カットオフ日は存在し、どれだけ会話しても重みは更新されない。新しい事実には、テキストをコンテキストに入れる(検索)か再学習が必要(学習を参照)。出典を示すこともできない——コーパスへの索引は持たず、重みに残るコーパスの反響だけがすべて。
能力は一様に届かない
スケールはスキルを滑らかに追加しない。
- 約3B未満:自動補完・抽出・分類は良好。多段推論は大抵失敗。
- 7–9B:信頼できる指示追従、まともなコード。算数と長いチェーンは不安定のまま。
- 30B以上:計画、ニュアンス、高度なコード——遅く、やや突然にやってくる。
- MoEは梯子を複雑にする。総パラメータではなくアクティブパラメータで判断すること。
つまり「大きいほど良い」は平均では正しく、詳細では誤解を招く。早く頭打ちになるタスクもあれば、遅くスイッチが入るタスクもある。雰囲気ではなく自分のタスクでベンチマークを(モデル選択を参照)。
プロダクトはループのラップ
LLMプロダクトを使うとき、概ねこう動く。
- テキストがトークン化される。
- システムプロンプト、ツール定義、検索文書、チャット履歴が1つのプロンプトに連結される。
- モデルが上のループを回し、トークンをストリーム出力する。
- ラッパーコードが出力をパースし、ツールを呼び、結果を戻し、再プロンプトする。
- UIがmarkdownを描画し、それを会話と呼ぶ。
ステップ1、2、4、5はモデルではない。モデルが固定ウィンドウを持つステートレスなテキスト入出力関数だと飲み込めば、このガイドの残りは帳簿づけである。ウィンドウの大きさ(トークン)、ループの速さ(プリフィルとデコード)、実行場所(ハードウェア概要)、操縦方法(プロンプト)。
関連: トークン · transformerの内部 · パラメータ · 学習