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 방식

이 방식은 고정된 함수를 사용하여 각 위치에 대한 벡터를 생성합니다. 다음과 같이 계산됩니다:

  • 각 위치 pospos에 대해:
    PE(pos,2i)=sin(pos/100002i/d)PE(pos, 2i) = \sin(pos / 10000^{2i/d})
    PE(pos,2i+1)=cos(pos/100002i/d)PE(pos, 2i+1) = \cos(pos / 10000^{2i/d})
    여기서 pospos는 단어의 위치, ii는 임베딩 벡터 차원의 인덱스, dd는 임베딩 차원입니다. 이 방식은 모델이 거리 기반의 정보를 자연스럽게 학습할 수 있도록 합니다.

(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은 이렇게 계산됩니다:

  1. 입력 토큰들을 Embedding해서 벡터로 만듭니다.
  2. 각 벡터에 대해
    • Query (Q), Key (K), Value (V)를 만듭니다.
      (다 Linear Layer를 통해 만듭니다.)
  3. 그리고 Attention Score를 계산합니다:
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

여기서 핵심은
Q와 K를 내적해서 (QKᵀ)서로 얼마나 관련 있는지 스코어를 구한다는 것.

이 과정에서 Q, K는 각각 "토큰 내용"만 반영된 임베딩이라서,
"이 토큰이 문장에서 몇 번째였는지" 정보는 전혀 없습니다.

6. 순서를 고려하지 않는 이유: 내적(inner product) 때문

  • 내적은 두 벡터의 방향과 크기만 봅니다.
  • 내적 자체에는 "이 벡터가 문장에서 몇 번째였는지" 같은 정보가 반영되어 있지 않습니다.
  • 따라서 단순히 내적만 가지고는 토큰 간의 순서 정보는 완전히 무시됩니다.

결국, Self-Attention은 단어들끼리 얼마나 비슷한지만 볼 뿐, 어느 위치에 있는지는 모릅니다.

7. 그래서 필요한 것: Positional Encoding (PE)

바로 이 문제를 해결하려고,
"이 단어는 몇 번째였다"는 정보를 강제로 넣어주는 것Positional Encoding입니다.

  • 입력 토큰 embedding에 위치 정보를 인코딩한 벡터더해서 넣습니다.
  • 그러면 Q, K, V를 만들 때부터 위치 정보가 은근히 반영되기 시작합니다.
  • 이 덕분에 Attention Score도 "단순 의미 유사성"뿐 아니라,
    "위치 관계"까지 고려된 유사성을 반영할 수 있게 됩니다.

8. 요약

질문답변
Attention Score 계산 과정에서 순서를 고려하나요?아니요. 내적만 하기 때문에 순서를 고려하지 않습니다.
왜 순서를 못 보는 걸까요?Q, K, V가 단어 임베딩 기반이기 때문입니다. 위치 정보는 없어요.
그래서 뭘 해야 하나요?Positional Encoding으로 "위치"를 embedding에 직접 새겨넣습니다.
profile
AI developer

0개의 댓글