본문 바로가기
AI/LLM

[Transformer] 트랜스포머 포지셔널 인코딩 (Positional Encoding) 쉽게 설명하기 📏

by 데이터 벌집 2024. 5. 30.

[Transformer] 트랜스포머 포지셔널 인코딩 (Positional Encoding) 쉽게 설명하기 📏

 

안녕하세요! 오늘은 Transformer 모델에서 사용하는 포지셔널 인코딩에 대해 쉽게 설명해드리겠습니다. 포지셔널 인코딩은 Transformer 모델이 입력된 단어들의 순서를 이해할 수 있도록 도와주는 중요한 개념입니다.

포지셔널 인코딩이 필요한 이유 🤔

기존의 순환 신경망(RNN)이나 LSTM 모델은 단어의 순서를 자연스럽게 이해할 수 있습니다. 왜냐하면 이 모델들은 단어들을 순차적으로 처리하기 때문입니다. 하지만 Transformer 모델은 병렬 처리가 가능하도록 설계되어 있어서 단어의 순서 정보를 따로 제공해줘야 합니다. 그렇지 않으면 단어들의 순서를 알 수 없게 됩니다.

포지셔널 인코딩이란? 📐

포지셔널 인코딩은 각 단어 벡터에 위치 정보를 더해주는 방식입니다. 이 정보를 통해 모델은 각 단어가 문장에서 어떤 위치에 있는지 알 수 있습니다. 포지셔널 인코딩은 주로 사인(sine)과 코사인(cosine) 함수를 사용하여 계산됩니다.

 

포지셔널 인코딩 예제 🌟

  1. 입력 문장: "I love to learn AI"
  2. 단어 임베딩 벡터: 각 단어를 벡터로 변환합니다.

"I"     -> [0.1, 0.2, 0.3]
"love"  -> [0.2, 0.3, 0.4]
"to"    -> [0.3, 0.4, 0.5]
"learn" -> [0.4, 0.5, 0.6]
"AI"    -> [0.5, 0.6, 0.7]

 


3. 포지셔널 인코딩 벡터: 각 단어의 위치에 따라 포지셔널 인코딩 벡터를 계산합니다.

 

Position 0 -> [sin(0), cos(0), sin(0), cos(0), ...]
Position 1 -> [sin(1), cos(1), sin(1), cos(1), ...]
Position 2 -> [sin(2), cos(2), sin(2), cos(2), ...]
Position 3 -> [sin(3), cos(3), sin(3), cos(3), ...]
Position 4 -> [sin(4), cos(4), sin(4), cos(4), ...]

 

4. 단어 임베딩 벡터 + 포지셔널 인코딩 벡터: 각 단어 벡터에 위치 벡터를 더합니다.

 

"I"     + Position 0 -> [0.1+sin(0), 0.2+cos(0), 0.3+sin(0), ...]
"love"  + Position 1 -> [0.2+sin(1), 0.3+cos(1), 0.4+sin(1), ...]
"to"    + Position 2 -> [0.3+sin(2), 0.4+cos(2), 0.5+sin(2), ...]
"learn" + Position 3 -> [0.4+sin(3), 0.5+cos(3), 0.6+sin(3), ...]
"AI"    + Position 4 -> [0.5+sin(4), 0.6+cos(4), 0.7+sin(4), ...]

 

예제의 자세한 계산 📊

예를 들어, "I"라는 단어와 위치 0의 포지셔널 인코딩을 계산해보면:

  • "I"의 임베딩 벡터: [0.1, 0.2, 0.3]
  • 위치 0의 포지셔널 인코딩 벡터: [sin(0), cos(0), sin(0)] = [0, 1, 0]

이 둘을 더하면:

 

[0.1 + 0, 0.2 + 1, 0.3 + 0] = [0.1, 1.2, 0.3]

 

또 다른 예로 "love"라는 단어와 위치 1의 포지셔널 인코딩을 계산해보면:

  • "love"의 임베딩 벡터: [0.2, 0.3, 0.4]
  • 위치 1의 포지셔널 인코딩 벡터: [sin(1), cos(1), sin(1)] = [0.84, 0.54, 0.84] (근사값)

이 둘을 더하면:

 

[0.2 + 0.84, 0.3 + 0.54, 0.4 + 0.84] = [1.04, 0.84, 1.24]

 

위와 같이 각 단어 벡터에 포지셔널 인코딩을 더하여 최종 입력 벡터를 생성합니다. 이를 통해 Transformer 모델은 단어의 순서 정보를 포함한 벡터를 입력으로 받아 학습할 수 있습니다.

 

 

포지셔널 인코딩은 Transformer 모델이 단어의 순서를 이해할 수 있도록 돕는 중요한 기술입니다. 각 단어 벡터에 위치 정보를 더해주어, 모델이 단어의 순서를 학습하고 더 정확한 문맥을 이해할 수 있게 합니다. 이렇게 함으로써, Transformer 모델은 순차적인 처리 없이도 문장의 구조와 의미를 효과적으로 파악할 수 있습니다.

 

이렇게 포지셔널 인코딩을 통해 단어의 위치 정보를 모델에 제공하여, 문장의 순서를 이해할 수 있게 합니다. 포지셔널 인코딩을 적용하면 Transformer 모델은 병렬 처리의 이점을 누리면서도 단어의 순서를 효과적으로 학습할 수 있습니다.