1. 定義と概要
Encoder-Decoder Attention とは、Transformer のデコーダ側に置かれる Attention 機構です。クエリ(Query。何に注目するかを決める問いかけの役割を持つベクトル)は、デコーダの前段の出力から取ります。キー(Key。注目される側の目印となるベクトル)とバリュー(Value。実際に取り出される中身の情報を表すベクトル)は、エンコーダの出力から取って計算します。
デコーダの各位置が入力系列(エンコーダが処理した原文にあたる系列)の全位置を参照できるようにすることが、この処理の役割です。Source-Target Attention、Cross-Attention(異なる2つの系列の間で注目し合う仕組みの呼び方)とも呼ばれ、いずれも同一の仕組みを指す別名です。
Transformer 以前の Seq2Seq(ある系列を別の系列に変換するモデルの総称)でも、Attention を使う構造は存在しました。RNN や LSTM をベースにしたこの仕組みでも、デコーダがエンコーダの隠れ状態(RNN が各時点で保持する情報の要約)を参照する仕組みでした。
Transformer は、この「参照する」という働きを Self-Attention(同じ系列の中の単語同士が互いに注目し合う仕組み)と同じクエリ・キー・バリューの計算式に統一しました。そのうえで、置かれる場所によって①エンコーダ内の Self-Attention ②デコーダ内の Self-Attention ③ Encoder-Decoder Attention の3種類に整理した流れにあります。
2. 試験対策ポイント
Transformer の中には、Attention が3か所に置かれています。どこに置かれ、何を参照するかで対応づけると次のように整理できます。
| 置かれる場所 | 参照する対象 | マスク処理 |
|---|---|---|
| ①エンコーダ内の Self-Attention | 入力系列の中で単語同士が相互に参照 | なし |
| ②デコーダ内の Self-Attention | 出力系列の中で単語同士が相互に参照 | あり |
| ③ Encoder-Decoder Attention | デコーダからエンコーダの出力を参照 | なし |
②に伴うマスク処理(マスクドセルフアテンション。先の単語が見えないように隠す処理)は、生成中の位置より先を見ないようにするための仕組みです。この3分類のうち、本記事は③の位置づけを中心に整理します。
Encoder-Decoder Attention では、クエリ・キー・バリューの取り出し元が二手に分かれます。
| 要素 | 取り出し元 |
|---|---|
| クエリ | デコーダの Self-Attention 層を経た後の出力 |
| キー・バリュー | エンコーダの出力 |
計算式そのものは Self-Attention と同じ形を保っていますが、参照する系列がデコーダ側かエンコーダ側かで分かれる点が要点になります。同じ式でも、どこから値を取るかで働きが変わるという見方をしておくと理解しやすくなります。
デコーダ内の Self-Attention に組み込まれるマスク処理は、Transformer が系列の先頭から順に単語を生成する自己回帰的(一つ前までの出力をもとに次を順番に生成していく方式)な性質を保つための仕組みです。学習のときと、推論(学習済みのモデルを使って答えを出す処理)のときとで、条件をそろえる役割も持っています。Encoder-Decoder Attention には、このマスクは適用されません。
呼び方の整理として、Encoder-Decoder Attention・Source-Target Attention・Cross-Attention は同一の仕組みを指す別名にあたります。G検定の公開シラバスでも「Self-Attention と Encoder-Decoder Attention(Source Target Attention)」という形で併記されており、複数の呼び名が教材でも扱われます。
3. 関連概念との比較・相違点
デコーダ内の Self-Attention との最大の違いは、参照先という点です。デコーダ内の Self-Attention は、生成中の出力系列そのもの、つまりそこまでに生成した位置を参照し、マスク処理によって未来の単語を隠します。
これに対して Encoder-Decoder Attention は、エンコーダの出力、つまり入力系列全体を参照し、マスクを持ちません。参照する対象が自分自身の系列か相手の系列かという違いが、両者を分ける軸になります。
エンコーダ内の Self-Attention との違いは、置かれる場所と参照先の組み合わせにあります。エンコーダ内の Self-Attention は、エンコーダの中で入力系列自身を相互参照する処理です。
一方の Encoder-Decoder Attention は、デコーダの中に置かれ、クエリはデコーダ側、キーとバリューはエンコーダ側という、異なる系列間の参照になります。計算の構造自体は Self-Attention と同じで、クエリ・キー・バリューの出所だけが異なる点が分かれ目です。
4. ビジネス・実務での活用シナリオ
機械翻訳の現場では、原文、つまりエンコーダが処理した系列のどの単語に注目しながら訳文の各単語を生成しているかを、Encoder-Decoder Attention の重みから確認できます。この重みは、訳出結果の妥当性を後から説明する材料です。
文書要約や文章生成の場面では、長文入力のどの箇所を参照しながら要約文を生成しているかを、Attention の重みとして可視化できます。生成された内容が入力のどこに基づくのかを、後から追跡する手がかりです。
音声認識や音声合成の分野でも、音声をエンコードした結果とテキストを生成する側を Encoder-Decoder Attention で結び付けます。入力音声のどの区間が出力のどの文字に対応するかを、対応付ける役割を果たします。
5. 要点まとめ
- Encoder-Decoder Attention は、デコーダに置かれ、クエリをデコーダ側、キーとバリューをエンコーダの出力から取得して入力系列を参照する Attention です。Source-Target Attention、Cross-Attention と同じ仕組みを指す別名です。
- Transformer には①エンコーダ内 Self-Attention ②デコーダ内 Self-Attention(マスクあり)③ Encoder-Decoder Attention の3か所に Attention が置かれます。③は②と参照先が異なり、自分自身の系列かエンコーダの出力かという違いになります。
- デコーダ内の Self-Attention のマスク処理は、生成済みの単語までしか参照させません。単語を先頭から順に生成する流れを崩さないための工夫です。
6. 確認問題
問1Encoder-Decoder Attention は、Source-Target Attention と同じ仕組みを指す別名である。
解答・解説をみる
○ 正しい
原論文や G検定の公開シラバスでも両方の呼称が併記されており、指している仕組みは同一です。Cross-Attention という呼び方も同じ仕組みを指しており、あわせて整理しておきたいところです。
問2Encoder-Decoder Attention では、クエリ・キー・バリューのすべてがエンコーダの出力から取得される。
解答・解説をみる
× 誤り
正しくは、クエリはデコーダの前段の出力から、キーとバリューはエンコーダの出力から取得されるという組み合わせです。参照元がすべて同じという記述は、取り違えやすいところです。
問3Transformer のデコーダ内の Self-Attention には、生成時点より先の単語を参照できないようにするマスク処理が含まれる。
解答・解説をみる
○ 正しい
この命題が正しい根拠は、デコーダが生成済みの単語までしか参照できないよう、未来の位置への参照をマスクドセルフアテンションと呼ばれる処理で遮断している点にあります。Encoder-Decoder Attention 側には、このマスクは適用されません。

