Attention은 Projection과 Score다
Attention은 한 번에 이해하려고 하면 복잡하다. 먼저 두 단계로 나누면 쉽다.
1. projection: 입력 x에서 Q, K, V를 만든다.
2. score: Q와 K를 비교해 어떤 token을 얼마나 볼지 정한다.
입력은 Transformer block으로 들어온 token 벡터들이다.
x: [B, T, D]
이 x에 서로 다른 weight를 곱해서 Q, K, V를 만든다.
X[B=1, T=4, D=6] Q[B=1, T=4, H=2, D=3] Q = X W_Q K[B=1, S=4, H=2, D=3] K = X W_K V[B=1, S=4, H=2, D=3] V = X W_V S[B=1, H=2, T=4, S=4] 각 query token이 모든 key token을 보는 지도 Q = x W_Q
K = x W_K
V = x W_V
직관적으로는 이렇게 볼 수 있다.
Q: 내가 찾고 싶은 것
K: 내가 가진 표지판
V: 실제로 가져올 정보
예를 들어 어떤 token이 “이전 문장에서 주어가 무엇이었지?”를 찾고 있다면, 그 token의 Q는 관련 token의 K와 높은 점수를 가져야 한다. 점수가 높으면 그 token의 V가 더 많이 섞인다.
왜 Q, K, V를 따로 만들까
같은 입력 x에서 출발하지만 역할이 다르기 때문이다.
Q/K는 어디를 볼지 정하는 데 쓰인다.
V는 실제로 섞일 정보다.
이 분리가 attention의 핵심이다. 먼저 Q와 K로 참조 관계를 만들고, 그 관계를 사용해 V를 섞는다.
확인
- Attention을 두 단계로 나누면 무엇과 무엇인가?
- Q와 K는 주로 어떤 계산에 쓰이는가?
- V는 score를 만드는 데 쓰이는가, 최종 정보를 섞는 데 쓰이는가?