Attention은 Projection과 Score다

transformerattentionqkv

Attention은 한 번에 이해하려고 하면 복잡하다. 먼저 두 단계로 나누면 쉽다.

1. projection: 입력 x에서 Q, K, V를 만든다.
2. score: Q와 K를 비교해 어떤 token을 얼마나 볼지 정한다.

입력은 Transformer block으로 들어온 token 벡터들이다.

x: [B, T, D]

x에 서로 다른 weight를 곱해서 Q, K, V를 만든다.

Input X X[B=1, T=4, D=6]
Query Q[B=1, T=4, H=2, D=3] Q = X W_Q
Key K[B=1, S=4, H=2, D=3] K = X W_K
Value V[B=1, S=4, H=2, D=3] V = X W_V
Score S[B=1, H=2, T=4, S=4] 각 query token이 모든 key token을 보는 지도
Q와 K는 score matrix를 만들고, V는 다음 단계에서 이 score로 가중합될 정보가 된다.
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를 만드는 데 쓰이는가, 최종 정보를 섞는 데 쓰이는가?