Attention 메모
4583 단어 심층 학습AttentionDeepLearning
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 ❷――자연언어처리편
Reference
이 문제에 관하여(Attention 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kosukatsu/items/cf04e582a0844605347a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
d = { Key1 : Value1 , Key2 : Value2 ,... }
d[Query]
a_{t}^{(i)} =Softmax\left(score\left(Key_{(i)},Query\right)\right)
score\left(Key^{(i)},Query\right)=Key_{(i)}^TQuery
Attention(Query,Key,Value)=a_tV=Softmax\left(\frac{Key^TQuery}{ \sqrt{d_k}}\right)Value
score\left(Key^{(i)},Query\right)=Key_{(i)}^TW_a Query
score\left(Key^{(i)},Query\right)=v_a^T tanh\left( W_a Concat\left(Key_{(i)}^T,Query\right) \right)
p_t=S \times sigmoid\left(v_p^Ttanh\left(W_ph\right)\right)
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)
Reference
이 문제에 관하여(Attention 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kosukatsu/items/cf04e582a0844605347a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)