一文でまとめると: 詳細に踏み込む前に、まず地図を描く。データがどこから入り、何を通り抜け、どこから予測が出てくるのかを把握しましょう。
3.1 なぜ地図から始めるのか?
第2章では、巨大なモデルを次のように単純化しました。
パラメータ + 推論コード
しかし、その推論コードは実際に何をしているのでしょうか?
本章は各コンポーネントを深掘りする章ではありません。全体像を提示する章です。街を歩く前に地図を眺めるようなものだと考えてください。主要なランドマークを把握しておけば、後続の章で出てくる話題を地図上に貼り付けていけます。
本章を読み終えると、次の点について頭の中にモデルができているはずです。
- 入力は何か
- 途中でどんな変換が起きるか
- 出力は何か
- なぜ同じブロックが何度も繰り返されるのか
3.2 まずは簡略フローから
下から上へと、データは 7 つの段階を通り抜けます。
3.2.1 生のテキスト
入力はテキストから始まります。
The agent opened a pull request.
コンピュータはテキストを直接理解できません。数値が必要です。
3.2.2 トークン ID
最初のステップでは、テキストをトークン ID に変換します。
"The agent opened a pull request."
-> [791, 8479, 9107, 264, 6958, 1715, 13]
このプロセスを Tokenization と呼びます。第4章で詳しく扱います。
3.2.3 トークンベクトルと位置
トークン ID はまだ整数にすぎません。モデルはこれを埋め込みテーブルで引き、各トークンをベクトルに変換します。
そのうえで位置情報を加えます。順序が重要だからです。
"The agent tagged the reviewer" != "The reviewer tagged the agent"
3.2.4 Attention
Attention は、トークンが他のトークンを見て何が重要かを判断するための仕組みです。
たとえばモデルが request を処理するとき、pull、opened、agent に注意を向ける必要があるかもしれません。Attention はそうした関係性を計算するメカニズムです。
3.2.5 正規化と処理
ニューラルネットワーク内を流れる数値は大きくなりすぎたり不安定になったりすることがあります。LayerNorm は値を妥当な範囲に保ちます。
その後、Feed Forward Network が各位置をさらに処理します。Attention がトークン間の関係についての処理だとすれば、FFN は各トークン内部の表現を変換する処理です。
3.2.6 確率
最後にモデルは語彙中の各トークンに対するスコアを生成します。Softmax がそのスコアを確率に変換します。
3.2.7 次のトークン
モデルはその確率分布から次のトークンを選ぶ、あるいはサンプリングします。そして第2章で見た自己回帰ループが繰り返されます。
簡略フローは次のようになります。
text -> token IDs -> vectors + position -> repeated blocks -> probabilities -> next token
3.3 標準アーキテクチャ
ここからは簡略地図から標準アーキテクチャへと進みます。
3.3.1 入力
モデルはトークン ID のシーケンスを受け取ります。
3.3.2 トークン埋め込み
各トークン ID はベクトルにマッピングされます。最終的には、似たトークンはベクトル空間内で近くに位置するようになります。たとえば pull request と code review のベクトルは、pull request と playlist のベクトルよりも近いはずです。
3.3.3 位置情報
Transformer ブロックはそれ自体ではシーケンスの順序を知りません。位置情報は、どのトークンが1番目で、2番目で、3番目で…とモデルに教える役割を持ちます。
3.3.4 Masked Multi-Head Attention
これがコアコンポーネントです。
- Masked は、次のトークンを予測する際にモデルが未来を見ないようにすることを意味します。
- Multi-head は、モデルが複数の Attention の視点を並列に使うことを意味します。
- Attention は、各トークンが他のトークンの情報をどれだけ強く使うかを計算することを意味します。
3.3.5 LayerNorm と残差接続
LayerNorm は数値を安定化します。残差接続は、すべての変換を強制的に通すのではなく、情報がブロックを迂回できるようにします。
両方とも後の章で詳しく扱います。
3.3.6 Feed Forward Network
FFN は各トークン位置に適用される小さなニューラルネットワークです。表現を拡張・変換し、再びモデルの次元に射影します。
3.3.7 N 回繰り返す
Transformer ブロック1つでも有用ですが、何枚もスタックすると強力になります。
小型モデルでは 12 レイヤー程度、大型モデルでは数十レイヤーを使うこともあります。各レイヤーが表現を洗練していきます。
3.3.8 Linear と Softmax
最後の隠れベクトルは語彙サイズのスコアにマッピングされます。語彙が 100,256 トークンあれば、出力も 100,256 個のスコアになります。
Softmax がそのスコアを確率に変換します。
3.4 もう少し詳しい地図
この図は情報量が多くなりますが、いま暗記しようとしないでください。目標は主要なゾーンを認識することです。
3.4.1 Attention の内部
Attention は入力 X から始まります。
モデルは X に学習可能な3つの行列を掛けます。
WQは Query を生成WKは Key を生成WVは Value を生成
そしてその後、
QとKを掛け合わせて類似度を測ります。- スコアをスケーリングします。
- マスクで未来トークンの漏洩を防ぎます。
- Softmax がスコアを Attention の重みに変換します。
- その重みを
Vに適用します。 - 複数のヘッドを連結します。
WOが結合結果を射影します。
ここが本書の核心です。第8章から第12章にかけてゆっくり紐解いていきます。
3.4.2 デコーダーブロック
デコーダーブロックは、Attention を正規化、残差経路、Feed Forward Network で包み込んだ構造になっています。
簡略化したブロックは次のとおりです。
input
-> masked multi-head attention
-> add + layer norm
-> feed forward
-> add + layer norm
-> output
3.4.3 LM ヘッド
Language Model Head は、隠れベクトルを語彙空間へ戻すマッピングです。
hidden vector -> logits over vocabulary -> probabilities
これによってモデルは内部状態を次トークンの予測に変換します。
3.5 3つの地図の関係
| 地図 | 詳細度 | 主な用途 |
|---|---|---|
| 簡略フロー | 低 | 専門外の人にシステムを説明する |
| 標準アーキテクチャ | 中 | 論文を読み、モデル図を理解する |
| 詳細地図 | 高 | 実装とアーキテクチャを結び付ける |
3つはどれも同じシステムを表現しています。違うのは解像度だけです。
便利なたとえ。
- 簡略地図 = 国の地図
- 標準地図 = 街の地図
- 詳細地図 = 通りの地図
3.6 コンポーネントの予告
本書の残りは、地図を1つずつ歩いていきます。
3.6.1 コアコンポーネント
| 章 | コンポーネント | 一行説明 |
|---|---|---|
| 第4章 | Tokenization | テキスト -> トークン ID |
| 第5章 | Positional Encoding | 順序情報を加える |
| 第6章 | LayerNorm と Softmax | 数値を安定化し、スコアを確率にする |
| 第7章 | ニューラルネットワークレイヤー | 表現を処理する |
3.6.2 Attention
| 章 | コンポーネント | 一行説明 |
|---|---|---|
| 第8章 | 線形変換 | 行列乗算を幾何的に理解する |
| 第9章 | Attention の幾何 | なぜ内積が類似度になるのか |
| 第10章 | Q, K, V | クエリ、キー、バリューの意味 |
| 第11章 | Multi-Head Attention | 複数の視点が役立つ理由 |
| 第12章 | Attention の出力 | Attention は実際に何を更新しているのか |
3.6.3 アーキテクチャ全体
| 章 | コンポーネント | 一行説明 |
|---|---|---|
| 第13章 | 残差と Dropout | 深い学習を安定化する |
| 第14章 | 埋め込みと位置 | 入力表現を深く理解する |
| 第15章 | 完全なフォワードパス | すべてのコンポーネントをつなぐ |
| 第16章 | 学習 vs 推論 | 2つの動作モードを理解する |
3.7 章のまとめ
3.7.1 中心となるフロー
input text
|
Tokenization
|
Embedding
|
Position information
|
Transformer block x N
|
Linear projection
|
Softmax
|
next token
3.7.2 覚えておきたい用語
| 用語 | 役割 |
|---|---|
| Tokenization | テキストをトークン ID に変換する |
| Embedding | トークン ID をベクトルに変換する |
| Positional Encoding | 順序情報を加える |
| Multi-Head Attention | トークン間の関係を学習する |
| LayerNorm | 数値の範囲を安定化する |
| Feed Forward | 各トークン表現を処理する |
| 残差接続 | レイヤーをまたいで情報を保つ |
| Softmax | スコアを確率に変換する |
3.7.3 核心の持ち帰り
Transformer は構造的にはシンプルです。入力処理、繰り返されるブロック、出力予測。ブロックには2つの主要な仕事があります。Attention が関係を学習し、FFN が情報を処理します。
章末チェックリスト
本章を終えて、次のことができるようになっていれば十分です。
- Transformer の簡略フローを描ける。
- デコーダー専用 Transformer の主要コンポーネントを挙げられる。
- 入力テキストから次トークンの確率まで、データの流れを説明できる。
- 今後の章を全体地図のどこに置くか位置付けられる。
次章へ
地図読みはこれくらいで十分です。テキストから確率までのパイプラインをホワイトボードに描き直せるなら、最初のコンポーネントへズームインする準備ができています。
ここから第2部「コアコンポーネント」が始まります。
第4章では Tokenization を扱います。テキストはどう数値になるのか、英語と中国語ではなぜトークン化が違うのか、そしてなぜモデルは単語ではなくトークンを数えるのか、を解説します。
ここまでで本章はおしまいです。次の章でまた。