Self-Attention Score Matrix
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를 행 단위로 읽는다는 것은 무슨 뜻인가?