오늘은 머피의 머신러닝 1 15장에 있는 어텐션(Attention) 에 대해서 기술할 예정이다. 개인적으로는 최근 딥러닝 판도를 꽉 잡고 있는 transformer를 알기 위해서 꼭 알아야 하는 메커니즘이라고 생각한다.
참고: 머피의 머신러닝 1
1. attention이란
attention은 query(q), key(k), value(v) 3가지를 통해 연산이 이루어진다.
- query: 질문하고 싶은 벡터. 내가 궁금한 값이 여기에 해당하며, 쿼리에 가장 유사한 key, value를 찾는 것이 attention.
- key: query와 가장 유사한 key값을 찾는 것이 목표.
- value: 피쳐벡터. i번째 key값을 선택했다면 i번쨰 value값과 대응된다.
한 줄 요약을 하자면 'query와 유사한 key를 찾고, value 중 뭘 쓸지 retrival' 하는 과정이다. 기존 neural network는 피쳐벡터에 대해 연산할 때 hidden layer를 추가해서 Linear combination과 activation function(ex.ReLU)을 통한 nonlinearity를 챙기는 구조였지만, attention에선 피쳐벡터(v)의 k와 q를 같이 연산과정에 추가해 준다.
아래 그림은 어텐션 과정을 설명해준다. 주어진 query 벡터가 주어졌을 때 key들 중 어떤 key와 가장 유사한지 attention score를 매긴다. 그림에서 a로 표시된 attention scoring function을 통해 similarity를 계산한다. 이 과정에서 trans(q)*k가 나오게 되는데, q와 k의 내적(dot product)는 결국 cosine similarity를 구하는 것과 같다.
attention weight는 attention score를 softmax화 한 버전이다. 모든 attention score의 합이 1이 될 수 있도록 만들어준다. 이렇게 구한 attention weight를 통해 최적의 value값을 찾을 수 있다.
계산과정의 편의상(ex. key와 value 길이를 모두 동일하게 맞추고 시작하기) 또는 학습 과정에서 masked attention을 사용할 수 있는데, 이는 자연어 토큰에 padding을 추가하여 모든 문장의 길이를 맞춰주는 형태와 비슷하다. padding 하고 싶은 위치 i에 해당하는 attention score [i]에 -10**6와 같이 0에 수렴하는 굉장히 작은 수로 치환해 준다. 이를 masked attention이라고 한다.
2. parametric attention
parametric으로 구하기 위해선 key, value와 key, query간의 비교연산을 할 때 원활하게끔 key, value, query의 임베딩 길이가 고정되어 있어야 한다.
1. 첫번째 벡터 길이를 고정시키는 방법은 size가 h인 W와의 inner product다. query의 dim이 (n, q), key의 dim이 (m, k)였다고 가정해 보자. 이때의 q, k는 각 쿼리, 키의 길이가 된다. (n, m은 몇 개의 쿼리와 키값이 있는지가 되겠다.) attention score에서는 q와 k를 연산하고 싶어 하는데, 차원수가 다르니 어렵다. 그래서 W를 통해 q는 W_q q로, k는 W_k k로 치환해서 둘의 dimension을 맞춰준다.
- W_q로 q embedding dim 바꿔주기
- query (n,q) , W_q (h, q): W_q * trans(query) == (n, h)
- W_k로 key embedding dim 바꿔주기
- (m, k) (h, k) -> (m, k) (k, h) == (m, h)
이를 수식으로 나타내면 아래와 같으며, 이를 수식으로 나타내면 아래와 같다. (tanh와 value용 벡터가 추가된 모습이다.)
2. 아마 구현체로 설명되는 attention score는 이 두 번째 방법에 해당될 것이다. 그냥 query, key의 길이를 그냥 d로 통일시키는 것이다. k == q == d인 셈으로, 이러면 trans(q) k를 바로 계산할 수 있다! 이러한 scled dot-product attention 수식은 제법 익숙할 텐데, 분모에 루트 d가 위치하는 이유는 이 내적값의 평균이 0이고 분산이 d이기 때문이다.
2번 attention score를 적용해서 attention weight를 계산하면 다음과 같다. 이때 Q, K는 각각 (n,d), (m,d)의 dim이 된다.
3. 부록 - NLI
Natural Language Inference(NLI)는 최근 LLM의 hallucination 탐지용 모델에서도 사용되는 결과물이다. 이는 A와 B라는 문장이 있을 때, 두 문장이 entailment, contradict, neutral 관계인지 분류하는 텍스트 분류 모델을 의미한다. A와 B가 포함관계라면 entail, 두 문장이 상반된다면 contradict, 두 문장이 서로 관계가 있다면 neutral로 분류한다.
이를 seq2vec attention으로 수행할 수 있는데, key를 문장 A, query를 문장 B라고 생각해 보자. 둘의 attention weight를 e로 나타내면 다음과 같다.
value 자리에 B를 넣으면 attention score는 아래와 같을 것이다.
kernel을 사용한 nonparametric attention도 정의되어 있지만 학습셋 크기가 크거나 너무 Input dim이 큰 경우에는 사용하기 어려워서 parametric attention을 쓰는 것이 대세다. 오늘은 attention의 전반적인 설명을 해보았다. 한 번 이해하면 한동안 두고두고 잘 쓸 개념이라고 생각한다. 다음 글에서는 transformer를 다루어볼까 한다.
'머신러닝 > 아맞다' 카테고리의 다른 글
transformer의 모든 것 (0) | 2024.04.28 |
---|---|
PCA의 완벽한 이론 설명 (0) | 2023.10.29 |
Mutual Information 파헤치기 (0) | 2023.10.14 |
엔트로피와 KL Divergence (0) | 2023.10.08 |
linear regression의 완벽한 기초 수식 (0) | 2023.09.30 |