Transformer 모델에서 Positional Encoding (PE)은 입력 데이터의 순서를 모델이 인식할 수 있도록 하는 기법입니다. Transformer 모델은 순차적인 데이터를 처리하는 RNN이나 LSTM과 달리, 병렬 처리가 가능하고, 각 입력 토큰 간의 관계를 self-attention을 통해 처리합니다. 하지만 이런 처리 방식은 순서 정보를 본래 갖고 있지 않으므로, 순서를 명시적으로 전달해야 합니다. 이때 사용되는 것이 Positional Encoding입니다.
1. Positional Encoding의 목적
Transformer는 각 입력 토큰에 대해 단어 임베딩(embedding)을 사용하여 해당 단어의 의미를 숫자로 표현하지만, 단어의 순서에 대한 정보는 이 임베딩에 포함되지 않습니다. Positional Encoding은 각 입력 위치에 대한 고유한 벡터를 추가하여 각 토큰이 모델 내에서 어떤 위치에 있는지 알 수 있도록 합니다.
2. 방법
Positional Encoding은 보통 두 가지 방식으로 사용됩니다:
Sine and Cosine 함수를 사용하여 각 위치를 표현하는 방법.
Learnable Position Embeddings로, 훈련 가능한 위치 임베딩을 사용하는 방법.
(1) Sine and Cosine 방식
이 방식은 고정된 함수를 사용하여 각 위치에 대한 벡터를 생성합니다. 다음과 같이 계산됩니다:
각 위치 pos에 대해:
PE(pos,2i)=sin(pos/100002i/d)
PE(pos,2i+1)=cos(pos/100002i/d)
여기서 pos는 단어의 위치, i는 임베딩 벡터 차원의 인덱스, d는 임베딩 차원입니다. 이 방식은 모델이 거리 기반의 정보를 자연스럽게 학습할 수 있도록 합니다.
(2) Learnable Position Embedding
이 방식은 학습 가능한 파라미터로 위치 정보를 나타냅니다. 각 단어의 위치에 대해 별도의 임베딩 벡터를 할당하고, 이를 훈련 데이터에 따라 최적화합니다.
3. Positional Encoding의 활용
입력에 추가: 각 단어의 임베딩에 Positional Encoding 벡터를 더하거나, 합성하여 단어 임베딩 + 위치 정보를 모델에 입력합니다.
Self-Attention에 영향을 미침: 위치 정보가 포함된 임베딩 벡터를 사용하면, 모델은 각 토큰이 문장에서 차지하는 상대적인 위치에 따른 상호작용을 이해할 수 있습니다.
4. 장점과 한계
장점: Positional Encoding은 모델이 순서 정보를 이해할 수 있도록 하여, 자연어 처리(NLP), 이미지 처리 등 다양한 영역에서 중요한 역할을 합니다.
한계: 주로 고정된 방식으로 사용되기 때문에 문맥에 따라 더 복잡한 위치 정보를 학습할 수는 없다는 단점이 있을 수 있습니다. 이를 개선하기 위해 learnable positional encoding을 사용하는 방법도 등장했습니다.
이러한 방식으로 Positional Encoding은 Transformer 모델이 순서 정보가 중요한 문제를 해결할 수 있도록 돕습니다.
5. Transformer Attention: 어떻게 동작하나?
Transformer에서 Self-Attention은 이렇게 계산됩니다:
입력 토큰들을 Embedding해서 벡터로 만듭니다.
각 벡터에 대해
Query (Q), Key (K), Value (V)를 만듭니다.
(다 Linear Layer를 통해 만듭니다.)
그리고 Attention Score를 계산합니다:
Attention(Q,K,V)=softmax(dkQKT)V
여기서 핵심은 Q와 K를 내적해서 (QKᵀ) → 서로 얼마나 관련 있는지 스코어를 구한다는 것.
이 과정에서 Q, K는 각각 "토큰 내용"만 반영된 임베딩이라서, "이 토큰이 문장에서 몇 번째였는지" 정보는 전혀 없습니다.
6. 순서를 고려하지 않는 이유: 내적(inner product) 때문
내적은 두 벡터의 방향과 크기만 봅니다.
내적 자체에는 "이 벡터가 문장에서 몇 번째였는지" 같은 정보가 반영되어 있지 않습니다.
따라서 단순히 내적만 가지고는 토큰 간의 순서 정보는 완전히 무시됩니다.
결국, Self-Attention은 단어들끼리 얼마나 비슷한지만 볼 뿐, 어느 위치에 있는지는 모릅니다.
7. 그래서 필요한 것: Positional Encoding (PE)
바로 이 문제를 해결하려고, "이 단어는 몇 번째였다"는 정보를 강제로 넣어주는 것이 Positional Encoding입니다.
입력 토큰 embedding에 위치 정보를 인코딩한 벡터를 더해서 넣습니다.
그러면 Q, K, V를 만들 때부터 위치 정보가 은근히 반영되기 시작합니다.
이 덕분에 Attention Score도 "단순 의미 유사성"뿐 아니라, "위치 관계"까지 고려된 유사성을 반영할 수 있게 됩니다.