Attention Is All You Need: Position Encoding과 추가 기법들
1. 차원은 한 row(행)에 대한 여러 column(열)이다
벡터의 고유성을 이해하기 위해 차원에 대해서 저는 다음과 같이 생각했습니다.
"각 차원이 독립된 평행세계처럼 동작한다”
정확하게 말하자면 차원은 평행세계라기보다 하나의 위치를 각기 다른 정밀도(차원)로 측정하는 '측정 도구' 모음이라고 합니다.
예컨대, 이를 Attention 논문에 나오는 Position Encoding에 대입해보면:
저차원(0, 1번 등): 주기가 짧은 sin/cos 함수. 눈금이 촘촘한 **'밀리미터(mm) 자'**처럼 바로 옆 단어와의 미세한 차이를 구분해 줍니다.
고차원(510, 511번 등): 주기가 매우 긴 sin/cos 함수. 눈금이 큼직한 **'킬로미터(km) 자'**처럼 멀리 떨어진 단어와의 거시적인 관계를 알려줍니다.
결국 하나의 포지션 벡터는, 수백 개의 각기 다른 자로 한 위치를 동시에 측정한 값들의 집합입니다. 이 다양한 측정값의 조합 덕분에 모델은 위치를 종합적이고 풍부하게 이해할 수 있게 됩니다.
2. Position Encoding으로 만들어진 두 벡터는 완전히 같은 벡터만 아니면 된다
Position Encoding의 첫 번째 목표는 각 단어의 위치에 고유한 '주소'를 부여하는 것입니다.
이 목표를 달성하기 위해서는 서로 다른 위치(pos1, pos2)의 Position Encoding 벡터(PE(pos1), PE(pos2))가 전체적으로 다르기만 하면 된다는 점이었습니다.
512개의 모든 좌표값이 전부 다를 필요는 없었고, 단 하나라도 달라서 두 벡터가 다른 점을 가리키게 만들면 충분합니다.
3. [증명 1] Position Encoding 증명: 두 위치의 벡터가 같은가?
증명 방법 : 귀류법 (Proof by Contradiction)
1. 가정 (Assumption)
서로 다른 두 위치 pos1와 pos2 (pos1=pos2)에 대해, 두 Position Encoding 벡터가 동일하다고 가정합니다.
위치 차이를 k=pos2−pos1 (k는 0이 아닌 정수)라고 둡니다.
2. 조건 도출 (Deriving the Condition)
벡터가 동일하려면 모든 차원(i)에서 그 값이 같아야 합니다. 파장의 역수를 나타내는 항을 다음과 같이 정의합니다.
wi=100002i/dmodel1
이때, 모든 i에 대해 다음이 성립해야 합니다. 두 삼각함수 값이 동시에 같으려면, 두 각의 차이가 2π의 정수배여야 합니다.
wipos1+k−wipos1=wik=2πni(단, ni는정수)
3. 모순 발견 (Finding the Contradiction)
위 조건은 모든 차원 i에 대해 성립해야 하므로, 임의의 서로 다른 두 차원 i와 j에 대해서도 성립해야 합니다. 양변을 정리하여 정수 ni,nj의 비율을 구하면 다음과 같습니다.
ninj=wiwj=10000dmodel2(j−i)
여기서 모순이 발생합니다.
좌변 (ninj): 0이 아닌 두 정수의 비율이므로 반드시 유리수입니다.
우변: 밑이 정수이고 지수가 유리수인 이 값은 일반적으로 무리수입니다.
(유리수) = (무리수) 라는 등식은 성립할 수 없으므로, 명백한 모순입니다.
Note: 근사값으로 대체해서 같은 값이 나올 수도 있지만, 이는 극단적으로 낮은 확률입니다.
4. 결론 (Conclusion)
초기 가정이 모순으로 귀결되므로, 가정은 거짓입니다. 따라서 서로 다른 두 위치 pos1와 pos2의 Position Encoding 벡터 PE(pos1)와 PE(pos2)는 절대로 같을 수 없습니다.
4. [증명 2] 다른 포지션 - 같은 차원 값의 일치 여부
증명 대상 :pos1=pos2일 때, 특정 차원 j에 대해 PE(pos1,j)=PE(pos2,j)이다. 증명 방법 : 귀류법 (Proof by Contradiction)
1. 가정 (Assumption)
pos1=pos2인 두 위치에 대해, 특정 차원 j의 값이 같다고 가정합니다. k=pos2−pos1 (k는 0이 아닌 정수)라고 둡니다.
2. 모순 도출 (Deriving Contradiction)
함수를 fj(pos)=PE(pos,j)라고 할 때, 가정은 fj(pos1)=fj(pos1+k)입니다. 삼각함수의 성질에 의해 다음 두 가지 경우 중 하나여야 합니다.
Case 1: 주기의 정수배 차이 wjk=2πn k=2πnwj
Case 2: 대칭성 (Sine 함수 기준) wjpos1=π−wjpos1+k+2πn 2pos1+k=(무리수포함항)
위 모든 경우에서 등식의 좌변(k 또는 2pos1+k)은 정수입니다. 하지만 우변은 초월수인 π를 포함하므로 무리수입니다.
(정수)=(무리수)
라는 명백한 모순이 발생합니다.
3. 결론 (Conclusion)
초기 가정이 거짓이므로, 같은 차원에서는 서로 다른 두 위치의 값이 절대로 같을 수 없습니다.
5. [증명 3] 다른 포지션 - 다른 차원 값의 일치 여부
증명 대상 :pos1=pos2이고 j=k일 때, PE(pos1,j)=PE(pos2,k)인 경우가 존재할 수 있다. 증명 방법 : 구성적 증명 (Constructive Proof) - 해의 존재를 보입니다.
1. 목표 설정 (Goal)
우리는 아래 등식을 만족하는 정수 해 (pos1,pos2)가 존재하는지 확인하면 됩니다.
sin(wj⋅pos1)=sin(wk⋅pos2)
2. 해의 존재 증명 (Proof of Existence)
값의 범위 (Range):sin 함수와 cos 함수의 치역(range)은 모두 [-1, 1]로 동일합니다.
임의의 값 선택:sin(pos₁/w_i) 함수를 생각해 봅시다. pos1이 정수 값을 가지며 변할 때, 이 함수의 결과값은 [-1, 1] 사이의 수많은 값을 만들어냅니다. 예를 들어, pos1=1,i=0일 때, C=sin(1)≈0.841 이라는 특정 값을 생성할 수 있습니다.
사이값 정리 (Intermediate Value Theorem): 이제 g(y)=sin(wk⋅y)라는 함수를 봅니다. 이 함수는 연속 함수이며, 치역은 [-1, 1]입니다. 우리가 찾은 값 C≈0.841은 이 치역 안에 있습니다. 따라서 사이값 정리에 의해 g(y0)=C를 만족하는 실수 y0는 반드시 존재합니다.
정수 해의 근접성: 우리가 필요한 것은 정수 pos2입니다. g(y)는 연속 함수이므로, 실수 y0에 가장 가까운 정수 pos2(예: floor(y₀) 또는 ceil(y₀))에 대한 함수 값 g(pos2)는 C에 매우 가깝습니다.
3. 결론 (Conclusion)
두 함수는 서로 다른 입력과 주기를 갖지만, 동일한 [-1, 1] 값의 범위를 공유합니다. 한 함수가 만들어내는 어떤 값이든, 다른 함수 역시 그 값 또는 그 값에 매우 가까운 값을 만들어내는 정수 입력을 찾는 것이 가능합니다.
따라서 서로 다른 차원과 다른 위치에서는 Position Encoding 값이 같아질 수 있습니다.
Transformer의 "Attention is All You Need" 논문에서 처음 제안된 위치 인코딩 기법입니다. 토큰의 위치 정보를 사인(sine), 코사인(cosine) 함수의 주기성을 이용하여 표현합니다. 학습 파라미터가 없으며, 모델이 학습 과정에서 보지 못한 긴 문맥에도 적용할 수 있습니다.
Self-attention 연산에서 내적(dot product)을 통해 토큰 간 상대적 위치 차이가 자연스럽게 반영됩니다.
장단점
장점: 학습 파라미터가 없고, 외삽(Extrapolation, 학습 범위를 넘어선 영역까지 일반화)이 가능합니다.
단점: 표현력이 단순하여 복잡한 구조를 학습하기 어렵습니다.
2. Relative Position Encoding (2018~2019)
개요
Shaw et al.(2018)과 Transformer-XL에서 제안된 방식으로, 절대 위치 대신 토큰 간의 상대적 거리를 인코딩합니다. 긴 문맥에서 반복 패턴이나 종속 구조를 학습하는 데 유리합니다.
수식
Attention(Q,K,V)=softmax(dkQKT+Srel)V
(query가 key를 찾을 때, key와의 거리를 반영한다고 생각하면 됩니다.)
작동 원리
각 query와 key 쌍의 위치 차이 (i−j)를 상대적 위치 임베딩으로 변환합니다.
이 임베딩을 attention score 계산 과정에 포함합니다.
모델은 “얼마나 떨어져 있는 토큰인가”를 직접적으로 고려할 수 있습니다.
장단점
장점: 문맥 길이에 대해 더 나은 일반화, 반복 패턴 학습에 강함.
단점: 구현 복잡성이 증가합니다.
3. Rotary Positional Embedding (RoPE, 2021)
개요
RoPE는 토큰의 위치를 벡터 회전(rotation) 연산을 통해 반영합니다. 쌍마다 복소수 평면 상의 회전으로 처리되며, Q와 K의 내적 연산에서 상대적 위치 정보가 자연스럽게 반영됩니다. GPT-NeoX, LLaMA 등 최신 대규모 언어 모델에서 표준적으로 사용됩니다.
수식
(q0′q1′)=(cosmθsinmθ−sinmθcosmθ)(q0q1)
작동 원리
Query, Key 벡터의 각 차원을 2차원 쌍으로 묶어 회전시킵니다.
위치에 따라 각 벡터가 다른 각도로 회전합니다.
회전된 Q, K 벡터의 내적은 상대적 위치 차이를 반영합니다.
장단점
장점: 상대적 위치 정보가 자연스럽게 반영되며, 긴 문맥 처리에 강합니다.
단점: 약간의 연산 오버헤드가 존재합니다.
4. ALiBi (Attention with Linear Biases, 2022)
개요
ALiBi는 위치를 벡터로 임베딩하지 않고, attention score에 선형적인 bias를 직접 더합니다. 단순하면서도 긴 문맥 extrapolation 성능이 뛰어나다. GPT-3.5/4, Falcon, MPT 등 긴 문맥 모델에서 사용됩니다.
수식
Attention(qi,kj)=qiTkj−m⋅∣i−j∣
작은 slope (m) → 긴 거리도 무시하지 않고 attention 가능
큰 slope (m) → 가까운 거리 위주로 attention 집중
작동 원리
Self-attention score 계산 시, 토큰 간 거리에 따라 선형적으로 감소하는 bias를 추가합니다.
SeqPE는 기존 위치 인코딩 기법이 갖는 한계를 극복하기 위해 제안된 새로운 접근법입니다. 기존의 Sinusoidal, RoPE, ALiBi 등이 위치를 단순한 주기 함수, 회전, 선형 bias 등으로 표현하는 것과 달리, SeqPE는 위치를 연속적(Sequential) 구조로 학습하여 표현합니다.
즉, 위치를 단순한 “좌표”로 보지 않고, 시퀀스 전체의 맥락 속에서 위치 간의 관계를 학습적으로 모델링하는 방식입니다.
수식 (개념적 표현)
hpos=f(hpos−1,Δpos)
(이전 위치 상태와 변화량을 통해 현재 위치를 갱신)
작동 원리
첫 번째 위치(예: [CLS] 토큰)는 초기 상태에서 시작합니다.
각 다음 위치의 인코딩은 직전 위치의 인코딩과, 위치 차이를 반영하는 신호를 입력으로 받아 갱신됩니다.
전체 시퀀스의 위치 표현이 일종의 **연쇄적 구조(chain structure)**로 만들어집니다.
이렇게 하면 단순히 “몇 번째인지”만 아는 것이 아니라, 시퀀스의 순차적 패턴이 그대로 위치 인코딩에 반영됩니다.
장점
단순한 좌표형 인코딩(Sinusoidal, ALiBi 등)에 비해 **순서성(sequentiality)**을 더 잘 반영합니다.
긴 시퀀스에 대해서도 일반화 능력이 높습니다.
RoPE나 ALiBi 대비 더 유연하게 다양한 길이에 적응 가능합니다.
단점
사인/코사인, RoPE, ALiBi보다 계산 비용이 약간 증가합니다.
학습 가능한 구조이므로, Sinusoidal처럼 완전한 외삽은 어렵습니다.
기존 기법과의 비교
기법
핵심 아이디어
장점
단점
Sinusoidal
사인/코사인 주기 함수
단순, 외삽 가능
표현력 제한
Relative
상대적 거리 임베딩
반복 구조 학습
구현 복잡
RoPE
Q,K 벡터 회전
긴 문맥 강력
연산량 증가
ALiBi
선형 bias 추가
단순, 긴 문맥 안정
구조 정보 단순
SeqPE
순차적 관계 학습
시퀀스 순서성 반영, 긴 문맥 적응
계산량 증가, 외삽 제한
요약
SeqPE는 위치를 독립적으로 정의하는 것이 아니라, 시퀀스 내 위치 간 관계를 순차적으로 학습하는 방식입니다.
기존의 “좌표형 위치 인코딩”보다 더 맥락적(contextual)인 위치 표현을 제공합니다.