LLM のしくみ(Transformer)
ChatGPT や Claude のような LLM(大規模言語モデル)がやっていることは、突き詰めると 「ここまでの文章の次に来るトークンを予測する」 ことだけです。 トークンは、文章を細かく区切った単位です(1 回目で詳しく扱います)。 このコースでは、その予測が中でどう計算されているかを、ブラウザ上で数値を動かしながら確かめます。
先に全体の流れを眺めてから各回に進むのがおすすめですが、すぐに始めたい人は 1. トークン化 からどうぞ。
LLM が次の 1 トークンを出すまでの処理を 1 枚の図にすると、次のようになります。 例文の 10 個のトークンが 1 行ずつ、左から右へ流れていきます。図の中の下線の付いた処理名(①〜⑥)をクリックすると、その回に移動します。
← 図は横にスクロールできます →
① トークン化 1 の回
文章を「トークン」という単位に区切り、それぞれを番号(トークン ID)に変えます。
例「猫が魚を食べた。それは新鮮だった」→ 猫 / が / 魚 / … / だった の 10 個 → 3412, 12, 2901, …
② 埋め込み 2 の回
番号ごとに、数値の並び(ベクトル数値を決まった個数だけ並べたもの。たとえば [0.2, -1.3, 0.8] は 3 つの数値からなるベクトル。並んだ個数を次元数という。ベクトルの「長さ」は個数ではなく、矢印としての大きさ(例:[3, 4] の長さは 5)。用語集でくわしく →)を表から取り出します。表の数値は、次のトークンを当てられるように学習で決まり、その結果、意味や使われ方の近いトークンほど近いベクトルになる傾向があります。GPT-2 などでは、何番目にあるかの情報もここで足します。
例「魚」→ [0.12, −0.40, 0.88, …](GPT-2 最小構成で 768 個の数値)。表から取り出した時点では、どの文の「魚」も同じベクトルで、周りの語の情報はまだ入っていません。
③ Attention 3 の回
各トークンが、自分と、自分より前のトークンのうち、関係の深いものから情報を集めて、自分のベクトルに書き足します。
例「それ」が「魚」の情報を取り込みます。末尾の「だった」は前の 9 個すべてを見られるので、次の予測に必要な文脈を取り込めます。ただし文全体を 1 本にまとめるわけではなく、10 個の行はそれぞれ自分のベクトルを持ち続けます。
④ MLP(多層パーセプトロン)線形変換と活性化関数を交互に重ねた、基本的なニューラルネットワーク。Transformer では、各トークンのベクトルを 1 つずつ別々に変換する部分を指す。用語集でくわしく → 4 の回
各トークンのベクトルを 1 本ずつ、一度 4 倍の長さに広げてから元の長さに戻す変換をして、学習で覚えた知識を書き足します(トークンどうしは混ぜません)。③ と ④ をセットで N 回繰り返します。
例最初の「だった」は語そのものを表すだけです。③ で「新鮮」や「それ(=魚)」の情報が、④ で「『〜だった』の後は文が終わりやすい」のような知識が足されていきます(中身はたとえで、実際は人には読めない数値です)。
⑤ 出力層 4 の回
末尾のトークンのベクトル 1 本と、語彙の各トークン用のベクトルとの内積で、語彙のすべてのトークンにロジット(logits)モデルが最後に出す、語彙のトークン 1 つ 1 つに対するスコア。大きいほど「次に来そう」という意味だが、まだ確率ではなく、負の値もとる。用語集でくわしく →を付けます。末尾のベクトルと同じ向きのトークンほど、スコアが高くなります。
例「。」3.1、「ね」2.0、「が」1.1、…(GPT-2 では 50,257 個すべてにスコアが付く。スコアは負にもなり、合計は 1 にならない)
⑥ 確率にして選ぶ 5 の回
スコアを softmax(ソフトマックス)数値の並びを、すべて 0 以上で合計がちょうど 1 になる「確率の並び」に変える関数。元の値が大きいものほど大きな確率になる。用語集でくわしく → で確率(すべて 0 以上で合計 1)に直し、確率に従って 1 つ選びます(いつも一番高いものを選ぶ方法もあります)。選んだトークンを末尾に足して、② からもう一度計算します。
例「。」0.62、「ね」0.21、「が」0.08、残りの 0.09 をほかの約 5 万個が分け合う → 「。」を選ぶ → 11 個になり、次の 1 トークンを予測
末尾の「だった」のベクトルが、次の予測に使えるようになるまで
Section titled “末尾の「だった」のベクトルが、次の予測に使えるようになるまで”図の ③〜⑤ で、末尾の「だった」のベクトルに何が起きているかを、順に追ってみます(書き足される中身はたとえです。実際のベクトルは数百個の数値で、何が書き足されたかを人がそのまま読み取ることはできません)。
- ② の直後は、「だった」という語そのもの: 猫も魚も知りません。このまま ⑤ に入れても、「だった」の後に一般によく来るものを当てずっぽうに出すだけです。
- ③ Attention で、前の語の情報が足される: 「新鮮」から「何かが新鮮だという話」、「それ」から「何についての話か」(「それ」は前の層で「魚」の情報を取り込み済み)、「は」「。」から「新しい文の述語の部分にいる」といった情報を集めます。
- ④ MLP で、学習で覚えた知識が足される: たとえば「述語が『〜だった』で終わったら、文が終わることが多い」のような、大量の文章から覚えたパターンです。
- ③ と ④ を N 回繰り返す: 層を重ねるたびに、「次に何が来そうか」の判断に役立つ情報が足され、磨かれていきます(なぜ 1 回では足りないのかは、4 の回の「なぜ何回も通すのか」)。
- ⑤ 出力層は、このベクトルと各トークン用のベクトルの内積でスコアを付ける: 末尾のベクトルが「。」用のベクトルと同じ向きを向くほど、「。」のスコアが高くなります(計算の例は 4 の回)。「次に来そうなものを表すベクトルになる」とは、こういう向きになるということです。
末尾の位置がこの役を担えるのは、学習のときに すべての位置で「自分の次のトークン」を当てさせている からです。どの位置の最終的なベクトルも「自分の次を当てるためのもの」に鍛えられていて、生成のときは、まだ次が分からない末尾の 1 本だけを使います。
各回で扱うこと
Section titled “各回で扱うこと”| 回(図の番号) | 処理 | 入力 → 出力 |
|---|---|---|
| 1. トークン化(①) | 文章を区切り、番号に変える | 文章 → ID の列 |
| 2. 埋め込み(②) | 番号をベクトルに変える | ID の列 → ベクトルの列 |
| 3. Attention(③) | トークン同士で情報をやり取りする | ベクトルの列 → 同じ形の列 |
| 4. ブロック全体(④ ⑤) | MLP と組んで積み重ね、最後にスコアを出す | ベクトルの列 → 語彙数個のスコア |
| 5. 次のトークンを選ぶ(⑥) | スコアを確率にして、1 つ選ぶ | スコア → トークン 1 個 |
おすすめの進め方
Section titled “おすすめの進め方”最初に動画で全体像をつかみ、その後このサイトで手を動かすと理解しやすくなります。
| 3Blue1Brown の動画 | 対応する回 |
|---|---|
| GPT とは何か — Transformer の視覚的解説(深層学習 第 5 章) | 1・2・5 |
| Attention の可視化(第 6 章) | 3 |
| LLM はどう事実を記憶するのか(第 7 章) | 4 |
各回の 試してほしいこと にあるデモは、すべてブラウザの中だけで計算しています。好きなだけ数値をいじってみてください。
読んでいてわからないときは
Section titled “読んでいてわからないときは”- 点線の下線が付いた用語は、クリックすると短い解説が出ます。全項目は 用語集 にまとめています。
- 本文を選択すると 「AI 向けに引用をコピー」 ボタンが出ます。「このページのこの箇所について」という引用がコピーされるので、普段使っている AI(ChatGPT・Claude・Gemini など)に貼り付けて、続けて質問を書いてください。
- 右下の 「ノート」(狭い画面では ✎ のボタン)から、ページごとのノートを書けます。

