「Attention Is All You Need」(2017)― RNNを使わず注意機構だけで構築した革命的モデル
それまでの系列処理の主役だったRNNには2つの大きな問題がありました。
Self-Attentionは「各単語が、文中の他の全ての単語とどれだけ関連があるかを計算する」仕組みです。これをQuery(質問)・Key(索引)・Value(内容)の3つの役割で実現します。
「好き」という単語が、他の全単語にどれだけ注目するかを計算する流れです。
1つのAttentionだけだと「1つの観点」でしか単語間の関係を見られません。マルチヘッドでは複数のAttentionを並列に走らせ、異なる観点から関係を捉えます。
Self-Attentionは全単語を同時並列に処理するので、語順の情報が失われます。「猫が私を好き」と「私が猫を好き」の区別がつかなくなる。
これを解決するために、各単語の埋め込みベクトルに「位置を表す信号」を足し算します。
| 種類 | 場所 | Q, K, V の出所 | 意味 |
|---|---|---|---|
| Self-Attention | エンコーダ内 | Q, K, V全て同じ入力から | 入力文の各単語が他の全単語との関連を見る |
| Masked Self-Attention | デコーダ内 | Q, K, V全てデコーダ入力から | 出力を生成するとき未来の単語を見ないようにマスクする |
| Cross-Attention | デコーダ内 | Q = デコーダから K, V = エンコーダ出力から |
デコーダが「入力文のどこに注目すべきか」を決める |
| 基本 | 2017年Google「Attention Is All You Need」。RNNを使わずAttentionだけで系列処理を実現 |
| Q, K, V | Query=問い合わせ、Key=索引、Value=内容。QとKの内積で関連度を計算し、Vを加重平均 |
| Self-Attention | 全単語間の関連を並列に計算。RNNの逐次処理と異なり高速。長距離依存も直接捉えられる |
| 位置エンコーディング | 並列処理で失われる語順情報を補うためにsin/cosの位置信号を加算 |
| マルチヘッド | 複数のAttentionを並列に実行し、異なる観点(意味・文法など)の関係を同時に学習 |
| 3種のAttention | Self-Attention(入力内)/ Masked Self-Attention(未来を見ない)/ Cross-Attention(エンコーダ参照) |
| 派生 | エンコーダのみ=BERT(理解)/ デコーダのみ=GPT(生成)/ 両方=T5(翻訳・要約) |