Positional Encoding
Positional Encoding은 순서 정보를 고려하지 않는 모델에 고유한 순서 정보를 부여하는 함수이다. 예컨대 attention은 구조 상 입력 단어의 순서를 이해할 수 없는데, 이것은 모델의 성능을 떨어뜨린다. 이를 해결하기 위해 단어 임베딩을 positional embedding과 연결하면 모델이 단어의 순서를 이해할 수 있다.
입력에 순서를 부여하는 가장 쉬운 방법은 각 위치를 정수로 표현하는 것이지만, 본질적으로 신경망은 정수를 다룰 수 없기 때문에, 이진 형식으로 정수를 인코딩하는 것이 positional encoding의 기본 아이디어이다. 예컨대 인 시퀀스 길이를 고려하면 다음과 같은 각 위치에 -차원 비트 벡터의 시퀀스를 얻을 수 있다.
가장 오른쪽 인덱스가 가장 높은 빈도로 꺼졌다 켜지는 반면 가장 왼쪽 인덱스(가장 큰 비트)는 가장 느리게 꺼졌다 켜지는 것을 볼 수 있다. (물론 기준을 바꿔서 가장 왼쪽 비트가 가장 빠르게 꺼졌다 켜지도록 할 수도 있다) 이것을 position 행렬 로 표현할 수 있다.
계수가 0이나 1인 기저 함수(2의 제곱에 해당하는)의 집합을 사용할 수 있지만, 다음과 같은 sinusoidal 기저를 사용하면 더 단순한 코드를 얻을 수 있다.
여기서 이고 최대 시퀀스 길이에 해당한다. 예컨대 이면 -번째 행은 다음과 같다.
positional encoding은 시퀀스의 뒤로 갈 수록 값이 커지도록 하는게 아니라, 전체 입력이 unique한 값을 갖도록 한다는데 주의하라.
이 표현의 이점은 2가지이다. 첫 째는 정수에서 벡터로 매핑하는 것을 배우는 것과 달리 임의의 길이의() 입력에 대해 계산 가능하다는 것이고, 두 번째는 하나의 위치의 표현이 그들의 연관된 거리의 지식이 주어지면 다른 것으로부터 선형으로 예측 가능하다는 것이다. 특히 을 갖는다. 여기서 는 선형 변환이다.
따라서 가 작으면 이 된다. 이것은 유용한 형식의 inductive bias를 제공한다.
positional embedding 를 한 번 계산하면 다음을 사용하여 원래 단어 임베딩 과 결합해야 한다.