Self-Attention
- 각 단어는 자신을 기준으로 다른 모든 단어와의 관계를 평가하고, 이를 통해 자신의 벡터 표현을 업데이트하는 메커니즘입니다.
- 이 과정은 입력 시퀀스의 모든 단어에 대해 반복되며, 최종적으로 각 단어는 문맥에 맞게 새롭게 표현된 벡터로 변환됩니다.
공식
Attention(Q,K,V)=softmax(dkQKT)V
Q,K,V
- 임베딩 벡터 행렬 (X):
- 입력 시퀀스의 각 토큰에 대한 임베딩 벡터들로 구성됩니다.
- 가중치 행렬 (W_Q, W_K, W_V):
- 각각 Query, Key, Value를 생성하기 위한 학습 가능한 파라미터입니다.
- 이 가중치들은 모델 훈련 과정에서 최적화됩니다.
- 선형 변환:
- Q=XWQ
- 각 토큰의 문맥적 관계를 포착할 수 있는 질문
- K=XWK
- V=XWV
KT
QKT
- 산출된 행렬(Attention Score)의 각 요소는 하나의 질문 벡터(Q의 행)와 하나의 응답 벡터(K의 행)의 내적값입니다.
- 이 내적값 행렬은 모든 토큰 쌍 간의 유사도/관련성을 나타냅니다.
- 내적이 클 수록 문맥적으로 더 연관되어 있습니다.dma
√dk
- key 벡터의 차원 수를 나타내며, 내적 값을 안정화하고 적절한 스케일로 조정하기 위해 제곱근을 나누어 줍니다.
- 멀티 헤드의 경우 dk = d_model / h
- 예: GPT-3은 96개의 head 사용
softmax
- 각 행의 값들을 확률 분포로 변환하여, 각 토큰에 대한 가중치를 결정합니다.
- 소프트맥스를 적용한 후, 각 행의 합은 1이 됩니다.
Self-Attention 과정 예시
- 입력 시퀀스: "blue fluffy creature"
- 편의상 토큰을 단어로 구분합니다.
1. 임베딩 및 Q, K, V 생성
- "blue", "fluffy", "creature"라는 단어들이 모델에 임베딩되어 각각의 벡터 표현으로 변환됩니다.
- 임베딩 벡터 X는 각 단어의 임베딩 표현입니다.
- 이 임베딩 벡터 X는 각각의 가중치 행렬(W_Q, W_K, W_V)과 곱해져 Query(Q), Key(K), Value(V) 벡터를 생성합니다.
2. Q와 K의 내적 계산
- Q와 K의 내적을 계산하여 각 단어 쌍 간의 유사도를 평가합니다.
- 이 내적은 모든 Query와 모든 Key 벡터 사이에서 계산되어 3x3의 유사도 행렬을 형성합니다.
예시:
Q_blue: "너는 얼마나 파란색과 관련이 있니?"
K_blue: "나는 파란색 그 자체예요." (높은 점수)
K_fluffy: "솜털은 파란색과 약간 관련이 있어요." (중간 점수)
K_creature: "생물은 색깔을 가질 수 있어요." (중간 점수)
Q_fluffy: "너는 얼마나 푹신함과 관련이 있니?"
K_blue: "파란색은 푹신함과 관련이 없어요." (낮은 점수)
K_fluffy: "나는 푹신함 그 자체예요." (높은 점수)
K_creature: "생물은 푹신할 수 있어요." (중간 점수)
Q_creature: "너는 얼마나 생물과 관련이 있니?"
K_blue: "파란색은 생물과 직접 관련이 없어요." (낮은 점수)
K_fluffy: "솜털은 생물일 수 있어요." (중간 점수)
K_creature: "나는 생물 그 자체예요." (높은 점수)
3. Softmax 적용
- 각 행에 대해 Softmax를 적용하여 확률 분포로 변환합니다.
- 각 Query 벡터에 대해 관련된 Key 벡터들의 중요도를 나타냅니다.
4. Attention 가중치 적용 및 새로운 벡터 생성
- Softmax 결과를 사용하여 각 Value 벡터와 곱합니다.
- 그 결과 각 Query에 대해 새로운 벡터 표현이 생성됩니다.
예시:
New_blue: 주로 파란색이면서, 생물체의 특성을 가지고 있고, 약간의 부드러운 질감을 가진 무언가
New_fluffy: 약간 파란색이고, 푹신하며,생물체의 특성을 가진 무언가
New_creature: 약간 파란색이고, 푹신하며, 생물체로서의 특성을 가진 무언가
참고 링크🔗
주의력, 트랜스포머의 마음 시각화하기 | 6장, 딥 러닝
딥러닝 트랜스포머 셀프어텐션, Transformer, self attention