1行定義
Self-Attentionとは、系列の各要素が同じ系列内のすべての要素との関連度を求め、その重みで情報を集めて文脈を反映した表現を作る仕組みのことです。
くわしく
Self-Attention(自己注意機構)は、1つの文章の中で、各単語がほかの単語をどれだけ参考にするかを決める仕組みです。「店員は客に傘を渡した。それは濡れていた。」なら、「それ」の表現を作るときに「傘」へ大きな重みを置きます。Transformerの中心となる部品です。
しくみ
各単語のベクトルから、別々の重み行列で3種類のベクトルを作ります。
- クエリ:自分がどんな情報を探しているか
- キー:自分の内容を示す見出し
- バリュー:参照されたときに渡す中身
ある単語のクエリと、文中の全単語のキーとの内積で関連度を求めます。Transformerでは、これをキーの次元数d_kの平方根で割り、ソフトマックス関数で合計1の重みに変えます。その重みでバリューを加重和したものが出力です。まとめるとsoftmax(QK^T / √d_k) Vと書けます。
注目の重みは固定ではなく、入力のたびに計算されます。同じ単語でも、文脈が変われば注目する相手が変わります。
RNNとの違い
RNNは単語を1つずつ順に処理するため、離れた単語の情報が途中で薄れやすく、計算も順番にしか進められません。Self-Attentionは、どの2語の間も1回の計算で直接結びつけます。全位置をまとめて計算できるので、GPUで効率よく学習できます。
弱点は、全単語の組み合わせを計算するため、計算量が文の長さの2乗に比例することです。また、並び順を区別しないので、Transformerでは位置エンコーディングで順序を補います。
周辺の用語との関係
クエリをデコーダ側、キーとバリューをエンコーダ側から作るものは、Source-Target Attentionです。Attentionを複数のヘッドに分けて並列に計算するのがMulti-Head Attentionです。
覚え方
「文の中で、探しもの(クエリ)を見出し(キー)と照合し、中身(バリュー)を集める」と覚えます。
G検定での出題
出題のされ方
クエリ・キー・バリューを同じ系列から作る点、RNNと違って全位置を並列に計算できる点、Source-Target Attentionとの違い、順序の情報をもたないため位置エンコーディングが必要になる点が問われます。
混同しやすい用語
| 用語 | 意味 |
|---|---|
| Self-Attentionこのページの用語 | 系列の各要素が同じ系列内のすべての要素との関連度を求め、その重みで情報を集めて文脈を反映した表現を作る仕組み |
| Source-Target Attention | 出力側の系列からクエリを、入力側の系列からキーとバリューを作るAttention |
◯×チェック
次の文が正しいか、誤りかを選んでください。
-
Self-Attentionでは、クエリ・キー・バリューの3つを、同じ1つの系列から作る。
答えを見る
答え ◯ 正しい
同じ系列の各要素に、それぞれ別の重み行列を掛けて3つを作ります。クエリとキー・バリューを別々の系列から作るのはSource-Target Attentionです。
-
学習を終えたSelf-Attentionでは、各要素がほかのどの要素にどれだけ注目するかの重みは、入力する文によらず一定である。
答えを見る
答え × 誤り
学習で固定されるのは、クエリ・キー・バリューを作るための重み行列です。注目の重みは入力のたびにクエリとキーから計算し直すので、文が変われば変わります。
-
系列の長さが2倍になると、Self-Attentionで関連度を計算する要素の組み合わせの数は、およそ4倍になる。
答えを見る
答え ◯ 正しい
すべての要素どうしの組み合わせを計算するため、計算量は系列の長さの2乗に比例します。長い文書を扱うときの課題です。
この用語の練習問題
出典
- G検定 試験出題範囲(シラバス2024)第1.4版 (技術分野 項目23 Attention)
- Ashish Vaswani et al., Attention Is All You Need (2017) (3.2 Attention / 4 Why Self-Attention)