순환 신경망(RNN)은 토큰을 하나씩 순서대로 처리하는 순차 구조 덕분에, 별도의 장치 없이 자연스럽게 단어의 순서와 위치에 대한 미묘한 차이를 학습할 수 있었다. (단, 텍스트가 길어질수록 처리 시간이 선형적으로 증가하여 속도가 느리다는 단점이 있다.)
하지만, 일반적인 임베딩 층(Embedding Layer)은 문장 내 위치와 관련없이 같이 단어라면 항상 똑같은 벡터값을 내놓는다.

예를 들어, 'The fox jumps over the lazy fox.' 문장에서 첫 번째 'fox'와 두 번째 'fox'는 동일한 Token ID를 가지기 때문에, 동일한 임베딩 벡터로 변환된다.
(즉, 모델의 입장에서는 이 두 단어가 문장의 어디에 위치할지 구분할 방법이 없다. -> 위치 정보가 없기 때문)
이는 Transformer가 모든 토큰을 병렬 처리하기 때문에 발생한 문제이다.
(덕분에, 처리 대기 시간은 크게 줄어들지만 단어에 대한 순서 정보를 잃어버리는 것)
위치 인코딩 벡터
모델이 스스로 순서를 파악할 수 없기 때문에, 단어의 의미를 담은 토큰 임베딩 벡터에 단어의 위치 정보를 담은 위치 인코딩 벡터를 더해주는 방식을 사용하여 해결한다.
(이 방식을 이용하면, 위에서 등장한 같은 'Fox' 단어라도 위치에 따라 최종 입력값이 달라져 모델이 위치에 따른 차이를 구분할 수 있음)

위치 인코딩 구현 방법: 삼각 함수 기반
초기 Transformer 모델은 사인(Sin), 코사인(Cos) 같은 삼각 함수 공식을 사용해 위치별로 고정된 값을 만들어 합 했다.
(이를 절대 위치 임베딩 이라고 부르기도 함)
위치 인코딩 구현 방법: 학습 기반
최근 모델들은 복잡한 함수 대신, 위치 정보도 모델이 스스로 학습하도록 만든다.
토큰 임베딩 처럼 nn.Embedding Layer를 하나 더 만들어, 위치 벡터도 초기에는 난수로 두었다가 학습을 통해 최적의 값을 찾도록 한다.
* 이 경우, 토큰 임베딩과 위치 임베딩은 하나의 층을 공유하지 않는다.
(하나는 토큰의 의미를, 다른 하나는 위치 정보를 학습)
전체적인 과정을 그려보면 아래와 같아진다.

* 본 게시글은 밑바닥부터 만들면서 배우는 LLM 강의를 참고하여 작성되었습니다.
'Tech > LLM' 카테고리의 다른 글
| [LLM] 코절 어텐션과 멀티헤드 어텐션 (0) | 2026.01.02 |
|---|---|
| [LLM] 어텐션 메커니즘의 탄생 (0) | 2026.01.02 |
| [LLM] 슬라이딩 윈도우로 데이터 샘플링 (0) | 2025.12.27 |
| [LLM] 바이트 페어 인코딩(BPE) (0) | 2025.12.27 |
| [LLM] 특수 문맥 토큰 (0) | 2025.12.27 |
잘못된 정보가 있다면 말씀해주세요!