Transformer 内部構造ガイド入力から出力までを図・形状・コードで追う

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の処理フロー

Transformerの基本構造 原典TransformerのEncoderとDecoderの処理フロー。各処理ブロックから詳細ページへ移動できます。 Transformerの基本構造 原典のEncoder–Decoder構成 ── ブロックをクリックすると詳細解説へ移動します Encoder:入力を文脈表現へ変換 Decoder:次のトークンを予測 N回反復 N回反復 入力トークン 例:「私は猫が好き」 入力埋め込み Token Embedding 位置情報 Positional Encoding + マルチヘッド自己注意 Multi-Head Self-Attention 残差接続 + LayerNorm Add & Norm 位置ごとの全結合処理 Feed-Forward Network 残差接続 + LayerNorm Add & Norm Encoder出力 文脈を含む各トークンの表現 残差経路 右シフトした出力トークン 先頭に開始記号を追加 出力埋め込み Token Embedding 位置情報 Positional Encoding + マスク付き自己注意 未来のトークンを参照しない 残差接続 + LayerNorm Add & Norm Encoder–Decoder Attention Encoder出力を参照(Cross Attention) 残差接続 + LayerNorm Add & Norm 位置ごとの全結合処理 Feed-Forward Network 残差接続 + LayerNorm Add & Norm Key・Valueを渡す DecoderのQueryで検索 出力ヘッド Linear 語彙数へ変換 Softmax 確率へ変換 次トークンの確率 選択後、再び入力 実線=主処理  破線=残差接続  紫線=Encoder出力の参照  ※ GPT・Llama系の生成LLMは、主にDecoder-only構成です。
図中の「N回反復」は、同じ重みの層をループする意味ではありません。 通常はそれぞれ別のパラメータを持つ層を N 個積み重ねることを指します(原典 base モデルでは Encoder・Decoder ともに N = 6)。

入力から順番に学ぶ

図と同じ順番で、入力トークンから次トークンの確率までを 1 ブロックずつたどれます。 はじめての方は 入力トークン から読み進めてください。

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 本)を見る