注意機構とTransformer
注意機構
注意機構(Attention)は、クエリとキーの適合度にもとづいてバリューの重み付き和を計算し、モデルが入力のどの部分を参照すべきかを動的に決める仕組みである。
ここではTransformerで使われるscaled dot-product attentionを説明する。 3つの行列
、
、
を用意する。これらはそれぞれクエリ、キー、バリューと呼ばれる。クエリ
は各位置が「何を探しているか」を、キー
は各位置が「どのような情報を持つか」を、バリュー
は実際に集約される情報を表す。

Scaled Dot-Product Attentionの計算手順(Vaswani et al., 2017)
Attentionの出力は
である。3つの行列を以下のように分割する。
まず、各クエリが各キーとどれだけ適合するかを内積で計算する。すなわち、クエリ とキー の類似度は である。これを全てのクエリと全てのキーの組み合わせについて計算すると、類似度行列 が得られる。
この行列に対して次元の大きさに応じたスケーリングを行い、さらにソフトマックス関数を適用することで、注意重み行列 が得られる。
これは各行の総和が1になる行列であり、 はクエリ がキー にどれだけ注意を向けるべきかを表す。ある 番目の行について考えると、以下のように 番目の出力 が得られる。
つまり適合度を重みとしてバリューの線形結合をとることで、クエリ に対するAttentionの出力が得られる。これを全てのクエリについて行うことで、Attentionの出力が得られる。これは正しく と の行列積で表される。
これによって、各クエリが必要とする情報を全てのバリューから集約することができるようになる。Attentionは、自然言語処理や画像認識などのタスクで広く利用されている。
Transformer
Transformerは、RNNやCNNに頼らず、Attention機構を中心に系列を処理するエンコーダ・デコーダ型のモデルである。各ブロックは、Multi-Head Attention、位置ごとのFeed-Forward Network、Residual Connection、Layer Normalizationから構成される。 エンコーダは入力列から文脈表現を生成し、デコーダはその文脈と既に生成した出力を用いて次のトークンを予測する。

Transformerの構造(Vaswani et al., 2017)
Self-AttentionとCross-Attention
Transformerのエンコーダとデコーダのブロックには、Self-AttentionとCross-Attentionの二種類のAttentionが存在する。Self-AttentionはAttentionの入力であったクエリ、キー、バリューが全て同じ入力 から生成される。
Self-Attentionは、入力 の各トークン位置どうしの関係を見ながら表現を更新するためのもので、エンコーダとデコーダの両方で用いられる。 一方で、Cross-Attentionはクエリが入力 とは異なる入力 から生成される。
Cross-Attentionは、クエリを生成した入力 を用いて、 の情報を集約するためのもので、デコーダがエンコーダ出力を参照しながら次のトークンを生成するために使われる。
マルチヘッドAttention
TransformerのAttentionは、単一のAttentionではなく、複数のAttentionを並列に配置したマルチヘッドAttention(Multi-Head Attention)である。これはクエリ、キー、バリューのベクトルを複数の小さなベクトルに線形射影して、それぞれに独立したAttentionを適用し、最後にそれらの出力を結合するものである。マルチヘッドAttentionは、Transformerのエンコーダとデコーダの両方で使われる。
マスク付きAttention
学習時のデコーダは正解系列をまとめて受け取れるが、そのままでは未来のトークンを見てしまい、推論時との条件がずれてしまう。そのため、未来位置に対応するスコアに を加え、Softmax後の重みが になるようにする。具体的には、以下のような行列を用いて
出力を以下のように計算する。
すると、重み行列のうち未来位置に対応する部分は となり、未来のトークンを参照できなくなる。Masked Attentionは、Transformerのデコーダ内のSelf-Attentionで使用される。
位置エンコーディング
Attentionは、RNNやLSTMのように順序を逐次的には処理しないため、そのままではトークンの並び順を区別できない。そこでTransformerは、各トークン表現にその位置を表すベクトルを加える。原論文では次のような正弦波型の位置エンコーディングが使われた。
ここで、 は系列内の位置を表す整数であり、 や はベクトルのインデックスである。 はトークン表現の次元数である。位置エンコーディングは入力埋め込み に加えて使用される。
Position Encodingは以下の点で優れている。
- はトークン内容 に依存せず、位置だけから定まる。
- 正弦・余弦の加法定理により、固定オフセット に対する を の線形関数として表せる。
- Vaswaniらは、この設計が学習時より長い系列への外挿を助ける可能性を期待して、学習型ではなく正弦波型の位置エンコーディングを採用した。
FFN(Feed-Forward Network)
Attentionは位置間の情報を混合するが、各位置に対する非線形変換は別途必要である。そのためTransformerは、各位置に同じ2層の全結合ネットワークを独立に適用するフィードフォワードネットワーク(Feed-Forward Network; FFN)を配置している。原論文ではReLUを用いた次の形で定義される。
FFNは他の位置の情報を参照せず、各トークン位置の表現を個別に変換する。Transformerではこの層もエンコーダとデコーダの両方に含まれる。