- Transformer 구조를 이해하기 전, 다양한 기법들에 대해 하나씩 작성해볼 예정
- 위치 정보를 입력하는 방법 중 하나인 Positional Encoding에 대해 알아볼 예정
- Transformer에는 위치 정보를 입력하기 위해 Positional Encoding 중 Sinusoida Encoding 방법을 사용함
Just count
- 숫자가 너무 빨리 증가하여 Weight가 커지고, gradient vanishing이나 gradient explosion 등 학습이 불안정
Noramlize the “Just count”
- x / (max len -1)
- 0~1 사이 값으로 안정적인 학습 but encoding vector의 길이가 다른 두 vector의 동일한 position 값이 다름
Using binary
- 0~1 사이 값 & 길이가 다른 encoding vector의 동일 위치 값이 같음
- But (0,0) → (0,1) [1] // (0,1) → (1,0) [$\sqrt2$] // (1,0) → (1,1) [1] ⇒ 동일 간격의 거리가 다름
Using continous binary vector
- -1 ~ 1사이를 연속적이고 부드럽게 움직이는 함수 ⇒ Sine 이용
- n차원 positional encoding ⇒ n개의 주기가 다른 sine 함수들로 vector encoding
- ⇒ 일정 step마다 positional vector가 동일해지는 경우 발생
- $y_1=sin(\frac{\pi}{2}x_i)$, $y_2=sin(\frac{\pi}{4}x_i)$, $y_3=sin(\frac{\pi}{8}x_i)$
- $x_i$=0 → (0,0,0) & $x_i$=8 → (0,0,0)
Sinusoidal Encoding
- 기존 방법은 주기가 $2^n$배이기에 발생한 문제 ⇒ $10000^{\frac{2k}{d}}$의 주기이므로 중복 문제 해결
- cosine함수를 함께 사용하면 Translation operator 정의 o ⇒ Transformer 내적에서 유용한 성질