Transformerの全体像
Transformer は、系列データを一度にまとめて読み、トークン同士の関係を Attention で計算するニューラルネットワークの構成です。 RNN のように前から順に状態を受け渡すのではなく、系列内のすべての位置を並列に処理できるため、 長い文脈を扱いながら学習を高速化できます。
2017年の原典「Attention Is All You Need」で提案されたのは、 入力を読む Encoder と、出力を生成する Decoder を組み合わせた Encoder–Decoder 構成でした(base モデルは各 6 層、d_model = 512、 Head 数 8)。機械翻訳のように、 「入力文を読む」処理と「出力文を作る」処理が分かれているタスクを想定しています。
一方、GPT や Llama など現在の文章生成 LLM の多くは、Encoder を持たない Decoder-only 構成です。入力(プロンプト)も出力も同じ1本の系列として扱い、 Masked Self-Attention だけで次のトークンを予測します。 このサイトではまず原典の構成で全体の流れを押さえ、 そのうえで Decoder-only との違いを各ページで補足します。
原典Transformerの処理フロー
入力から順番に学ぶ
図と同じ順番で、入力トークンから次トークンの確率までを 1 ブロックずつたどれます。 はじめての方は 入力トークン から読み進めてください。
Encoder
Decoder
出力ヘッド
Encoder・Decoder・出力ヘッドの役割比較
| 区分 | 役割 | 使う Attention | 受け取るもの | 渡すもの | 現代のモデルでの使われ方 |
|---|---|---|---|---|---|
| Encoder | 入力文全体を読み、各トークンの文脈付き表現を作る | Self-Attention(マスクなし。全トークンが相互に参照可能) | 入力トークン列 | 文脈表現 [B, S, D] | BERT などの Encoder-only、翻訳モデルの入力側 |
| Decoder | すでに確定した出力を手がかりに、次のトークンの表現を作る | Masked Self-Attention + Cross Attention | 右シフトした出力トークン列(+Encoder出力) | 次トークン予測用の表現 [B, T, D] | GPT・Llama などの Decoder-only、翻訳モデルの出力側 |
| 出力ヘッド | 表現を語彙上の確率分布へ変換する | (Attention は使わない) | Decoder の最終表現 [B, T, D] | logits [B, T, V] → 確率 [B, T, V] | ほぼすべての生成モデルで共通 |
全ページ共通の例文とその理由
共通例文
The keys on the table are lost.
概念上のトークン列(S = 8): [The, keys, on, the, table, are, lost, .]
すべての詳細ページで同じ例文を使います。ページをまたいでも、同じ文がどう変換されていくかを追いかけられるようにするためです。
keys`keys` は複数形。動詞の形を決める主語になっている。table`table` は単数形で、`are` により近い位置にある。距離だけで判断すると誤りやすい。are`are` は直前の語ではなく、主語である `keys` との関係を捉える必要がある。on the table`on the table` は `keys` を説明する句として扱える。句のまとまりを説明しやすい。語順語順・構文上の関係・文脈依存の表現を、短い文で一度に説明できる。
前提知識と関連記事
読む前に知っておくとよいこと
- 行列とベクトルの積のイメージ(内積で「似ている度合い」を測ること)
- ニューラルネットワークの「線形変換 → 非線形関数」という基本形
- 確率分布と正規化(合計を 1 にそろえる操作)
- 機械学習の専門知識は不要です。API や DB の設計と同じ感覚で、入出力と形状に注目してください。
まず読むとよい記事
- 入力トークン文字列をモデルが扱える単位(トークン)へ分割し、それぞれに整数IDを割り当てる工程です。Transformer本体の外側にあるTokenizerが担当し、以降のすべての処理はこのID列を起点にします。
- マルチヘッド自己注意各トークンが同じ系列内の全トークンを参照し、関連の強さに応じて情報を混ぜ合わせる処理です。Query・Key・Valueの3役を使い、複数のHeadで異なる観点を並行して計算します。
- 次トークンの確率と逐次生成確率分布から実際に出力する1トークンを選び、それを入力の末尾に足して次のステップへ回す工程です。ここで初めてモデルの出力が文になります。学習時の並列計算との違いが最も表れる部分です。
- 記事一覧(全 13 本)を見る