He가 누구인지 이해하는 과정을 처음부터 따라가 보자
다음 문장에서 He가 누구를 가리키는지 모델이 이해하려고 합니다.
각 단어에서 Query, Key, Value를 만든다
같은 단어라도 Self-Attention 안에서는 세 가지 역할로 사용됩니다.
Query
현재 단어가 어떤 정보를 찾고 있는지 나타냅니다.
Key
각 단어가 자신이 어떤 역할인지 보여주는 비교 단서입니다.
New York: 장소 이름
Value
해당 단어가 선택되었을 때 실제로 전달할 정보입니다.
He의 Query를 문장 속 모든 Key와 비교한다
He가 누구를 가리키는지 찾기 위해, He의 Query를 Tom, New York, loves 등의 Key와 각각 비교합니다.
점수가 너무 커지지 않도록 크기를 조절한다
벡터가 길어지면 Query와 Key를 비교한 점수도 커지기 쉽습니다. 그래서 점수의 순서는 유지하면서 전체 크기만 적당히 줄입니다.
Scaling 전
Scaling 후
점수를 실제 참고 비중으로 바꾼다
Attention Score는 원점수입니다. Softmax를 사용하면 각 단어를 얼마나 참고할지 나타내는 비중으로 바뀝니다.
Attention Score
Attention Weight
각 단어의 Value를 비중에 따라 섞는다
Attention Weight가 정해졌다면, 각 단어의 실제 정보인 Value를 그 비중만큼 가져옵니다.
Value와 Weight
× 0.70
사람 정보를 많이 반영
× 0.20
장소 정보를 조금 반영
× 0.10
행동 정보를 아주 조금 반영
새로운 He의 표현
Tom의 정보가 가장 강하게 반영된 새로운 문맥 벡터가 만들어집니다.
이 벡터에는 He가 Tom을 가리킨다는 문맥이 담깁니다.
원래 He가 문맥을 이해한 새로운 He로 바뀐다
Self-Attention 전
He는 단독으로 보면 사람을 가리키는 대명사라는 일반적인 정보만 가집니다.
Self-Attention 후
같은 문장의 Tom을 참고해 이 문장에서 He는 Tom을 가리킨다는 문맥을 갖게 됩니다.
이 계산은 He 하나에서만 일어나지 않는다
문장 속 모든 단어가 같은 과정을 수행합니다. 각 단어는 자신만의 Query를 가지고 다른 모든 Key를 살펴봅니다.
단계별로 Self-Attention을 따라가 보자
아래 버튼을 눌러 계산 단계가 어떻게 이어지는지 확인해 보세요.
현재 문장
Q·K·V 만들기
He가 찾는 정보는 Query가 되고, 문장 속 각 단어는 비교용 Key와 전달할 Value를 가집니다.
Key: Tom은 사람 이름
Value: Tom의 실제 의미 정보
Self-Attention 전체 과정을 한 문장으로 정리
핵심 정리
- 각 토큰에서 Query, Key, Value를 만듭니다.
- 현재 토큰의 Query를 모든 토큰의 Key와 비교합니다.
- 비교 결과로 Attention Score가 만들어집니다.
- 점수가 너무 커지지 않도록 Scaling합니다.
- Softmax로 점수를 Attention Weight로 바꿉니다.
- Attention Weight에 따라 Value를 가중합합니다.
- 그 결과 현재 토큰의 새로운 Context Vector가 만들어집니다.
- 문장 속 모든 토큰이 이 과정을 수행합니다.