본문 바로가기
[AI]/인공지능 이론 및 실습

[인공지능] Positional Encoding이란? Positional Encoding을 사용하는 이유

by seom-j 2024. 3. 9.

 

📌 기존 Attention 병렬 연산

연산 처리를 위와 같이 병렬로 한번에 처리할 경우, 효율적인 연산이 가능했음

 

[ 🚨 ]

기존 RNN 계열의 모델의 경우 시간 순서대로 학습을 진행하기에 상관이 없었으나,

Transformer 모델에서 문장을 한번에 처리하자 단어 간의 순서가 반영되지 않는 문제점 발생

 

언어는 시계열 데이터이기 때문에 문장에서 순서는 해석에 큰 영향을 끼침

ex) 나는 고기를 먹었다 ≠ 고기는 나를 먹었다

 

➡️ 각 단어 임베딩에 순서가 들어간 정보를 더해줌

 

 

📌 Positional Encoding

위와 같이 positional embedding 수행

 

이때, Positional Encoding에는 몇가지 조건이 존재

  1. 모델의 효율적인 학습을 위해 스케일이 어느정도 범위 내에 있어야 함
  2. input data의 크기에 상관 없이 output을 도출해야 함

 

➡️ 주기함수이기에 x값에 상관 없이 output(-1 ~ 1사이의 값)을 도출할 수 있는 삼각함수 도입

 

[ 🚨 ]

그러나 이러한 주기함수의 치명적인 단점은 y값이 주기적으로 반복되어 정보가 겹쳐짐

 

➡️ sin, cos 함수를 모두 사용하고 각 embedding의 차원별로 sin, cos함수를 번갈아 사용

위와 같이 차원이 짝수이면 sin, 홀수이면 cos함수를 사용하여 positional encoding 작업 수행

 

 

📌 Positional Encoding 예시

“나는 고기를 먹었다”라는 문장이 존재할 때,

“나는”, “고기를”, “먹었다”의 세 단어로 나뉨

 

각 단어들의 차원을 d라고 하고, 여기서의 d = 4라고 정의함

여기서 차원의 순서를 i라고 했을 때, 각 단어별 i의 값은 1부터 4까지가 됨

position은 0부터 시작하며 이 문장의 경우 “나는”은 0, “고기를”은 1, “먹었다”는 2로 정의됨

 

위 공식에 이 값들을 대입하여 positional encoding을 수행할 경우,

위와 같은 연산 결과가 나오는 것을 확인할 수 있음