Transformer アーキテクチャ全体の構造
アテンションの式だけでなく、残差接続・LayerNorm・FFN・マスクの「積み重ね方」まで一枚で俯瞰でき、各部品がなぜその位置にあるのかを腑に落とせる。
- 1.Transformer は同じブロックの積み重ね。1ブロック=マルチヘッドアテンション+FFN で、各サブ層を残差接続と LayerNorm が包む(現在の主流は Pre-LN 構成)。
- 2.エンコーダは双方向に全トークンを参照、デコーダは未来を見せない causal マスクで自己回帰を成立させ、クロスアテンションでエンコーダ出力を参照する。
- 3.アテンションは語順を見ないため位置エンコーディングで順序を注入し、残差と LayerNorm が深い積み重ねの勾配と数値を安定させる。これが深層化の前提。
全体像:同じブロックを N 段積むだけ
Transformer の本体は、まったく同じ構造のブロックを N 段だけ縦に積んだものです。原論文(Attention Is All You Need)では N=6。各ブロックは2つのサブ層 ——マルチヘッド・セルフアテンションと位置ごとのフィードフォワード網(FFN)—— からなり、どちらのサブ層も残差接続と LayerNorm で包まれます。この「サブ層を残差+正規化でくるむ」という単位が、Transformer を理解する最小パーツです。
アテンションそのものの直感(参照先を重みで動的に決める)は LLM と Transformer に譲り、ここでは部品の配置とデータフローに集中します。1ブロックを擬似コードで書くと、現在広く使われる Pre-LN(正規化を先に置く) 構成は次の通りです。
def block(x): # x: (seq_len, d_model)
a = MultiHeadAttention(LayerNorm(x))
x = x + a # 残差接続(1)
f = FFN(LayerNorm(x))
x = x + f # 残差接続(2)
return x # 出力 shape は入力と同一
重要なのは、入力と出力のテンソル形状が (seq_len, d_model) のまま変わらないこと。だからこそ同じブロックを何段でも積めます。形状不変性が「積み重ね(stack)」を可能にしている、と理解してください。
マルチヘッドアテンション:複数の視点で同時に参照
各ブロックの第1サブ層がアテンションです。入力ベクトル列から線形変換で Q(クエリ)・K(キー)・V(バリュー) を作り、スコアを計算します。
Attention(Q,K,V) = softmax(QKᵀ / √d_k) · V
QKᵀ で全トークン対の類似度を取り、√d_k(ヘッドあたり次元の平方根)で割って softmax が飽和しないようスケール調整し、その重みで V を加重平均します。√d_k で割らないと内積が大きくなりすぎ、softmax が一点に尖って勾配が消えるため、この除算は飾りではなく必須です。
マルチヘッドは、Q/K/V を h 個の小さな部分空間に分け、それぞれ独立にアテンションを計算してから連結する構成です。1つのヘッドが文法的係り受け、別のヘッドが共参照、といった異なる関係を並行して捉えることを狙います。各ヘッドの次元は d_model / h なので、ヘッドを増やしても総計算量はおおむね一定です。
セルフアテンションは全トークン対のスコア QKᵀ を作るため、計算量とメモリは系列長 n に対して O(n²·d) で増えます。長文・長コンテキストでコストが跳ね上がる根本原因はここにあり、FlashAttention やスパース/線形アテンションなどの高速化は、この2乗の壁を緩めるための工夫です。
残差接続と LayerNorm:深く積むための土台
なぜアテンションと FFN を、わざわざ残差接続(x + sublayer(x))でくるむのか。理由は勾配です。層を深くすると逆伝播で勾配が消えやすくなりますが、残差接続は x をそのまま通す“近道” を作り、勾配が浅い層まで減衰せず届くようにします。サブ層は「変化分(差分)」だけを学べばよくなり、最適化が安定します(この発想自体は ResNet 由来で、土台は ニューラルネットワーク の誤差逆伝播)。
LayerNorm は、各トークンのベクトルを特徴次元方向で平均0・分散1に正規化し、学習可能なスケール/シフトを掛けます。バッチ方向で正規化する BatchNorm と違い、バッチサイズや系列長に依存しないため、可変長の系列を扱う Transformer に適します。LN を置く位置で2系統あり、違いは無視できません。
| 観点 | Post-LN(原論文) | Pre-LN(現在の主流) |
|---|---|---|
| LN の位置 | 残差を足した後に正規化 | サブ層に入れる前に正規化 |
| 式 | LN(x + Sublayer(x)) | x + Sublayer(LN(x)) |
| 残差経路 | LN を通る(恒等でない) | 純粋な恒等経路が末端まで通る |
| 深い段数での安定性 | 学習が不安定になりやすい | 勾配が安定し warmup なしでも学習しやすい |
| 採用例 | オリジナル Transformer | GPT 系など多くの近年のLLM |
Pre-LN では残差経路がブロックを貫いて恒等のまま末端まで通るため勾配が安定し、超深層・大規模化と相性が良いことから現在の主流になっています。
FFN:トークンごとに非線形変換する
第2サブ層の FFN(Position-wise Feed-Forward Network) は、各トークンに独立同一に適用される2層の全結合網です。
FFN(x) = W2 · activation(W1 · x + b1) + b2
# 中間次元 d_ff は d_model の約4倍が定番(例: 512 → 2048 → 512)
アテンションがトークン間で情報を混ぜる役割なのに対し、FFN は各トークン内で非線形な特徴変換を行う役割で、両者は補完関係にあります。中間で d_model の約4倍まで一度広げてから戻すことで表現力を確保します。活性化は原論文の ReLU から、近年は GELU や SwiGLU が好まれます。なお Transformer のパラメータの大半はこの FFN が占める点も実務上の勘所です。
1ブロックは「アテンションでトークン間を混ぜ → FFN で各トークンを変換」の2拍子。この交互適用を N 回繰り返すことで、文脈の取り込みと特徴抽出が段階的に深まります。どちらか一方では不十分で、両輪あって初めて表現力が出ます。
位置エンコーディング:語順を明示的に注入する
アテンションは集合演算であり、入力の順序を入れ替えても出力が(対応して入れ替わるだけで)本質的に変わらない——つまり語順そのものを見ません。そこで埋め込み(埋め込み(Embedding))に 位置エンコーディング を加算し、順序情報を注入します。原論文は周期の異なる sin/cos を使う固定方式でしたが、近年は RoPE(回転位置埋め込み) のように相対位置を扱える方式が主流で、長文外挿にも有利です。これは RNN が逐次処理ゆえに順序を自然に得ていたのとの決定的な違いで、背景は CNN と RNN を参照してください。
エンコーダとデコーダ:マスクが役割を分ける
原論文はエンコーダ・デコーダの2本立てで、両者の差は主にアテンションのマスクと、参照する相手にあります。
| 観点 | エンコーダ | デコーダ |
|---|---|---|
| セルフアテンション | 双方向(全トークンを相互参照) | causal マスクで未来を遮断 |
| 追加のアテンション | なし | クロスアテンション(Q=デコーダ, K/V=エンコーダ出力) |
| サブ層構成 | 2サブ層(Attn+FFN) | 3サブ層(Masked Attn+Cross Attn+FFN) |
| 主な用途 | 入力全体の理解・表現抽出 | 出力を1トークンずつ自己回帰生成 |
| 代表モデル | BERT 系(理解タスク) | GPT 系(生成タスク・デコーダのみ) |
causal マスクは、softmax の前にスコア行列の上三角(未来位置)を -∞ に置き換え、softmax 後に重みを 0 にする操作です。これにより各位置は自分より前のトークンしか参照できなくなり、訓練時に全位置を並列計算しても「次トークン予測」の因果が破れません。自己回帰生成が成立する技術的な核心がこのマスクです。
デコーダで causal マスクを外すと、ある位置の予測に未来の正解トークンが見えてしまい(リーク)、訓練時の損失は下がるのに生成時にまったく機能しません。マスクは性能チューニングではなく、自己回帰の前提を守る正しさの保証です。
クロスアテンションは、デコーダが Q を、エンコーダ出力を K/V として使い、生成側から入力側を参照する橋渡しです。翻訳のように入力系列を踏まえて別系列を生成するタスクで効きます。一方、現在主流の多くの LLM はデコーダのみ(masked self-attention+FFN の積み重ね)で、エンコーダもクロスアテンションも持ちません。プロンプトも応答も同じ自己回帰の流れで扱えるためです。
まとめ:部品の役割を一枚で
| 部品 | 役割 | 外すとどうなるか |
|---|---|---|
| マルチヘッドアテンション | トークン間で文脈を混ぜる | 文脈を取り込めず、ただの語ごとの変換に |
| FFN | 各トークン内で非線形変換 | 表現力が落ち、線形寄りに潰れる |
| 残差接続 | 勾配の近道を作り深層化を可能に | 深いと勾配消失で学習困難 |
| LayerNorm | 活性を正規化し学習を安定化 | 発散・不安定で収束しにくい |
| 位置エンコーディング | 語順を明示的に注入 | 順序が消え語の並びを区別できない |
| causal マスク | 未来を遮断し自己回帰を成立 | 正解リークで生成が破綻 |
Transformer の強さは、突飛な発明ではなく 「形状を変えないブロックを、残差と正規化で安定化しながら深く積む」 という設計の堅実さにあります。各部品が「混合・変換・勾配・正規化・順序・因果」のどの責務を担うかを押さえれば、BERT(エンコーダ型)も GPT(デコーダ型)も同じ部品の組み替えとして読め、新しい派生アーキテクチャの理解も速くなります。
AI/機械学習 Article
Transformer アーキテクチャ全体の構造を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
Transformer
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
エンコーダは双方向に全トークンを参照、デコーダは未来を見せない causal マスクで自己回帰を成立させ、クロスアテンションでエンコーダ出力を参照する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「Transformer / アテンション」に近いか確認する。
- 強みである「Transformer は同じブロックの積み重ね。1ブロック=マルチヘッドアテンション+FFN で、各サブ層を残差接続と LayerNorm が包む(現在の主流は Pre-LN 構成)。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。