Part 7 · Transformer Architecture - Creating Position-Aware Representations

같은 단어도 위치에 따라 다른 표현이 된다

같은 단어라도 문장 속 위치가 달라지면 다른 역할을 할 수 있습니다. 의미 벡터와 위치 벡터를 결합하면 Transformer는 같은 단어라도 문장 안에서 어디에 있는지를 함께 고려하여 계산할 수 있습니다.

Continue the Story

벡터를 더하는 방법은 알았다. 그런데 위치가 달라지면?

T
“같은 단어라도 첫 번째 자리에 있을 때와 다섯 번째 자리에 있을 때는 서로 다른 위치 벡터를 더합니다.”

Part 1에서는 의미 벡터와 위치 벡터를 같은 자리끼리 더했습니다. 이제 위치가 바뀌면 최종 입력 벡터가 어떻게 달라지는지 확인해 보겠습니다.

Same Meaning, Different Position

같은 단어라도 위치가 다르면 최종 입력이 달라진다

같은 “문”이라는 토큰이 두 번 등장한다고 생각해 봅시다. 단어 자체가 같으므로 의미 벡터는 같습니다. 하지만 문장 속 자리가 다르면 서로 다른 위치 벡터가 더해집니다.

첫 번째 위치의 “문”
“문”의 의미 벡터
[0.31, 0.72, 0.18, 0.44]
+
1번째 위치 벡터
[0.10, 0.04, 0.32, 0.08]
최종 입력
[0.41, 0.76, 0.50, 0.52]
다섯 번째 위치의 “문”
“문”의 의미 벡터
[0.31, 0.72, 0.18, 0.44]
+
5번째 위치 벡터
[0.52, 0.19, 0.06, 0.27]
최종 입력
[0.83, 0.91, 0.24, 0.71]
의미 벡터는 같아도 위치 벡터가 다르면 합쳐진 결과가 달라집니다. 따라서 Transformer는 같은 단어가 문장의 어디에 나타났는지 구별할 수 있습니다.
Every Token Gets a Position

문장 속 모든 토큰에 각자의 위치 벡터를 더한다

한 단어에만 위치 정보를 더하는 것이 아닙니다. 문장 안에 있는 모든 토큰은 자신의 자리에 해당하는 위치 벡터를 받습니다.

1번째 문을
의미 벡터
+
1번째 위치 벡터
↓
최종 입력
2번째 열고
의미 벡터
+
2번째 위치 벡터
↓
최종 입력
3번째 불을
의미 벡터
+
3번째 위치 벡터
↓
최종 입력
4번째 켰다
의미 벡터
+
4번째 위치 벡터
↓
최종 입력
각 토큰은 서로 다른 위치 벡터를 받지만, 모든 토큰에서 계산 방식은 같습니다. 토큰의 의미 벡터 + 그 토큰 자리의 위치 벡터입니다.
Full Input Pipeline

토큰이 Transformer 입력이 되기까지

1. Token 문장을 토큰 단위로 나눕니다.
→
2. Embedding 각 토큰을 의미 벡터로 바꿉니다.
+
3. Position 각 자리의 위치 벡터를 더합니다.
→
4. Transformer Input 의미와 위치를 함께 가진 벡터가 됩니다.
위치 벡터를 단어 임베딩 뒤에 별도의 메모처럼 붙이는 것이 아닙니다. 두 벡터를 더해 크기가 같은 하나의 최종 벡터를 만듭니다.
Interactive Sentence

토큰을 선택해 의미 벡터와 위치 벡터를 확인해 보자

문장 속 토큰을 누르면 해당 토큰의 의미 벡터, 위치 벡터, 최종 입력 벡터가 표시됩니다.

의미 벡터

“문을”의 의미

+

위치 벡터

1번째 위치

=

최종 입력 벡터

의미와 위치가 합쳐진 결과

“문을”의 의미 벡터에 1번째 위치 벡터를 더했습니다.
The Vector Sizes Must Match

왜 두 벡터의 크기가 같아야 할까?

같은 자리의 숫자끼리 더하려면 두 벡터의 숫자 개수가 같아야 합니다. 의미 벡터가 4개의 숫자로 이루어져 있다면 위치 벡터도 4개의 숫자를 가져야 합니다.

의미 벡터

4칸 [0.21, 0.83, 0.55, 0.14]
+

위치 벡터

4칸 [0.08, 0.03, 0.41, 0.12]
실제 Transformer에서는 수백 개 또는 수천 개의 숫자를 사용할 수 있습니다. 숫자의 개수가 많아져도 두 벡터의 차원은 반드시 같아야 한다는 원리는 변하지 않습니다.
Three Things to Check

위치 벡터를 더할 때 확인할 세 가지

1

각 토큰마다 더한다

문장 속 모든 토큰이 자신의 위치 벡터를 받습니다.

2

같은 차원을 사용한다

의미 벡터와 위치 벡터의 숫자 개수가 같아야 합니다.

3

하나의 벡터가 된다

두 벡터를 따로 보내지 않고 더한 결과를 Transformer에 넣습니다.

Final Picture

Transformer가 실제로 받는 것은 ‘의미 + 위치’이다

단어의 의미 어떤 단어인지 알려주는 정보
+
문장 속 위치 몇 번째 자리에 있는지 알려주는 정보
=
최종 입력 벡터 의미와 위치가 합쳐진 표현
→
Self-Attention 이 벡터들을 사용해 단어 관계를 계산
Self-Attention은 단어의 의미만 보는 것이 아닙니다. 위치 정보가 더해진 입력 벡터를 사용하므로 어떤 단어가 문장의 어디에 있는지도 함께 고려할 수 있습니다.
Summary

78장 전체 핵심 정리

  • 단어 임베딩은 토큰의 의미를 담은 벡터입니다.
  • 위치 벡터는 토큰이 문장 안에서 몇 번째인지 나타냅니다.
  • 두 벡터는 같은 자리의 숫자끼리 더합니다.
  • 같은 단어라도 위치가 다르면 최종 입력 벡터가 달라집니다.
  • 문장 속 모든 토큰에 각자의 위치 벡터가 더해집니다.
  • Transformer는 의미와 위치가 합쳐진 벡터를 입력으로 받습니다.
다음 질문 위치마다 서로 다른 벡터가 필요하다는 것은 알았습니다. 그렇다면 Transformer는 수많은 위치를 구별할 수 있는 벡터를 어떤 규칙으로 만들 수 있을까요?