위치 인코딩의 변천(Positional encoding)
어텐션(attention)은 순서를 모르므로 위치를 따로 알려 줘야 한다. 입력에 위치 벡터(vector)를 더하던 2017년의 방식에서, 어텐션 점수에 상대 거리를 넣는 방식, 쿼리(query)와 키를 위치만큼 회전시키는 RoPE, 거리에 비례해 점수를 깎는 ALiBi를 거쳐, 학습 때보다 긴 문맥으로 늘리는 보간(interpolation) 기법까지 이어진 흐름.
토큰(token) 세 개 [A, B, C]를 셀프 어텐션에 넣은 결과와, 순서를 바꾼 [C, A, B]를 넣은 결과를 비교해 봅시다. 마스크가 없다면 두 번째 출력은 첫 번째 출력의 행을 똑같이 C, A, B 순서로 늘어놓은 것일 뿐입니다. A 자리에 나오는 벡터는 한 성분도 다르지 않습니다. 일반적으로 순서를 바꾸는 치환 행렬(matrix) P에 대해
1. 입력에 위치 벡터를 더하기 (2017). 원래 트랜스포머는 위치 p의 토큰 벡터에 위치 벡터 PE(p)를 더했습니다. 벡터의 성분을 둘씩 짝지어, i번째 짝에 진동수(frequency)
진동수는 1에서 시작해 짝마다 같은 비율로 줄어드는 등비수열(geometric progression)입니다. 파장
이 식에는 흔히 놓치는 점이 두 가지 있습니다. 첫째, 코사인(cosine)은 짝수 함수라서 거리 k와 −k에서 값이 같습니다. 내적만으로는 상대가 앞에 있는지 뒤에 있는지 알 수 없습니다. 둘째, 모델은 PE(m)·PE(n)을 직접 보지 않습니다. 토큰 벡터 e와 위치 벡터를 더한
마지막 위치–위치 항조차 늘 거리에만 달려 있지는 않습니다. M이 서로 다른 짝을 섞지 않고, 각 짝 안에서는 회전(rotation)과 교환되는(회전과 확대를 합친) 특별한 모양일 때만 그렇습니다. 아래 그림은 거리 k =
학습된 모델에서 M은 학습이 정하므로, 사인파를 더해도 점수가 상대 거리만의 함수(function)라는 보장은 없습니다. 이것이 뒤의 방법들이 위치를 입력이 아니라 점수 쪽에 넣으려 한 까닭입니다.
학습되는 위치 벡터. 더 단순한 방법은 위치마다 벡터를 하나씩 두고 가중치(weight)처럼 학습하는 것입니다. 2017년 게링 등의 합성곱(convolution) 번역 모델(합성곱 신경망(convolutional neural network)으로 만든 seq2seq)이 이렇게 했고, 트랜스포머 논문도 두 방식을 비교해 결과가 거의 같았다고 적었습니다. 그러면서도 사인파를 고른 이유로 "학습 때보다 긴 수열로 외삽(extrapolation)할 수 있을지도 모른다"는 기대를 들었습니다. 이후 BERT(2018, 위치 512개)와 GPT-2(2019, 위치 1,024개)는 학습되는 위치 벡터를 썼습니다. 이 방식에는 분명한 한계가 있습니다. GPT-2라면 표에 1,025번째 행이 없으니 1,025번째 토큰은 아예 넣을 수 없습니다. 사인파는 어떤 위치의 벡터든 계산할 수는 있습니다. 그러나 2021년 프레스 등(아래 ALiBi의 저자들)이 재어 보니, 사인파를 쓴 언어 모델(language model)은 학습 길이를 조금만 넘어도 퍼플렉시티(perplexity)가 크게 나빠졌습니다. 퍼플렉시티는 모델이 실제 다음 토큰에 매긴 확률(probability)들의 기하평균의 역수(inverse)로, 낮을수록 잘 맞힌다는 뜻입니다. 벡터를 계산할 수 있다는 것과, 망이 그 벡터를 처음 보는 조합에서 제대로 쓸 수 있다는 것은 다른 일입니다.
2. 점수에 상대 거리를 넣기 (2018–2020). 2018년 피터 쇼, 야코프 우스코라이트, 아시시 바스와니는 위치 벡터를 입력에 더하지 않고, 어텐션 안에서 키에 거리별 학습 벡터를 더했습니다. i번째 토큰이 j번째 토큰을 볼 때의 점수를
2020년 콜린 라펠 등의 T5는 가장 단순한 형태로 갔습니다. 거리마다 수 하나(편향)를 학습해 점수에 더할 뿐입니다. 헤드마다 따로, 층끼리는 공유하며, 거리를 32개 칸으로 묶되 가까운 거리는 촘촘히, 먼 거리는 로그 간격으로 넓게 묶고 128이 넘는 거리는 모두 한 칸에 넣었습니다. 이 셋은 모두 거리를 입력이 아니라 점수 안에 직접 넣었다는 점에서 같습니다. 쇼 등과 T5는 거리마다 학습하는 표를 두었고, Transformer-XL은 거리의 사인파에 학습하는 행렬을 곱해 썼습니다.
3. 회전으로 위치를 넣기: RoPE (2021). 2021년 4월 쑤젠린과 동료들은 질문을 뒤집었습니다. 쿼리와 키에 각자의 위치만 써서 무언가를 해 두었을 때, 그 둘의 내적이 저절로 거리에만 달려 있게 할 수 있을까? 답은 회전입니다. 쿼리와 키의 성분을 둘씩 짝지어 평면 벡터로 보고, 위치 m의 쿼리는 짝마다 각도
오른쪽에는 m과 n이 차이 n − m으로만 남습니다. 두 토큰을 똑같이 한 칸씩 옮겨도 점수는 그대로입니다. 짝을 복소수(complex number) 하나로 보면 더 투명합니다. 회전은
'둘 다 한 칸 뒤로'를 누르면 두 화살표가 함께 θ만큼 돌고, 사이각이 그대로이므로 점수도 오른쪽 그래프의 같은 점에 머뭅니다(한쪽이 15에 닿으면 둘에서 같은 수를 빼 작은 번호로 되돌립니다). 구현은 토큰마다 자기 위치만큼 돌리는 절대 방식인데, 효과는 상대 방식입니다. 그래서 따로 배울 표가 필요 없습니다. 키는 자기 위치만으로 돌려 두면 되므로, 이미 계산한 키를 저장해 두었다가 다시 쓰는 캐시와도 잘 맞습니다. 회전은 쿼리와 키에만 하고 값에는 하지 않으며, 층마다 다시 합니다.
실제 모델은 d/2개의 짝을 모두 쓰므로 점수는 여러 진동수의 합
4. 거리에 비례해 점수를 깎기: ALiBi (2021). 같은 해 8월 오피르 프레스, 노아 스미스, 마이크 루이스는 위치 벡터를 아예 없앴습니다. 인과 마스크(causal mask) 아래에서 i번째 쿼리가 j번째 키(j ≤ i)를 볼 때 점수에 거리에 비례하는 벌점을 더합니다.
기울기(slope)
ALiBi가 외삽에 강한 까닭이 이 그림에 있습니다. 학습 때 1,024토큰까지만 보았다면, 추론 때 더 긴 입력에서 새로 생기는 것은 더 큰 거리에 붙는 더 큰 벌점뿐입니다. 먼 토큰의 가중치는 더 작아질 뿐이고(가파른 헤드에서는 이미 거의 0입니다), 망이 처음 보는 벡터를 해석해야 할 일은 생기지 않습니다. 논문은 1,024토큰으로 학습한 13억 매개변수(parameter) 모델이 2,048토큰 입력에서, 2,048토큰으로 학습한 사인파 모델과 같은 퍼플렉시티를 내면서 학습은 11% 빠르고 메모리는 11% 적게 썼다고 보고했습니다. 대가도 같은 곳에 있습니다. 먼 토큰의 가중치가 작다는 것은 먼 토큰을 거의 쓰지 않는다는 뜻이기도 합니다. 2023년 치타충 등은 ALiBi 모델이 실제로 기대는 범위가 학습 길이 안에 머문다고 분석했습니다. '길어도 망가지지 않는다'와 '길어진 문맥을 쓴다'는 다른 주장입니다. ALiBi는 BLOOM(2022)과 MPT(2023)에 쓰였습니다.
5. 아무것도 넣지 않기: NoPE. 2022년 아디 하비브 등은 위치 인코딩을 전혀 넣지 않은 인과(causation) 언어 모델도 표준 모델과 견줄 만하다는 것을 보였습니다. 그들의 설명으로는 위치 정보가 인과 마스크에서 나옵니다. i번째 토큰은 자기 자신을 포함해 앞쪽 i개만 볼 수 있습니다. 그래서 예컨대 보이는 모든 토큰에 고르게 주의하는 헤드에서는 첫 토큰의 값이 1/i의 가중치로 섞여 들어오고, 그 크기로부터 i를 읽어 낼 수 있습니다. 마스크가 없는 양방향 모델에서는 맨 처음의 치환 논증 때문에 이런 일이 불가능합니다. 2023년 아미르호세인 카젬네자드 등은 작은 합성 과제(덧셈, 복사 같은 것)에서 NoPE가 RoPE, ALiBi, T5 편향보다 긴 길이로 더 잘 일반화했다고 보고했습니다. 작은 규모의 실험이라 큰 모델에서도 그런지는 따로 물어야 합니다. 2025년 4월 메타는 Llama 4가 RoPE를 쓰는 층 사이사이에 위치 인코딩이 없는 어텐션 층을 끼워 넣고(iRoPE), 추론 때 어텐션 온도를 조절한다고 발표했습니다. 같은 발표에서 Llama 4 Scout는 256k토큰으로 학습하고 1,000만 토큰 문맥을 지원한다고 밝혔는데, 이것은 회사의 주장이고 그 길이에서 무엇을 얼마나 잘하는지는 따로 재야 할 문제입니다.
6. 학습 때보다 긴 문맥으로 (2023–). RoPE 모델을 학습 길이 L보다 길게 쓰면 무엇이 문제일까요? 짝 i는 거리 k에서 각도
2023년 6월 메타의 천서우위안 등은 위치 보간(PI)을 내놓았습니다. 목표 길이가 L′ = sL이면 위치 m을 m/s로 바꿔, 모든 각도가 학습 때의 범위 안에 머물게 합니다. LLaMA 7B–65B를 1,000걸음 이내의 미세조정(fine-tuning)으로 32,768토큰까지 늘렸고, 보간의 오차 상한이 외삽보다 적어도 약 600배 작다는 계산도 붙였습니다. 대가는 빠른 짝의 해상도입니다. 이웃한 두 토큰의 각도 차이가 1 rad에서 1/s rad로 줄어, 가까운 토큰을 구별하던 짝들이 흐려집니다.
같은 달 레딧 사용자 bloc97은 'NTK-aware' 스케일링을 올렸습니다. 기저 b = 10000을
2023년 8월 보웬 펑, 제프리 퀘넬 등의 YaRN(ICLR 2024)은 짝마다 따로 정합니다. 학습 길이 동안 도는 바퀴 수
그대로 늘리면 느린 짝 18개가 빨개집니다. PI는 빨간 점을 모두 없애지만 모든 점을 똑같이 위로 올려 빠른 짝까지 느리게 만듭니다. NTK-aware는 빠른 짝을 지키고 넘치는 폭을 크게 줄입니다. 그래도 맨 끝 짝을 뺀 느린 짝 17개는 여전히 학습 때보다 큰 각도까지 갑니다. s = 8이면 가장 심한 짝이 학습 때 최대 각도의 약 1.75배까지 갑니다(점에 올려 보세요). NTK-aware는 미세조정 없이 쓸 때는 잘 버티지만, 미세조정과 함께 쓰면 PI보다 못한 결과를 냅니다. YaRN 논문은 그 까닭을 바로 이 약간의 외삽에서 찾았습니다. YaRN은 이미 한 바퀴 이상 돈 짝은 두고 느린 짝만 보간해, 두 문제를 함께 피합니다.
이후의 흐름은 학습 단계에서 기저를 키우는 쪽으로도 갔습니다. Code Llama(2023년 8월)는 16,384토큰 미세조정에서 기저를 1,000,000으로 올려 100k토큰 입력까지 개선을 보고했습니다. Llama 3(2024)는 기저를 500,000으로 두었고, Llama 3.1은 8,192토큰이던 문맥을 8배인 128k토큰으로 늘리면서 짝의 진동수에 따라 배율을 달리 주는, YaRN과 비슷한 방식을 썼습니다. 2024년 2월 마이크로소프트의 LongRoPE는 짝마다의 배율을 탐색으로 정해 약 200만(2,048k) 토큰까지 늘렸다고 보고했습니다.
늘린 문맥을 실제로 쓰는가. 위치 인코딩이 정하는 것은 주로 긴 입력에서 모델이 망가지지 않느냐입니다. 그 정보를 쓰느냐는 따로 재야 합니다. 2023년 넬슨 류 등은 긴 입력의 가운데에 놓인 정보가 처음이나 끝에 놓인 정보보다 덜 쓰인다는 것을 보였습니다("Lost in the Middle"). 2024년 엔비디아의 RULER 벤치마크에서는 32k토큰 이상을 지원한다고 밝힌 모델 17개 가운데 절반만이 32k에서 만족할 만한 성능을 유지했습니다. 문서에서 바늘 하나 찾기는 거의 다 풀었지만, 여러 단계를 따라가거나 모아야 하는 과제에서는 길이가 늘수록 크게 떨어졌습니다. 광고된 문맥 길이와 실제로 쓸 수 있는 길이의 차이는 지금도 측정되고 논쟁되는 문제입니다.
이어지는 곳. 위치가 왜 필요한지는 순서를 모르는 어텐션의 치환 성질에서, 위치 벡터가 어디에 더해지는지는 트랜스포머에서 볼 수 있습니다. 사인파 인코딩과 RoPE의 핵심은 모두 덧셈정리 하나이고, 그것을 행렬로 쓴 것이 회전 행렬, 복소수로 쓴 것이 오일러 공식입니다. 여러 진동수의 삼각함수를 더해 거리의 함수를 만든다는 점은 푸리에 급수와 닮았습니다. 빠른 짝 하나만 보면 거리 k와
이 개념이 나오는 긴 글
이 개념을 언급하는 페이지
- 복소수 곱셈
… k}\,e^{i(m-n)\theta}] 에는 위치가 차 m − n으로만 남습니다(위치 인코딩).
- 회전 행렬
… 위치 n의 키를 nθ만큼 돌립니다. 그러면 두 벡터의 내적은 위치에 대해서는 차 n − m에만 기댑니다(위치 인코딩).
- 내적
… 함께 돌려도 내적은 그대로이고, 회전을 이으면 각도가 더해지기 때문입니다(회전 위치 인코딩 RoPE,위치 인코딩참고).
- 삼각함수의 덧셈정리
… 2\sin(\theta/2) 입니다). 덧셈정리는 오늘날 언어 모델 안에서도 일합니다. 트랜스포머의 사인파위치 인코딩에서는 위치 p + k의 벡터가 위치 p의 벡터에 회전을 곱한 것이고, 그 회전은 k에만 달려 있고 p와는 …
- 사인파: 진폭·주기·위상
… 적을 수 있습니다. 2017년 처음 발표된 트랜스포머가 토큰의 순서를 알려 주려고 쓴 방법이 이것입니다(위치 인코딩).
- 푸리에 급수
… 둘 사이 거리에 대한 여러 진동수의 사인파 합이고, 각 항의 진폭과 위상은 두 토큰의 내용이 정합니다(위치 인코딩). 푸리에 급수와 닮았지만, 진동수가 정수배가 아니라 등비수열로 줄어든다는 점이 다릅니다. 또 일부 …
- 진법
… 쓰입니다. 매번 바뀌는 끝자리와 드물게 바뀌는 앞자리를 함께 읽어 수를 정한다는 생각은 트랜스포머의 사인파위치 인코딩과 닮았습니다. 거기서는 자릿값 대신 진동수가 등비수열로 줄어드는 사인파들이 토큰의 위치를 나타냅니다. …
- 표본화 정리
… 두 위치를 거의 구별하지 못합니다. 그래서 여러 진동수의 짝을 함께 써서 위치가 하나로 정해지게 합니다(위치 인코딩).
- 근사 이론
… 번호를 그대로 넣기(외삽)보다 번호를 학습한 범위 안으로 줄여 넣는 편(보간)이 대개 더 안정적입니다(위치 인코딩).
- 소프트맥스와 교차 엔트로피
… 단어 사이의 유사도 점수를 소프트맥스로 가중치로 바꾸어, 어느 단어를 얼마나 참고할지 정합니다. 이때위치 인코딩의 ALiBi처럼 두 단어의 거리 d에 비례한 벌점 −md(m은 미리 정한 양수)를 점수에 더하면, …
- 어텐션
… 위치 벡터를 더하는 방법에서 쿼리와 키를 위치만큼 회전시키는 RoPE까지, 그 방법들이 바뀌어 온 과정은위치 인코딩에 따로 모아 두었습니다. 어텐션은 2014년 드미트리 바흐다나우, 조경현, 요슈아 벤지오가 기계 …
- 트랜스포머
… 위치 벡터, 상대 위치 편향, RoPE와 ALiBi, 학습 때보다 긴 문맥으로 늘리는 보간까지의 흐름은위치 인코딩의 변천에서 다룹니다. 매개변수 세기. 이제 모델의 크기를 셀 수 있습니다. 블록 하나에서 어텐션은 d×d 행렬 …
- 상태 공간 모형과 선형 순환
… 내기를 기다리지 않고 직접 정하거나 범위를 묶어 둘 수 있습니다. 매 걸음 각도 ωΔ만큼 도는 복소 성분은위치 인코딩의 RoPE가 쿼리와 키를 위치마다 돌리는 것과 같은 종류의 회전입니다. 다만 여기서는 도는 동안 크기도 …
- 검색 증강 생성
… 정리⟧의 일이고, 찾은 글이 들어가는 자리는 트랜스포머의 문맥 창, 그 창을 길게 늘리는 방법은위치 인코딩에 있습니다. 긴 문맥과 도구 사용이 발전해 온 순서는 언어 모델의 발전사에서 볼 수 있습니다.
- 언어 모델의 발전사: RLHF 이후
… 6월의 위치 보간 논문은 RoPE를 쓰는 모델의 위치 번호를 줄여 넣는 간단한 방법으로 문맥을 늘렸습니다(위치 인코딩). 그러나 넣을 수 있다고 잘 쓰는 것은 아닙니다. 7월 리우 등은 정답이 든 문서가 긴 입력의 가운데 …