コンテンツにスキップ

LLM のしくみ(Transformer)

ChatGPT や Claude のような LLM(大規模言語モデル)がやっていることは、突き詰めると 「ここまでの文章の次に来るトークンを予測する」 ことだけです。 トークンは、文章を細かく区切った単位です(1 回目で詳しく扱います)。 このコースでは、その予測が中でどう計算されているかを、ブラウザ上で数値を動かしながら確かめます。

先に全体の流れを眺めてから各回に進むのがおすすめですが、すぐに始めたい人は 1. トークン化 からどうぞ。

LLM が次の 1 トークンを出すまでの処理を 1 枚の図にすると、次のようになります。 例文の 10 個のトークンが 1 行ずつ、左から右へ流れていきます。図の中の下線の付いた処理名(①〜⑥)をクリックすると、その回に移動します。

← 図は横にスクロールできます →

① トークン化ID の列(10 個)② 埋め込みベクトルの列(10 × d)d は 1 本の数値の個数Transformer ブロック × N(③ と ④ のセットを N 回繰り返す)10 × d → 10 × d(形は変わらない)N は GPT-2 最小構成で 12、大きなモデルでは数十〜百数十⑤ 出力層語彙数ぶんのスコアGPT-2 で 50,257 個⑥ 確率にして選ぶsoftmax → 1 つ選ぶ猫3412が12魚2901を18食べた15873。6それ911は14新鮮20417だった7088マス=ベクトルの数値青=正・赤=負③ Attention青い行:「それ」が「魚」を強く見る猫が魚を食べ。それは新鮮だっ重み:行のトークンが、列のトークンを見る強さ斜線:後ろのトークン(見られない)集めた情報④ MLP4 倍に広げる戻す1 本ずつ別々に変換(トークンどうしは混ぜない)末尾の「だった」のベクトルだけを使う。スコア 3.1ねスコア 2.0がスコア 1.1…(語彙のすべて)。0.62ね0.21が0.08…(残り 0.09 はほかのトークン)。選んだ↺ 選んだ「。」の ID を列の末尾に足して 11 個にし、② の埋め込みからもう一度(文章をトークン化し直すわけではない)
  1. ① トークン化 1 の回

    文章を「トークン」という単位に区切り、それぞれを番号(トークン ID)に変えます。

    例「猫が魚を食べた。それは新鮮だった」→ 猫 / が / 魚 / … / だった の 10 個 → 3412, 12, 2901, …

  2. ② 埋め込み 2 の回

    番号ごとに、数値の並び(ベクトル数値を決まった個数だけ並べたもの。たとえば [0.2, -1.3, 0.8] は 3 つの数値からなるベクトル。並んだ個数を次元数という。ベクトルの「長さ」は個数ではなく、矢印としての大きさ(例:[3, 4] の長さは 5)。用語集でくわしく →)を表から取り出します。表の数値は、次のトークンを当てられるように学習で決まり、その結果、意味や使われ方の近いトークンほど近いベクトルになる傾向があります。GPT-2 などでは、何番目にあるかの情報もここで足します。

    例「魚」→ [0.12, −0.40, 0.88, …](GPT-2 最小構成で 768 個の数値)。表から取り出した時点では、どの文の「魚」も同じベクトルで、周りの語の情報はまだ入っていません。

  3. ③ Attention 3 の回

    各トークンが、自分と、自分より前のトークンのうち、関係の深いものから情報を集めて、自分のベクトルに書き足します。

    例「それ」が「魚」の情報を取り込みます。末尾の「だった」は前の 9 個すべてを見られるので、次の予測に必要な文脈を取り込めます。ただし文全体を 1 本にまとめるわけではなく、10 個の行はそれぞれ自分のベクトルを持ち続けます。

  4. ④ MLP(多層パーセプトロン)線形変換と活性化関数を交互に重ねた、基本的なニューラルネットワーク。Transformer では、各トークンのベクトルを 1 つずつ別々に変換する部分を指す。用語集でくわしく → 4 の回

    各トークンのベクトルを 1 本ずつ、一度 4 倍の長さに広げてから元の長さに戻す変換をして、学習で覚えた知識を書き足します(トークンどうしは混ぜません)。③ と ④ をセットで N 回繰り返します。

    例最初の「だった」は語そのものを表すだけです。③ で「新鮮」や「それ(=魚)」の情報が、④ で「『〜だった』の後は文が終わりやすい」のような知識が足されていきます(中身はたとえで、実際は人には読めない数値です)。

  5. ⑤ 出力層 4 の回

    末尾のトークンのベクトル 1 本と、語彙の各トークン用のベクトルとの内積で、語彙のすべてのトークンにロジット(logits)モデルが最後に出す、語彙のトークン 1 つ 1 つに対するスコア。大きいほど「次に来そう」という意味だが、まだ確率ではなく、負の値もとる。用語集でくわしく →を付けます。末尾のベクトルと同じ向きのトークンほど、スコアが高くなります。

    例「。」3.1、「ね」2.0、「が」1.1、…(GPT-2 では 50,257 個すべてにスコアが付く。スコアは負にもなり、合計は 1 にならない)

  6. ⑥ 確率にして選ぶ 5 の回

    スコアを softmax(ソフトマックス)数値の並びを、すべて 0 以上で合計がちょうど 1 になる「確率の並び」に変える関数。元の値が大きいものほど大きな確率になる。用語集でくわしく → で確率(すべて 0 以上で合計 1)に直し、確率に従って 1 つ選びます(いつも一番高いものを選ぶ方法もあります)。選んだトークンを末尾に足して、② からもう一度計算します。

    例「。」0.62、「ね」0.21、「が」0.08、残りの 0.09 をほかの約 5 万個が分け合う → 「。」を選ぶ → 11 個になり、次の 1 トークンを予測

1 行が 1 トークンです。数値はすべて説明用で、ベクトルは実際には d 個(GPT-2 最小構成で 768 個)の数値ですが、図では 8 マスで描いています。Attention は実際には複数の「ヘッド」に分かれ、それぞれ別の重みの表を持ちます(図はその 1 つ。3 の回)。ほかの細かい部品(LayerNorm・残差接続)は 4 の回で扱います。

末尾の「だった」のベクトルが、次の予測に使えるようになるまで

Section titled “末尾の「だった」のベクトルが、次の予測に使えるようになるまで”

図の ③〜⑤ で、末尾の「だった」のベクトルに何が起きているかを、順に追ってみます(書き足される中身はたとえです。実際のベクトルは数百個の数値で、何が書き足されたかを人がそのまま読み取ることはできません)。

  1. ② の直後は、「だった」という語そのもの: 猫も魚も知りません。このまま ⑤ に入れても、「だった」の後に一般によく来るものを当てずっぽうに出すだけです。
  2. ③ Attention で、前の語の情報が足される: 「新鮮」から「何かが新鮮だという話」、「それ」から「何についての話か」(「それ」は前の層で「魚」の情報を取り込み済み)、「は」「。」から「新しい文の述語の部分にいる」といった情報を集めます。
  3. ④ MLP で、学習で覚えた知識が足される: たとえば「述語が『〜だった』で終わったら、文が終わることが多い」のような、大量の文章から覚えたパターンです。
  4. ③ と ④ を N 回繰り返す: 層を重ねるたびに、「次に何が来そうか」の判断に役立つ情報が足され、磨かれていきます(なぜ 1 回では足りないのかは、4 の回の「なぜ何回も通すのか」)。
  5. ⑤ 出力層は、このベクトルと各トークン用のベクトルの内積でスコアを付ける: 末尾のベクトルが「。」用のベクトルと同じ向きを向くほど、「。」のスコアが高くなります(計算の例は 4 の回)。「次に来そうなものを表すベクトルになる」とは、こういう向きになるということです。

末尾の位置がこの役を担えるのは、学習のときに すべての位置で「自分の次のトークン」を当てさせている からです。どの位置の最終的なベクトルも「自分の次を当てるためのもの」に鍛えられていて、生成のときは、まだ次が分からない末尾の 1 本だけを使います。

回(図の番号)処理入力 → 出力
1. トークン化(①)文章を区切り、番号に変える文章 → ID の列
2. 埋め込み(②)番号をベクトルに変えるID の列 → ベクトルの列
3. Attention(③)トークン同士で情報をやり取りするベクトルの列 → 同じ形の列
4. ブロック全体(④ ⑤)MLP と組んで積み重ね、最後にスコアを出すベクトルの列 → 語彙数個のスコア
5. 次のトークンを選ぶ(⑥)スコアを確率にして、1 つ選ぶスコア → トークン 1 個

最初に動画で全体像をつかみ、その後このサイトで手を動かすと理解しやすくなります。

3Blue1Brown の動画対応する回
GPT とは何か — Transformer の視覚的解説(深層学習 第 5 章)1・2・5
Attention の可視化(第 6 章)3
LLM はどう事実を記憶するのか(第 7 章)4

各回の 試してほしいこと にあるデモは、すべてブラウザの中だけで計算しています。好きなだけ数値をいじってみてください。

  • 点線の下線が付いた用語は、クリックすると短い解説が出ます。全項目は 用語集 にまとめています。
  • 本文を選択すると 「AI 向けに引用をコピー」 ボタンが出ます。「このページのこの箇所について」という引用がコピーされるので、普段使っている AI(ChatGPT・Claude・Gemini など)に貼り付けて、続けて質問を書いてください。
  • 右下の 「ノート」(狭い画面では ✎ のボタン)から、ページごとのノートを書けます。