Transformer: アテンションの計算式の意味を数理的に理解する
はじめに
Transformerにおけるアテンションの計算式は、scaleを無視すると以下のように計算される[1]。
この計算が数理的にどのような意味を持つのかについて考察する。
記法
- 以下の議論では、表記を簡単にするため、「Xの埋め込みベクトルのシーケンス」を単に「Xのシーケンス」と表現する。
考察
まず、式(1)の計算は以下の2つのパートに分割できる:
- アテンションスコアの計算
- 特徴量の選択
1. アテンションスコアの計算
とかける(
まずself-attentionの場合、
また、source-attentionの場合、
最後に、softmaxをとる。最終的な計算結果は、シーケンス中のどのトークンに注目すべきかを表す正規化されたスコア(全シーケンスで合計すると1になる)を表す。
2. 特徴量の選択
アテンションスコアを行列
Query, Key, Valueの名称の由来について
Query, Key, Valueの名称の由来について考察してみる。(3)式によると、
- 計算結果は
と同じ次元を持つQ - アテンションスコアはQとKの各行ベクトルのペアについての関係を表現する
- KとVの行ベクトルは1:1に対応している(添字が一致している)
- 計算結果はVの行ベクトルの線形結合で表される
という性質を持つので、
- 目的はQのそれぞれのトークンについての情報を取り出すこと
- KにはQの行ベクトルごとにVのどの行ベクトルに着目すればよいかの情報がエンコードされている(アテンションスコアはKとQの内積で計算する)。
- Vには最終的に出力として伝達する情報の材料(=ベクトルの基底)がエンコードされている
という解釈が成り立つ。
つまり、(3)式を一言で説明すると「Query(=問い合わせ)の各トークンに対応する、Value(=値)の重要度をKey(=鍵)を使って取り出し、Vの行ベクトルの線形結合として出力したもの」と解釈できる。
補足
- Q: XやYを直接入力せず、線形変換を作用させたものを入力するのはなぜか?
- A: 理由は2つある。
- 1つ目の理由は、トークンの埋め込み表現に対する依存度を下げるため。例えば、self-attentionにおいて、KとQにともにXを入力したとする。このとき、アテンションスコアは単なるXの行ベクトルどうしの内積、すなわち類似度に近い指標となるが、これだとアテンションに「似た意味の(=埋め込みが近い)トークンに注意を向ける」という機能しか持たせることができない。線形変換を作用させることで、元のトークンの埋め込みベクトルとは異なる空間にマッピングされるため、元のトークンの埋め込み表現に対する依存度を下げる効果がある。
- 2つ目の理由は埋め込みベクトルの次元を変換したいため。テキスト[1:1]では
の写像となっている。トークンの埋め込みベクトルの次元とアテンションを計算する際の埋め込みベクトルの次元は一致している必要はない。これは例えば、次元を削減することでアテンションヘッドを増やしても計算量を一定に保つ効果がある。テキストでは512次元->64次元に圧縮している。\mathbb{R}^{d_\text{model}} \rightarrow \mathbb{R}^{d_k}
- A: 理由は2つある。
- (3)式はQの行ベクトルどうしの関係は表現しないことに注意。したがって、デコーダにおいてself-attentionとsource-attentionのモジュールがそれぞれ必要になる。source-attentionモジュールはQすなわちデコーダの入力シーケンス中のトークンどうしの関係は記述できないからである。
-
https://nlp.seas.harvard.edu/2018/04/03/attention.html ↩︎ ↩︎
-
ここで扱われているattentionはdot productによるattentionで、以下の論文で紹介されている: Effective Approaches to Attention-based Neural Machine Translation ↩︎
Discussion