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)



키와 쿼리의 근사도를 얻기 위해 내적을 사용합니다.
다른 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 ❷――자연언어처리편

좋은 웹페이지 즐겨찾기