Embedded World

Transformer - Multihead Attention의 'attention score'을 root(d_k)로 나눠주는 이유는? <수학적 접근> 본문

AI

Transformer - Multihead Attention의 'attention score'을 root(d_k)로 나눠주는 이유는? <수학적 접근>

jh-rrr 2021. 10. 16. 18:07

해결하고자 하는 문제

Transformer에서 Attention weight를 계산하는데 있어서 root{d_k} 로 나눠주는 이유에 대해 주어진 expectation & variance property 와query key vector의 component q, k의 mean, variance를 이용해 설명하세요.

이 때, E(Q) = 0, VAR(Q) = 1, E(V) = 0, VAR(V) = 1 로 정규화되어있다 가정한다.

(일단). 사용되는 hyperparameter 정리

<배치 차원은 고려하지 않음> (그래도 상관없음!)

Q : 쿼리 묶음 (d_k x S) = (d_model/head수 x Seq_length)*

q : 쿼리묶음중 하나의 쿼리벡터 (d_k x 1)

K : key (d_k x S)

 

 

<주석 설명>

1. (d_model/head수 x Seq_length)*   :  d_model은 attention의 임베딩 차원수(논문에선 512로함) / head수는 multi-head attention에서 사용하는 attention의 개수(논문에선 8개로함) / Seq_length 는 입력 문장의 길이

(우선). 큰 의미로의 이해

원래 질문인, 왜 root(d_k)로 나누어주지?? 보다 더 코어에 있는 질문인, "왜 root(d_k)라는 값을 사용해 attention score을 '더 작게' Scale을 하려는 걸까?" 에 대해 말해보자.

그 이유는 Neural Network 내부에 돌아댕기는 data가 정규분포를 따르지 않는 분포의 값이라면, (normalize가 되어있지 않다면) 후처리에서 값의 saturation이 일어나 성능을 떨어트릴 수 있기 때문이다.

 

그렇다면, 이제 원 질문인 왜 하필 root(d_k) 인지 크게크게 이해해보자.

 

발상 : 값들이 합쳐지는(+) 차원이 있다면, 거기서 값들이 더해져 그 수가 커져서 분포가 멀어지지 않을까?질문 : 그렇다면 그 차원은 뭘까?대답 : attention에서 일어나는 연산은 < query와 Key의 dot product >, <attention score의 softmax>, <Value와 attention value와의 곱>, <방금 언급한 벡터의 row wise merge> 인데, 이 중 차원이 합쳐지는 부분은 어디일까?

< query와 Key의 dot product > 랑 <방금 언급한 벡터의 row wise merge> 가 그 용의선상에 오를 수 있겠다.

 

질문 : 그렇다면 둘중 어디서 scale을 해줘야할까? 

대답 : 논문에 나와있듯, softmax 전인 attention score에서 이다.이유 : dot product가 되면서 VAR=1인 차원의 값들이 합쳐지기 때문이다. 아래에서 자세히 다뤄보자.

(다음). 수학적 접근으로의 이해

언제 다쓰냐 이걸...

 

결국, 어느 차원끼리 Variance 를 공유하는지를 구분할 수 있고, 기본적인 확률통계 지식이 있다면 쉽게 해결할 수 있는 문제이다.

'AI' 카테고리의 다른 글

Tensorflow Custom Loss Function 만들기  (0) 2023.10.18