AI

[Positional Encoding] Transformer가 토큰의 위치 정보를 고려하는 방법

lungjae 2025. 2. 8. 18:29

Transformer와 같은 모델은 Input data를 병렬적으로 처리하므로, RNN, CNN처럼 Input data의 시퀀스를 자연스럽게 고려하지 않는다. 따라서 Input data의 각 토큰별 위치 정보를 고려하는 매커니즘을 추가적으로 고려해주어야하는데, 이게 Positional Encoding이다.

 

Positional Encoding을 통해 모델이 단어의 상대적인 위치와 절대적인 위치 모두 인지하고 고려할 수 있게된다.

 


 

Positional Encoding의 기본 아이디어

가장 널리 알려진 방식은, Sinusoidal 함수(sin, cos함수)를 통해 각 위치마다 고유한 패턴의 벡터를 생성하는 방식이다.

각 위치마다 서로 다른 주파수의 sin, cos값을 생성하여 모델이 위치 관계(토큰 간의 상대적인 거리 정보)를 고려하여 학습할 수 있도록 도와준다.

 

Ref: Attention is all you need

pos: 단어의 위치

i: 차원 인덱스

d_model: 모델의 Embedding 차원

 

sin, cos둘 중 하나만으로도 고유한 주기성 값을 만들어낼 수 있지만, 두 함수 모두 사용하는 이유는,

  • sin, cos은 서로 90도의 위상 차를 가지며, 이 위상 차이는 서로 보완적인 정보를 제공할 수 있도록 해주어 단일 함수만을 사용할때보다 더 다양한 패턴과 위치정보를 표현할 수 있게된다.
  • sin, cos함수는 서로 선형 독립적인 함수이므로, 두 함수를 모두 사용하면 각 위치에 대해 서로 중복되지 않는 고유한 Encoding을 생성할 수 있다.
  • 모델이 각 위치를 더 효과적으로 구분하고, 상대적인 위치 정보도 더 잘 포착할 수 있게된다.

 

 

정리해서 간단히 말하면,

  • Positional Encoding은 Input data에 순서 정보를 추가해주어, 모델이 문맥과 토큰 간의 관계를 이해할 수 있도록 돕는 핵심적인 기법이다.
  • sin, cos함수를 통해 각 위치마다 고유한 패턴을 부여하는 수식을 활용하여 위치 정보를 만들어주고 추가해준다.

(엔지니어 관점에서의)장점

  • 구현이 간단하다

학습해야하는 파라미터가 아니라 수학적인 함수만을 사용하여 값을 만들어내므로, 추가적인 학습 파이프라인이 필요한것이 아니다.

 

 

  • 일반화가 쉽고, 확장성이 좋다

모델이 Train 단계에서 보지 않은 시퀀스 길이에 대해서도 적절한 위치 정보를 제공해줄 수 있다.

Positional Encoding은 뭔가 학습을 통해 만들어내는 값이 아니기 때문에, 위치 임베딩값을 학습하는것이 아니다. 정해진 수식을 통해 각 위치별 값을 계산해내는 것이므로, Train 단계에서 보지 못했던 시퀀스이더라도 관계 없이 위치 값을 계산해내고, 고려할 수 있게 된다.

 

 

  • 효율적이다

단순히 임베딩이 더해지는 벡터이므로, 연산 비용이 크지 않고 모델 전체 구조에 있어 복잡성을 더하지 않는다.

 


유의할 점 및 생각해야하는 점

  • 일부 모델은 위치 정보를 학습 가능한 파라미터로 처리하기도 한다. 고정된 Sinusoidal 방식은 시퀀스 길이의 일반화(Train때보다 좀 더 긴 시퀀스에 대해서 잘 작동)를 기대할 때 유리하다.
  • 모델 내부에서 순서 정보를 어떻게 처리하는지 이해할 수 있게된다면, 순서 관련 문제가 발생했을 때 디버깅이나 모델을 개선할 때 도움이 된다(보이는게 많아지고 직접 개입해볼 수 있는 여지가 더 많이 생긴다(e.g. 필요에 따라 수식을 변경해보거나, 다른 형태의 Positional Encoding을 적용해보거나..))