Search
Duplicate

AI/ Attention

Attention

Attention은 기본적으로 입력에 context를 반영하는 방법이라고 볼 수 있다. 일반적인 신경망은 다음과 같이 고정된 가중치 행렬을 사용하는 모델을 사용한다. 여기서 가중치 W\bold{W}는 학습 후 고정되며 입력 X\bold{X}에 따라 변하지 않는다.
Z=φ(XW)\bold{Z} = \varphi(\bold{XW})
한편 Attention은 가중치가 입력에 의존하는 다음과 같은 형식을 말한다.
Z=φ(XW(X))\bold{Z} = \varphi(\bold{XW}(\bold{X}))
여기서 가중치 W\bold{W}는 입력에 따라 동적으로 계산되며, W(X)\bold{W}(\bold{X})는 일반적인 행렬 곱셈과 달리 입력에 맞춰 조정되는 곱셈 상호작용(multiplicative interaction)을 의미한다 (AI/ Multiplicative Interaction 참조). 단순히 입력의 벡터별로 가중치를 곱하는 것과 달리 W(X)\bold{W}(\bold{X})의 결과를 다시 입력 X\bold{X}와 곱하기 때문에 달리 입력 X\bold{X}의 전체 context가 결과에 반영된다.
일반적으로 사용하는 Attention에서는 위의 형식을 다음과 같이 정의한다.
Z=φ(VW(Q,K))\bold{Z} = \varphi(\bold{VW}(\bold{Q}, \bold{K}))
여기서 QRm×q\bold{Q} \in \mathbb{R}^{m \times q}는 query들의 집합(X\bold{X}에서 유도된)으로 각 입력이 ‘찾는(looking for)’것을 설명하고, KRm×q\bold{K} \in \mathbb{R}^{m \times q}는 key들의 집합(X\bold{X}에서 유도된)으로 각 입력 벡터에 포함된 것을 설명하고, VRm×v\bold{V} \in \mathbb{R}^{m \times v}는 value들의 집합(X\bold{X}에서 유도된)으로 각 입력이 어떻게 출력으로 전송되는지를 설명한다. (이러한 attention은 직관적으로 사전(dictionary)에서 검색(lookup)하는 것으로 생각할 수 있다.)
여기서 Q,K,V\bold{Q}, \bold{K}, \bold{V}는 각각 입력에 대한 선형 투영으로 계산한다.
Q=WqXK=WkXV=WvX\bold{Q} = \bold{W}_q\bold{X}\\ \bold{K} = \bold{W}_k\bold{X}\\ \bold{V} = \bold{W}_v\bold{X}
물론 Q,K,V\bold{Q}, \bold{K}, \bold{V}에 대한 입력을 별도로 하는 것도 가능하다. 예컨대 Q\bold{Q}에는 decoder의 출력을 사용하고 K,V\bold{K}, \bold{V}는 encoder의 출력을 사용할 수도 있다. 핵심은 입력에 context를 반영한 결과를 만드는 것이다.
attention을 사용하여 출력 zj\bold{z}_j를 계산할 때 먼저 해당하는 쿼리 qj\bold{q}_j를 키 kj\bold{k}_j와 비교하여 유사도 점수(similarity score) 0αij10 \le \alpha_{ij} \le 1를 (iαij=1)\sum_i \alpha_{ij} = 1) 얻은 다음 zj=iαijvi\bold{z}_j = \sum_i \alpha_{ij} \bold{v}_i를 계산한다. 이때 φ(u)=u\varphi(u) = u는 항등 함수라고 가정된다. 이러한 모델은 가중치 행렬 W\bold{W}가 아니라 투영 행렬 Wq,Wk,Wv\bold{W}_q, \bold{W}_k, \bold{W}_v을 학습하게 된다.

Interpretability

attention의 강점 중 하나로 해석 가능성을 꼽는다. 아래 그림과 같이 입력에 대한 attention heatmap을 찍어보면 마치 모델이 결과를 도출하기 위해 입력의 어느 영역에 attention 했는지를 설명하는 것처럼 보인다. 그러나 이러한 attention의 해석 가능성에 대해서는 논란이 많다.

참고