4. エンコーダ・デコーダの全体構造
Transformerの全体像
Transformer の基本構造は、機械翻訳などの系列変換タスクを目的として設計された「エンコーダ・デコーダ(Encoder-Decoder)モデル」です。 左側の「エンコーダ(Encoder: 符号化器)」が入力文全体を読み込んで深い意味を抽出し、右側の「デコーダ(Decoder: 復号器)」がその情報を受け取って出力文を 1 単語ずつ生成します。
graph TD
subgraph Encoder["エンコーダ (N層積み重ね)"]
E_In["入力単語埋め込み + 位置エンコーディング"] --> E_MHA["Multi-Head Attention"]
E_MHA --> E_AddNorm1["残差接続 & 層正規化 (Add & Norm)"]
E_AddNorm1 --> E_FFN["Feed-Forward Network (FFN)"]
E_FFN --> E_AddNorm2["残差接続 & 層正規化 (Add & Norm)"]
end
subgraph Decoder["デコーダ (N層積み重ね)"]
D_In["出力単語埋め込み + 位置エンコーディング"] --> D_MMHA["Masked Multi-Head Attention<br/>(未来の単語をマスク)"]
D_MMHA --> D_AddNorm1["残差接続 & 層正規化 (Add & Norm)"]
D_AddNorm1 --> D_Cross["Cross-Attention<br/>(エンコーダの出力を参照)"]
E_AddNorm2 -.->|Key / Value| D_Cross
D_Cross --> D_AddNorm2["残差接続 & 層正規化 (Add & Norm)"]
D_AddNorm2 --> D_FFN["Feed-Forward Network (FFN)"]
D_FFN --> D_AddNorm3["残差接続 & 層正規化 (Add & Norm)"]
end
D_AddNorm3 --> Linear["線形層 + Softmax"]
Linear --> Out["次の単語の確率分布"]
原論文では、エンコーダとデコーダの双方が 6 層($N=6$)ずつ積み重ねられた構造を持っています。
エンコーダの内部構造
エンコーダの役割は、入力文に含まれる単語同士の関係性をくまなく分析し、豊かな文脈ベクトルを作り出すことです。 エンコーダの各層は、次の 2 つの主要サブレイヤーで構成されています。
- Multi-Head Attention(自己注意機構): 文中の全単語がお互いを参照し合い、前後の文脈情報を融合します。
- Position-wise Feed-Forward Network(位置依存フィードフォワード回路): 各単語のベクトルを独立に非線形変換し、さらに高次の表現へ変換します。
各サブレイヤーの前後には、学習を安定させるための「残差接続」と「層正規化」が必ず配置されています。
位置依存フィードフォワードネットワーク(FFN)
Self-Attention で単語同士の情報の「やり取り(混合)」を行った後、各単語のベクトルは FFN(Feed-Forward Network)に入力されます。 FFN は単語間の関係を見るのではなく、単語ごとに独立して同じ変換を適用する 2 層の全結合層です。
数式で表すと以下のようになります。
$$ \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 $$
一般的に、隠れ層の次元数($d_{ff}$)は入力次元数($d_{\text{model}}$)の 4 倍程度(例: 512 次元から 2048 次元)に一度拡張され、活性化関数(原論文では ReLU、現代では GELU や SwiGLU など)を通した後に元の次元に戻されます。 Self-Attention が「単語同士のコミュニケーション」を担当するのに対し、FFN は「集めた情報を各単語が自分自身の中で深く思考・記憶する」役割を果たしていると考えられています。
残差接続と層正規化の役割
ネットワークの層が深くなると、学習信号(勾配)が逆伝播する途中で消失したり爆発したりして、学習が破綻しやすくなります。 これを防ぐために、Transformer では ResNet で確立された「残差接続」と「層正規化」を徹底して組み込んでいます。
▸ 残差接続(Residual Connection)
サブレイヤーの入力を $x$、出力を $\text{SubLayer}(x)$ としたとき、出力を単純に置き換えるのではなく、$x + \text{SubLayer}(x)$ として入力をそのまま足し合わせるバイパス経路(スキップ結合)を設けます。 これにより、層がどれほど深くなっても入力情報や勾配が減衰せずに素通りできるため、100 層を超えるような巨大なモデルでも安定して学習できるようになります。
▸ 層正規化(Layer Normalization: LayerNorm)
ミニバッチ内のサンプル間で正規化を行う画像認識の Batch Normalization に対し、Layer Normalization は「1 つの単語ベクトル内の特徴量次元」にわたって平均が 0、分散が 1 になるように正規化します。 これにより、系列長が可変であっても安定して正規化が行えます。
▸ Post-LN から Pre-LN、そして RMSNorm へ
原論文ではサブレイヤーの出力後に正規化を行う「Post-LN」が使われていましたが、学習開始時に勾配が不安定になりやすく、慎重な学習率ウォームアップが必要でした。 そのため、現代のモデルではサブレイヤーの入力直前に正規化を置く「Pre-LN」が標準となっています。 さらに LLaMA などの最新モデルでは、計算コストを削減するために平均の引き算を省略し、二乗平均平方根だけでスケーリングする「RMSNorm」が主流となっています。
デコーダ固有のメカニズム
デコーダは、これまでに生成した単語とエンコーダの分析結果を両方使って、次に続く単語を 1 つずつ予測していきます。 デコーダには、エンコーダにはない 2 つの特別な機構が備わっています。
▸ Masked Multi-Head Attention(因果的マスキング)
文章を生成するとき、未来の単語(これから喋る単語)を先に見ることはカンニングになってしまいます。 モデルが自分より後ろにある単語に注意を向けないように、未来の単語に対応する Attention スコアを強制的に $-\infty$(極めて大きな負の値)に書き換える「マスキング(Causal Masking)」を行います。 Softmax 関数を通すと $-\infty$ は 0% になるため、モデルは「過去および現在」の単語だけを見て次の単語を予測するようになります。 これにより、学習時はすべての単語を一度に並列学習(Teacher Forcing)させつつ、推論時は自然な左から右へのテキスト生成が実現できます。
▸ Cross-Attention(交差注意機構)
デコーダの第 2 の Attention レイヤーでは、デコーダ自身の単語(Query)を使って、エンコーダから出力された文脈情報(Key と Value)を参照します。 たとえば英日翻訳で「リンゴ」という日本語を出力しようとしているとき、エンコーダの入力文「I ate an apple」の中の「apple」に強い注意を向けて情報を取り出します。 この Cross-Attention によって、入力文と出力文が的確に橋渡しされます。
次章では、このエンコーダ・デコーダの基本構造から、現代の BERT、GPT、T5 などの多様なモデルがどのように枝分かれして進化したのかを比較します。