search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Attentionのメモ

Attentionの勉強

自分用のメモ かつ 記事を書く練習
間違ってても責任は取りません

Attentionの概要

Attentionの入力はQuery,Key,Valueの3つ.
ここではKey,Valueは行列,Queryはベクトルとして説明する.
(Queryが行列になってもQueryの各行に対して同じ計算をするだけ?)

Attentionの出力はValueらをアライメントベクトル$a_t$で加重平均をとることで求める.

$a_t$の各要素はそれぞれのKeyとQueryがどれだけ似ているかを表すため,AttentionはQueryと等しい(似ている)Keyに対応するValue(に近い値)を出力する.

そのため,Attentionは辞書のような役割を果たす.

d = { Key1 : Value1 , Key2 : Value2 ,... }
d[Query]

$a_t$の要素は各KeyとQueryを入力とするscore関数で求められる.
(但し,$a_t$の総和を1にしたいため$Softmax$を取る)

   a_{t}^{(i)} =Softmax\left(score\left(Key_{(i)},Query\right)\right)

Score関数の種類

score関数には色々種類がある.
Effective Approaches to Attention-based Neural Machine Translation

内積(dot)

KeyとQueryの近似度を求めるために内積を使う.
他のscore関数と比べ,速度・メモリ使用量に優れる.また,学習するパラメータがない.

score\left(Key^{(i)},Query\right)=Key_{(i)}^TQuery

Transformerは内積を使用している.TransfomerのAttention全体は以下の式で表される.

Attention(Query,Key,Value)=a_tV=Softmax\left(\frac{Key^TQuery}{ \sqrt{d_k}}\right)Value

$d_k$はQuery,Key,Valueの次元.
$d_k$が大きい時に行の積が大きくなり勾配が小さくなってしまう(?)ため,スケーリングする.

general

学習可能パラメータとして行列$W_a$を入れたもの

score\left(Key^{(i)},Query\right)=Key_{(i)}^TW_a Query

concat

score\left(Key^{(i)},Query\right)=v_a^T tanh\left( W_a Concat\left(Key_{(i)}^T,Query\right) \right)

GlobalとLocal

時系列のAttentionには,Key,Valueに入力する範囲によってGlobalとLocalに分けられる.
ここからは以下のSeq2Seqで考える.



AttentionにはKey,ValueとしてEncoderの隠れ状態hs,QueryとしてDecoderのLSTMセルの出力hが入力される.

Global Attention

AttentionのKey,ValueにEncoderが出力する隠れ状態をすべて入力する.
普通のAttention

Local Attention

隠れ状態のすべてでなく一部を,AttentionのKey,Valueとして入力する.
すべての隠れ状態をAttentionに入力するのは,段落や文書など長いシーケンスの場合には向かないため,Local Attentionでは一部の隠れ状態のみをAttentionに入力する.

$h_{p_t-D}$から$h_{p_t+D}$までの隠れ状態をKey,Valueとして入力する.
定数Dは経験的に決めておく.

Local Attentionは$p_t$の決め方等によって種類がある.

Monotonic alignment (local-m)

$p_t=t$とする方法.
出力シーケンスのt番目の要素は,単純に入力シーケンスのt番目の要素の周辺と対応していると仮定する方法.
アライメントベクトル$a_t$は先ほどの式で求める

Predictive alignment (local-p)

その都度,適切な$p_t$を求める方法.
この方法では$p_t$は 実数 として求める.
$p_t$は以下の式で求める.

$v_p$,$W_p$は学習可能なパラメータ.
$h$はAttentionのQueryとして入力されるDecoder側の隠れ状態.
$T$はEncoderに入力されるシーケンスの長さ.

p_t=S \times sigmoid\left(v_p^Ttanh\left(W_ph\right)\right)

また,アライメントベクトル$a_t$は以下の式で求める.
正規分布$N(p_t,\sigma^2)$を重みとしてかけていて,$p_t$により近い位置の単語に注意が向きやすくする.
$\sigma$は経験的に$\sigma=D/2$がいいらしい.

   a_{t}^{(i)} =Softmax\left(score\left(Key_{(i)},Query\right)\right)\times exp\left(-\frac{\left(i-p_t\right)^2}{2\sigma^2}\right)

参考文献

Effective Approaches to Attention-based Neural Machine Translation
Attention Is All You Need(Transformer)
ゼロから作るDeep Learning ❷――自然言語処理編

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0