Part 6 · Self-Attention - Building a New Contextual Representation

하나의 단어가 문맥 표현으로 바뀌는 과정

Query, Key, Value와 Attention Score, Softmax, Weighted Sum은 서로 떨어진 계산이 아닙니다. 하나의 단어가 문장 속 다른 단어들과의 관계를 확인하고, 필요한 정보를 모아 새로운 표현으로 바뀌는 하나의 연속된 과정입니다. 입력 벡터에서 Query·Key·Value를 만들고, 관련성을 계산해 가중치로 변환한 뒤, 여러 Value를 결합하면 문맥이 반영된 새로운 벡터가 완성됩니다. 이제 Self-Attention의 전체 흐름을 한 단계씩 연결해 봅니다.

One Story from Start to Finish

He가 누구인지 이해하는 과정을 처음부터 따라가 보자

다음 문장에서 He가 누구를 가리키는지 모델이 이해하려고 합니다.

Tom lives in New York. He loves the city.
Q·K·V 만들기각 단어의 세 역할
Q와 K 비교Attention Score
점수 조절Scaling
비중으로 변환Softmax
Value 섞기Weighted Sum
새 표현 완성Context Vector
Self-Attention은 새로운 계산 하나가 아니라, 앞에서 배운 여러 단계를 순서대로 연결한 전체 과정입니다.
Step 1 · Create Q, K, V

각 단어에서 Query, Key, Value를 만든다

같은 단어라도 Self-Attention 안에서는 세 가지 역할로 사용됩니다.

Q

Query

현재 단어가 어떤 정보를 찾고 있는지 나타냅니다.

He: “나는 누구를 가리키는 말일까?”
K

Key

각 단어가 자신이 어떤 역할인지 보여주는 비교 단서입니다.

Tom: 사람 이름
New York: 장소 이름
V

Value

해당 단어가 선택되었을 때 실제로 전달할 정보입니다.

Tom이라는 사람의 의미와 문맥 정보
Query, Key, Value는 서로 다른 단어 세 개가 아닙니다. 각 단어에서 만들어지는 세 가지 역할의 벡터입니다.
Step 2 · Compare Query and Keys

He의 Query를 문장 속 모든 Key와 비교한다

He가 누구를 가리키는지 찾기 위해, He의 Query를 Tom, New York, loves 등의 Key와 각각 비교합니다.

Tom
9.0
New York
2.0
loves
1.0
비교 결과로 나온 숫자가 Attention Score입니다. 점수가 클수록 현재 단어와 더 관련 있다는 뜻입니다.
Step 3 · Scale the Scores

점수가 너무 커지지 않도록 크기를 조절한다

벡터가 길어지면 Query와 Key를 비교한 점수도 커지기 쉽습니다. 그래서 점수의 순서는 유지하면서 전체 크기만 적당히 줄입니다.

Scaling 전

Tom
40
New York
12
loves
8

Scaling 후

Tom
5.0
New York
1.5
loves
1.0
Scaling은 중요한 단어를 바꾸는 과정이 아니라 Softmax가 안정적으로 작동하도록 점수 크기를 조절하는 과정입니다.
Step 4 · Apply Softmax

점수를 실제 참고 비중으로 바꾼다

Attention Score는 원점수입니다. Softmax를 사용하면 각 단어를 얼마나 참고할지 나타내는 비중으로 바뀝니다.

Attention Score

Tom
9.0
New York
2.0
loves
1.0

Attention Weight

Tom
0.70
New York
0.20
loves
0.10
이제 모델은 Tom의 정보를 가장 많이, New York은 조금, loves는 아주 조금 참고하겠다는 비중을 얻었습니다.
Step 5 · Weighted Sum

각 단어의 Value를 비중에 따라 섞는다

Attention Weight가 정해졌다면, 각 단어의 실제 정보인 Value를 그 비중만큼 가져옵니다.

Value와 Weight

Tom × 0.70 사람 정보를 많이 반영
New York × 0.20 장소 정보를 조금 반영
loves × 0.10 행동 정보를 아주 조금 반영
→

새로운 He의 표현

Tom의 정보가 가장 강하게 반영된 새로운 문맥 벡터가 만들어집니다.

이 벡터에는 He가 Tom을 가리킨다는 문맥이 담깁니다.

글자 자체를 섞는 것이 아닙니다. 각 단어가 가진 Value 벡터를 비중에 따라 섞는 것입니다.
Step 6 · A New Context Vector

원래 He가 문맥을 이해한 새로운 He로 바뀐다

Self-Attention 전

He는 단독으로 보면 사람을 가리키는 대명사라는 일반적인 정보만 가집니다.

Self-Attention 후

같은 문장의 Tom을 참고해 이 문장에서 He는 Tom을 가리킨다는 문맥을 갖게 됩니다.

Self-Attention의 목적은 중요한 단어 하나를 고르는 데서 끝나지 않습니다. 현재 단어를 문맥이 반영된 새로운 벡터로 바꾸는 것이 최종 목적입니다.
Every Token Does the Same

이 계산은 He 하나에서만 일어나지 않는다

문장 속 모든 단어가 같은 과정을 수행합니다. 각 단어는 자신만의 Query를 가지고 다른 모든 Key를 살펴봅니다.

Tom
lives 참고 New York 참고 Value 가중합
New York에 사는 사람
lives
Tom 참고 New York 참고 Value 가중합
Tom과 장소를 잇는 행동
New York
Tom 참고 lives 참고 Value 가중합
Tom이 사는 장소
He
Tom 참고 문장 앞부분 참고 Value 가중합
Tom을 가리키는 대명사
결과적으로 문장 속 모든 토큰이 주변 문맥을 반영한 새로운 토큰 표현으로 바뀝니다.
Interactive Walkthrough

단계별로 Self-Attention을 따라가 보자

아래 버튼을 눌러 계산 단계가 어떻게 이어지는지 확인해 보세요.

현재 문장

Tom lives in New York. He
Q·K·V 만들기
Q와 K 비교
점수 크기 조절
참고 비중 만들기
Value 가중합
새 Context Vector

Q·K·V 만들기

He가 찾는 정보는 Query가 되고, 문장 속 각 단어는 비교용 Key와 전달할 Value를 가집니다.

Query: “나는 누구를 가리키지?”
Key: Tom은 사람 이름
Value: Tom의 실제 의미 정보
Self-Attention의 첫 단계는 각 단어에서 Query, Key, Value를 만드는 것입니다.
The Complete Flow

Self-Attention 전체 과정을 한 문장으로 정리

각 단어에서 Query, Key, Value를 만들고, Query와 모든 Key를 비교해 Attention Score를 계산한 뒤, 점수를 Scaling하고 Softmax로 참고 비중을 만들며, 그 비중으로 Value를 가중합해 새로운 문맥 벡터를 만든다.
실제 Transformer에서는 이 계산을 단어별로 하나씩 반복하지 않습니다. 모든 Query, Key, Value를 행렬로 묶어 한꺼번에 계산합니다. 하지만 원리는 지금까지 따라온 한 단어의 과정과 같습니다.
Summary

핵심 정리

  • 각 토큰에서 Query, Key, Value를 만듭니다.
  • 현재 토큰의 Query를 모든 토큰의 Key와 비교합니다.
  • 비교 결과로 Attention Score가 만들어집니다.
  • 점수가 너무 커지지 않도록 Scaling합니다.
  • Softmax로 점수를 Attention Weight로 바꿉니다.
  • Attention Weight에 따라 Value를 가중합합니다.
  • 그 결과 현재 토큰의 새로운 Context Vector가 만들어집니다.
  • 문장 속 모든 토큰이 이 과정을 수행합니다.