일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Ai
- 리눅스
- 공부
- 머신러닝
- torch
- Machine Learning
- essential deep learning paper reading
- pyTorch
- 일귀
- 리눅스 오류
- conda: command not found
- pytorch tensor
- 텐서
- conda오류
- anaconda오류
- Tensor
- conda
- ML
- stm32f 시리즈를 이용한 arm cortex-m3/m4 구조와 응용
- Today
- Total
Embedded World
Transformer - Multihead Attention의 'attention score'을 root(d_k)로 나눠주는 이유는? <수학적 접근> 본문
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 |
---|