Part 6 · Self-Attention - When Every Word Looks at Every Other Word

모든 단어가 서로를 참고하기 시작하다

지금까지는 하나의 단어가 다른 단어를 찾아 참고하는 과정을 살펴보았습니다. 그러나 문장 전체를 이해하려면 특정 단어 하나만이 아니라 모든 단어가 저마다 필요한 정보를 찾아야 합니다. Self-Attention에서는 문장 속 각 단어가 자신의 Query를 만들고, 같은 문장에 있는 모든 단어의 Key와 비교합니다. 그 결과 각 단어는 주변 관계가 반영된 새로운 문맥 표현으로 다시 만들어집니다.

A Meeting Room Story

회의실에서는 한 사람만 듣지 않는다

다섯 사람이 회의실에 앉아 있다고 생각해 봅시다. 각 사람은 문장의 단어 하나를 맡고 있습니다.

Tom은 lives와 New York을 참고해 “누가 어디에서 사는가”라는 문맥 속 자신의 역할을 이해합니다.

회의에서 한 사람만 다른 사람의 말을 듣는 것은 아닙니다. 모든 사람이 필요한 사람의 말을 들으며 자신의 생각을 정리합니다.

Self-Attention도 같습니다. 문장 속 모든 단어가 다른 단어들을 참고해 자신의 의미를 다시 정리합니다.
From Meeting to Sentence

문장 속 모든 단어가 서로를 바라본다

Tom lives in New York today.

현재 단어

Tom이 자신의 문맥을 더 풍부하게 만들려고 합니다.

“나는 문장에서 어떤 역할을 하고 있지?”

Tom이 참고하는 단어

lives
0.78
New York
0.64
today
0.22
Tom은 혼자서는 단지 사람 이름일 뿐입니다. 하지만 lives와 New York을 참고하면 “New York에 사는 사람”이라는 문맥이 담긴 새로운 표현으로 바뀝니다.
The Same Process for Every Token

앞에서 배운 과정이 모든 단어에서 반복된다

Tom만 Attention을 수행하는 것이 아닙니다. lives, in, New York, today도 각각 자신의 Query를 만들고 문장 속 모든 Key와 비교합니다.

Query 만들기 무엇이 필요한가?
모든 Key와 비교 어떤 단어가 관련 있는가?
Attention Score 얼마나 잘 맞는가?
Softmax 얼마나 참고할까?
Value 가중합 새로운 문맥 표현
이 과정을 문장 속 모든 단어가 각각 수행합니다. 그래서 문장 전체의 단어 표현이 한 번에 새롭게 바뀝니다.
Before and After

원래 단어가 문맥을 가진 새로운 표현으로 바뀐다

Tom
New York에 사는 사람
lives
Tom과 New York을 잇는 행동
New York
Tom이 사는 장소
today
사는 시점을 설명하는 말
Self-Attention의 결과는 원래 단어 목록을 그대로 돌려주는 것이 아닙니다. 각 단어가 주변 문맥을 반영한 새로운 벡터 표현으로 바뀝니다.
Why “Self”?

왜 이름에 Self가 붙을까?

일반 Attention

한쪽 정보가 다른 쪽 정보에서 필요한 부분을 참고합니다.

예: 번역할 문장을 만들면서 입력 문장을 참고합니다.

Self-Attention

같은 문장 안의 단어들이 같은 문장의 다른 단어들을 참고합니다.

참고하는 쪽과 참고받는 쪽이 같은 입력 안에 있습니다.

Self는 “자기 자신만 본다”는 뜻이 아닙니다. 같은 문장 자체 안에서 서로를 참고한다는 뜻입니다.
RNN vs Self-Attention

순서대로 전달하는 방식과 서로 직접 참고하는 방식

RNN

단어를 앞에서 뒤로 순서대로 처리합니다.

Tom → lives → New York → today

앞의 정보가 중간 단계를 거쳐 뒤로 전달됩니다.

Self-Attention

모든 단어가 필요한 다른 단어를 직접 참고합니다.

Tom ↔ lives Tom ↔ New York lives ↔ New York today ↔ lives

멀리 떨어진 단어도 중간 단계를 거치지 않고 바로 연결됩니다.

Long-Distance Relationship

멀리 떨어진 단어도 바로 참고할 수 있다

The animal didn't cross the street because it was too tired.

it을 이해하려면 문장 앞쪽의 animal을 참고해야 합니다. 두 단어 사이에는 여러 단어가 있지만 Self-Attention에서는 바로 연결할 수 있습니다.

animal 문장 앞쪽
직접 참고 →
it 문장 뒤쪽
Self-Attention은 단어 사이의 물리적인 거리보다 문맥상 얼마나 관련 있는지를 중요하게 봅니다.
Interactive Sentence

단어를 선택해 참고 관계를 살펴보자

현재 단어를 선택하면 어떤 단어를 많이 참고하는지 확인할 수 있습니다.

현재 단어가 찾는 정보

참고하는 단어와 비중

What Happens Next?

모든 계산을 실제로 어떻게 한 번에 처리할까?

문장에 단어가 5개라면 각 단어가 5개의 Key를 비교합니다. 문장이 길어질수록 비교해야 할 관계는 빠르게 늘어납니다.

Transformer는 모든 Query, Key, Value를 행렬(Matrix)로 모아 GPU에서 한꺼번에 계산합니다.

다음 페이지에서는 Self-Attention의 전체 계산 흐름을 문장 하나를 따라가며 단계별로 정리합니다.

Summary

핵심 정리

  • Self-Attention에서는 문장 속 모든 단어가 다른 단어들을 참고합니다.
  • 각 단어는 Query를 만들고 모든 Key와 비교합니다.
  • Attention Score와 Softmax를 거쳐 참고 비중을 정합니다.
  • Value를 가중합해 각 단어의 새로운 문맥 벡터를 만듭니다.
  • 같은 문장 안에서 서로를 참고하기 때문에 Self-Attention이라고 부릅니다.
  • 멀리 떨어진 단어도 중간 단계를 거치지 않고 직접 참고할 수 있습니다.
  • 모든 단어의 계산은 행렬로 묶어 병렬 처리할 수 있습니다.