점수만으로는 아직 부족하다
앞장에서 He의 Query와 여러 Key를 비교해 다음과 같은 Attention Score를 얻었습니다.
Tom의 점수가 가장 크다는 것은 알 수 있습니다. 하지만 아직 Tom은 얼마나 많이 참고하고, 나머지는 얼마나 조금 참고해야 하는지 알 수 없습니다.
친구들의 추천을 참고하는 상황
세 친구에게 식당을 추천받았다고 생각해 봅시다. 세 사람의 추천이 모두 똑같이 믿을 만한 것은 아닙니다.
평소 맛집을 잘 찾습니다.
가장 많이 참고하고 싶습니다.
가끔 좋은 식당을 추천합니다.
어느 정도 참고합니다.
추천이 자주 빗나갑니다.
조금만 참고합니다.
실제로 결정하려면 별점보다 누구의 의견을 몇 퍼센트 참고할지 정하는 것이 편합니다.
점수를 참고 비율로 바꾸는 Softmax
Softmax는 여러 Attention Score를 받아 각 점수가 전체에서 차지하는 비중으로 바꿉니다.
9.0, 2.0, 1.0처럼 범위가 일정하지 않은 원점수입니다.
음수나 매우 큰 수도 나올 수 있습니다.
0.70, 0.20, 0.10처럼 실제 참고 비중으로 이해할 수 있습니다.
모든 값을 더하면 1이 됩니다.
Attention Score가 Attention Weight로 바뀐다
비율이 정해졌다면 이제 정보를 섞는다
Softmax는 각 단어의 참고 비중을 정했습니다. 이제 그 비중만큼 각 단어의 실제 정보인 Value를 가져옵니다.
단어별 Value와 Weight
× 0.70사람에 관한 정보를 많이 반영× 0.20장소 정보는 조금 반영× 0.10행동 정보는 아주 조금 반영새로운 문맥 표현
여러 Value를 비중에 따라 섞은 결과입니다.
Tom의 정보가 가장 강하게 반영되므로, He가 Tom을 가리킨다는 문맥을 담게 됩니다.
He를 이해하기 위한 Context VectorWeighted Sum은 재료를 비율대로 섞는 것과 비슷하다
비빔밥을 만든다고 생각해 봅시다. 모든 재료를 넣지만 같은 양으로 넣지는 않습니다.
재료의 비율
50%가장 많이30%두 번째로 많이15%조금5%아주 조금완성된 비빔밥
모든 재료가 들어가지만, 각 재료의 양에 따라 최종 맛이 결정됩니다.
단어를 섞는 것이 아니라 Value 벡터를 섞는다
Tom, New York, loves라는 글자를 직접 섞는다고 생각합니다.
각 단어에서 만들어진 Value 벡터를 서로 다른 비중으로 섞습니다.
점수가 바뀌면 참고 비중과 결과도 바뀐다
아래 상황을 선택해 보세요. Attention Score가 달라지면 Softmax 이후의 비중과 최종적으로 많이 반영되는 Value도 달라집니다.
Attention Score
Softmax 이후 Weight
이 계산은 한 단어에서만 일어나는 것이 아니다
지금까지는 He 하나가 다른 단어들을 참고하는 과정을 살펴봤습니다. 하지만 Self-Attention에서는 문장 속 모든 단어가 자신만의 Query를 가지고 같은 과정을 수행합니다.
핵심 정리
- Attention Score는 Query와 Key를 비교한 원점수입니다.
- Softmax는 여러 점수를 실제 참고 비중인 Attention Weight로 바꿉니다.
- Attention Weight는 모두 양수이며 전체를 더하면 1이 됩니다.
- 큰 점수는 큰 비중으로, 작은 점수는 작은 비중으로 변환됩니다.
- 각 Value에 Attention Weight를 곱한 뒤 모두 더하는 것이 Weighted Sum입니다.
- Weighted Sum의 결과는 현재 단어에 필요한 문맥이 담긴 새로운 벡터입니다.