brunch

9. 위치 임베딩(Positional Encoding)

2장 GPT의 기반 기술, Transformer란 무엇인가?

by AI개발자
gaebalai.com (44).png

텍스트 데이터에서 순서(order)는 매우 중요한 정보입니다. 예를 들어 "물리학"과 "학물리"을 글자 단위로 임베딩했다고 가정해 봅시다.

"물리학"은 자연과학의 한 분야를 의미하지만, "학물리"는 일상적으로 사용되지 않는 어색한 단어입니다. 즉, 글자의 순서가 드르면 의미가 완전히 달라집니다. 하지만. 머신러닝 모델에서 임베딩 벡터를 단순히 더하거나 곱하는 방식으로만 사용하면 순서 정보를 반영하지 못합니다. 예를 들어, 아래 그림처럼 두 단어의 임베딩 결과가 아래와 같다고 생각해 봅시다.

genai-059.jpg

이처럼 가중치의 각 성분이 동일하다면 (w1 = w2 = w3), 두 단어의 순서가 다르더라도 계산결과가 동일해집니다. 즉, 모델 입장에서는 "물리학"과 "학물리"가 같은 벡터로 표현되어 의미를 구분할 수 없게 됩니다.

genai-060.jpg 개념도 요약

순서 정보가 없으면 두 계산 결과는 구분되지 않습니다. 이를 해결하기 위해 위치 임베딩(Positional Encoding)이 도입되어, 각 토큰(글자)에 위치 정보를 더해주게 됩니다.

물론 가중치 W가 위치정보를 스스로 학습할 수도 있겠지만, 토큰의 의미와 위치가 뒤섞인 가중치로는 "3번째 위치에 오는 건 어떤 단어든 상관없이 동일한 패턴"이라는 기본적 성징을 보장하기 어렵습니다.


그래서 Transformer 논문에서는 학습없이도 위치 정보를 반영할 수 있는 위치 임베딩을 제안했고 이는 다음 삼각함수식으로 정의됩니다.

genai-061.jpg 식2-1/2-2

각 기호의 의미는 다음과 같습니다.

p: 토큰의 위치 인덱스 (1부터 시작)

dmodel: Transformer 모델의 임베딩 차원 수

i: 임베딩 벡터의 요소 인덱스 (0부터 시작)


이걸 직관적으로 보기 위해, 상수 10,000을 단순화해 10으로 바꾸고, dmodel = 4일 때를 예로 들어 봅시다.

이 경우, 위치 임베딩 행렬은 다음과 같이 됩니다.

genai-062.jpg 식2-3

세로방향(i): 임베딩 벡터의 각 성분 (4차원)

가로방향(p): 토큰의 위치(1번째, 2번째 등)


특정 위치 p를 지정하면 열벡터 PEp가 해당 위치의 임베딩 벡터가 됩니다. 특정 i를 지정한 행 벡터를 보면, 위치에 따라 주기적으로 진동하는 것을 확인할 수 있습니다. 즉, 위치가 변함에 따라 사인/코사인 파형의 주기에 따라 값이 바뀌는 구조입니다.


이 방식의 장점은 다음 2가지입니다.

1. 간단한 수식으로 위치마다 다른 임베딩을 만들 수 있습니다.

2. PEp+k가 PEp의 선형 결합(linear combination)으로 표현가능하기 때문에, 모델이 상대적인 거리 관계를 쉽게 파악할 수 있습니다.


여기서 상수 10,000은 파장의 길이(주기)를 조정하는 값입니다. 이 값이 너무 작거나 크면 위치 정보가 왜곡되므로, 원 논문에서는 dmodel = 512기준으로 10,000을 채택했습니다.


요약하자면, 위치 임베딩은 다음과 같은 개념으로 볼 수 있습니다.

genai-058-1.jpg 위치 임베딩의 개념도 (각 열은 하나의 위치벡터, 각 행은 짝수인덱스는 사인, 홀수 인덱스는 코사인 함수)

연습문제 2-1: PEp+k가 PEp의 선형 결합으로 표현될 수 있음을 증명하고, 왜 이런 구조가 모델이 상대적 위치 관계를 쉽게 이해하도록 돕는지 설명하십시오.



연습문제2-2: 위치 임베딩을 시각화하여, 각 성분이 어던 패턴으로 변하는지 직접 확인하십시오.


위치 임베딩은 토큰 임베딩

genai-063.jpg

과 더해져 사용됩니다.

2-4

이 식은 논문 본문에는 없지만 논문에는 아래와 같이 써 있습니다.

“In the embedding layers, we multiply those weights by √d_model.”

(임베딩 층에서는 가중치에

genai-065.jpg

을 곱한다.)

이는 토큰 임베딩과 위치 임베딩의 크기를 비슷한 수준으로 맞추기 위한 조정입니다. 실제로

genai-066.jpg

이므로, 두 벡터의 스케일이 유사합니다.


원 논문에서는 이를 간단히 언급만 하고 넘어가지만, 공식 구현 코드를 보면 실제로 아래와 같이 되어 있습니다.

입력은 토큰 임베딩 + 위치 임베딩 (스케일 조정 없음)

토큰 임베딩은 노름(norm)이 약 1이 되도록 초기화됨

모델이 읽을 때

genai-067.jpg

이 곱해짐

위치 임베딩은 논문 수식 그대로 구현됨


즉 2-4식 형태로 구현되어 있으며, 두 임베딩이 모델 내에서 비슷한 비중으로 작용하도록 설계되어 있습니다.


연습문제2-3: 토큰 임베딩의 노름(norm)이 위치 임베딩의 노름과 유사함을 직접 수치적으로 확인하십시오.


이 위치 임베딩은 학습이 필요없고 위치 정보를 잘 반영하기 때문에 원 논문에서 채택되었습니다. 하지만, 이후 연구에서는 토큰 임베딩처럼 위치 ID를 학습 가능한 임베딩으로 두는 방식도 제안되었습니다. 또한 절대 위치(absolute position)뿐만 아니라, 상대적 위치(relative position)정보를 반영하거나, 학습 시보다 긴 문장 길이(sequence length도 처리할 수 있도록 한 다양한 개선형 위치 임베딩이 등장했습니다.


2025년 기준으로 사실상 표준(de facto standard)이 된 방식은 나중에 6장에서 다룹니다.



©2024-2025 MDRULES.dev, Hand-crafted & made with Jaewoo Kim.

이메일문의: jaewoo@mdrules.dev


AI 에이전트 개발, 컨텍스트 엔지니어링 교육 컨설팅, 바이브코딩 강의 문의: https://bit.ly/4kjk5OB


keyword
이전 07화8. Transformer의 전체 구조