Self-Attention Score Matrix

transformerattentionmatrix

Self-attention의 score는 Q와 K를 비교해서 만든다.

단순화를 위해 batch와 head를 잠깐 빼고 보면:

Q: [T, H]
K: [T, H]

각 query token은 모든 key token과 점수를 계산한다.

scores = Q K^T
scores: [T, T]

[T, T] 행렬은 token 간 참조 지도다.

scores[i, j]
  = i번째 token이 j번째 token을 얼마나 참고할지

예를 들어 5번째 token이 2번째 token을 강하게 참고해야 한다면 scores[5, 2]가 커진다.

행 단위로 읽기

Score matrix는 행 단위로 읽으면 좋다.

한 행 = 하나의 query token이 전체 key token을 보는 방식

각 행은 “이 token이 문장 안의 다른 token들을 얼마나 봐야 하는가”를 나타낸다.

그다음 score에는 보통 scaling과 softmax가 적용된다.

attention weights = softmax(scores / sqrt(H))

softmax 이후 각 행의 값은 합이 1에 가까운 가중치가 된다. 이제 이 가중치로 V를 섞을 준비가 끝난다.

확인

  • Q가 [T, H], K가 [T, H]이면 QK^T의 shape은 무엇인가?
  • scores[i, j]는 어떤 의미인가?
  • score matrix를 행 단위로 읽는다는 것은 무슨 뜻인가?