들어가며 — 왜 위치 정보가 필요한가
self-attention은 입력 토큰들의 집합을 보고 가중 평균을 냅니다. 그런데 어텐션 연산 자체는 순서를 모릅니다. "나는 너를 좋아해"와 "너는 나를 좋아해"는 같은 단어 집합이지만 의미가 정반대인데, 위치 정보가 없으면 모델은 둘을 구분할 단서가 부족합니다. 수학적으로 말하면 self-attention은 순열 등변(permutation equivariant)이라, 입력 순서를 바꾸면 출력도 같은 방식으로만 바뀔 뿐 순서 자체를 인지하지 못합니다.
그래서 Transformer는 토큰의 위치 정보를 명시적으로 주입해야 합니다. 이 글은 그 방법의 진화를 따라갑니다. 가장 단순한 사인파 인코딩에서 출발해, 학습형, 상대 위치, 그리고 오늘날 사실상 표준이 된 RoPE와 ALiBi까지 살펴보고, 학습보다 긴 입력을 다루는 길이 외삽 기법으로 마무리합니다.
1. Sinusoidal — 고정된 사인파 인코딩
원논문의 방식입니다. 각 위치마다 서로 다른 주파수의 사인/코사인 값을 만들어 토큰 임베딩에 더합니다.
PE(pos, 2i) = sin( pos / 10000^(2i / D) )
PE(pos, 2i+1) = cos( pos / 10000^(2i / D) )
pos = 위치 인덱스
i = 차원 인덱스 (0 .. D/2-1)
D = 모델 차원
낮은 차원은 빠른 주파수, 높은 차원은 느린 주파수를 담당해, 위치마다 고유한 패턴이 생깁니다. 장점은 학습 파라미터가 없고, 이론상 학습 길이보다 긴 위치도 값을 계산할 수 있다는 점입니다. 하지만 실제로는 학습 길이를 크게 넘어가면 성능이 떨어지는 경우가 많습니다.
def sinusoidal_encoding(n_positions, d_model):
pe = torch.zeros(n_positions, d_model)
pos = torch.arange(n_positions).unsqueeze(1).float()
i = torch.arange(0, d_model, 2).float()
denom = torch.pow(10000, i / d_model)
pe[:, 0::2] = torch.sin(pos / denom)
pe[:, 1::2] = torch.cos(pos / denom)
return pe # (n_positions, d_model)
2. Learned — 위치를 학습하는 방식
사인파 대신 위치마다 학습 가능한 임베딩 벡터를 두는 방식입니다. 초기 BERT, GPT 등이 사용했습니다. 데이터에 맞춰 위치 표현을 최적화한다는 장점이 있지만, 결정적 단점이 있습니다. 학습 시 본 적 없는 위치(최대 길이를 초과하는 입력)에는 임베딩이 아예 존재하지 않습니다. 즉 외삽이 원천적으로 불가능합니다.
learned PE:
위치 0..max_len-1 각각에 대해 (D,) 벡터를 학습
max_len 초과 위치 -> 대응 벡터 없음 -> 처리 불가
이 한계 때문에 긴 컨텍스트가 중요해진 최근에는 learned 절대 위치 인코딩의 인기가 줄었습니다.
3. 상대 위치 — 절대보다 상대가 자연스럽다
문장의 의미는 "이 토큰이 문서의 몇 번째인가"보다 "이 토큰이 저 토큰에서 얼마나 떨어져 있는가"에 더 의존하는 경우가 많습니다. 상대 위치 인코딩은 두 토큰 사이의 거리(상대 위치)를 어텐션 점수에 반영합니다.
절대 위치를 임베딩에 더하는 대신, 어텐션 점수 단계에서 query와 key의 거리에 따른 항을 추가하는 식입니다. 이렇게 하면 같은 거리 관계가 문서의 어느 위치에 있든 동일하게 다뤄져, 일반화와 외삽에 유리합니다. RoPE와 ALiBi는 모두 이 상대 위치 철학을 따릅니다.
4. RoPE — 회전으로 상대 위치를 인코딩
핵심 아이디어
RoPE(Rotary Position Embedding)는 오늘날 Llama, Qwen 등 대부분의 오픈 LLM이 쓰는 방식입니다. 발상은 우아합니다. 위치 정보를 더하지 않고, Query와 Key 벡터를 위치에 비례한 각도만큼 회전시킵니다.
2차원 부분공간에서 위치 m의 벡터를 각도 m 곱하기 theta 만큼 회전시키면, Query와 Key의 내적이 자연스럽게 두 위치의 차이(m - n)에만 의존하게 됩니다. 즉 절대 위치로 회전을 걸었는데 결과적으로 상대 위치가 인코딩되는 것입니다.
RoPE의 핵심 성질:
위치 m의 query를 R(m)으로 회전, 위치 n의 key를 R(n)으로 회전하면
dot( R(m) q, R(n) k ) = 함수( q, k, m - n )
-> 내적이 절대 위치 m, n이 아니라 상대 거리 (m - n)에만 의존
회전 행렬
D차원을 D/2개의 2차원 쌍으로 묶고, 각 쌍을 서로 다른 주파수로 회전합니다.
각 2차원 쌍 (x_a, x_b)를 각도 theta로 회전:
[ x_a' ] [ cos(theta) -sin(theta) ] [ x_a ]
[ x_b' ] = [ sin(theta) cos(theta) ] [ x_b ]
위치 m에서 j번째 쌍의 각도:
theta_j = m / base^(2j / D) (base는 보통 10000)
낮은 차원 쌍: 빠른 회전(고주파)
높은 차원 쌍: 느린 회전(저주파)
def apply_rope(x, positions, base=10000):
x: (..., N, D) D는 짝수
*_, N, D = x.shape
half = D // 2
freq = 1.0 / (base ** (torch.arange(0, half).float() / half))
angles = positions.unsqueeze(-1).float() * freq # (N, half)
cos = torch.cos(angles)
sin = torch.sin(angles)
x1 = x[..., :half]
x2 = x[..., half:]
2차원 쌍 회전
rotated = torch.cat([x1 * cos - x2 * sin,
x1 * sin + x2 * cos], dim=-1)
return rotated
RoPE가 인기 있는 이유는 (1) 상대 위치를 자연스럽게 인코딩하고, (2) 추가 파라미터가 없으며, (3) 어텐션의 Q, K에만 적용되어 KV cache와도 잘 맞고, (4) base를 조정해 외삽을 다룰 여지를 준다는 점입니다.
5. ALiBi — 거리에 비례한 어텐션 페널티
ALiBi(Attention with Linear Biases)는 더 단순합니다. 위치 인코딩을 임베딩에 넣지 않고, 어텐션 점수에 query와 key의 거리에 비례하는 음의 바이어스를 직접 더합니다. 멀리 있는 토큰일수록 점수를 더 깎는 것입니다.
ALiBi 어텐션 점수:
score(i, j) = q_i · k_j - m * |i - j|
m = 헤드마다 다른 기울기(slope) 상수
|i - j| = 두 토큰의 거리
-> 가까운 토큰은 페널티 작고, 먼 토큰은 페널티 큼
헤드마다 기울기 m을 다르게 두어, 어떤 헤드는 가까운 토큰에, 어떤 헤드는 먼 토큰에 집중하도록 분화시킵니다. ALiBi의 강점은 학습보다 훨씬 긴 입력에도 비교적 잘 외삽된다는 점입니다. 다만 RoPE만큼 범용적으로 채택되지는 않았고, 모델 설계에 따라 선택이 갈립니다.
6. 비교 정리
| 방식 | 위치 주입 위치 | 상대/절대 | 추가 파라미터 | 외삽 | 대표 사용 |
| --- | --- | --- | --- | --- | --- |
| Sinusoidal | 임베딩에 더함 | 절대 | 없음 | 제한적 | 원논문 |
| Learned | 임베딩에 더함 | 절대 | 있음 | 불가 | 초기 BERT/GPT |
| 상대 위치 | 어텐션 점수 | 상대 | 방식에 따라 | 양호 | Transformer-XL 등 |
| RoPE | Q, K 회전 | 상대 | 없음 | 외삽 기법과 결합 | Llama, Qwen 등 |
| ALiBi | 어텐션 점수 바이어스 | 상대 | 없음 | 양호 | 일부 모델 |
7. 길이 외삽과 컨텍스트 확장
문제
모델을 4K 컨텍스트로 학습했는데 32K 입력을 넣으면 어떻게 될까요. RoPE의 경우 학습 때 본 적 없는 큰 회전 각도가 등장해, 어텐션 패턴이 무너지고 성능이 급락합니다. 이를 외삽 실패라고 합니다. 재학습 없이 컨텍스트를 늘리는 것이 실무의 큰 관심사입니다.
NTK 스케일링
RoPE의 base(주파수 기준값)를 키워, 회전 각도가 천천히 증가하게 만드는 방식입니다. 직관적으로는 "위치 축을 늘려 학습 범위 안에 욱여넣는" 효과를 냅니다. 고주파 정보 손실을 줄이면서 컨텍스트를 늘리는 균형을 잡습니다.
NTK-aware 스케일링의 직관:
RoPE base를 10000 -> 더 큰 값으로 조정
-> 각 차원의 회전 각도가 완만해짐
-> 학습보다 긴 위치도 학습 분포 안쪽에 가깝게 매핑
YaRN
YaRN은 NTK 계열을 발전시켜, 주파수 대역마다 다르게 보간/외삽 강도를 조절하고 어텐션 온도까지 함께 보정하는 방식입니다. 고주파(가까운 거리 정보)는 보존하고 저주파(먼 거리)는 늘려, 더 긴 컨텍스트에서도 품질을 유지하도록 설계되었습니다. 소량의 추가 미세조정과 결합하면 효과가 좋습니다.
컨텍스트 확장 전략 요약:
위치 보간(PI): 위치 인덱스를 비율로 압축 -> 간단하지만 고주파 손상
NTK-aware: base 조정 -> 고주파 보존 개선
YaRN: 대역별 보정 + 온도 조정 -> 더 긴 확장에 유리
| 기법 | 핵심 | 재학습 | 장점 | 주의 |
| --- | --- | --- | --- | --- |
| 위치 보간(PI) | 위치 인덱스 압축 | 약간 권장 | 단순 | 고주파 정보 손상 |
| NTK-aware | base 조정 | 불필요~약간 | 고주파 보존 | 큰 확장엔 한계 |
| YaRN | 대역별 보정+온도 | 소량 권장 | 긴 확장에 강함 | 구현 복잡 |
8. 멀티모달의 M-RoPE
이미지나 비디오를 다루는 비전-언어 모델(VLM)에서는 위치가 1차원이 아닙니다. 이미지는 행과 열, 비디오는 시간 축까지 더해집니다. M-RoPE(Multimodal RoPE)는 RoPE를 여러 축으로 분해해, 시간/높이/너비 같은 차원에 각각 회전을 배분합니다. Qwen2-VL 등이 임의 해상도 입력을 다루기 위해 이런 다축 위치 인코딩을 사용합니다.
M-RoPE의 직관:
텍스트: 1D 위치 (순서)
이미지: 2D 위치 (행, 열)
비디오: 3D 위치 (시간, 행, 열)
RoPE 차원을 축별로 나누어 각 축의 위치로 회전
-> 하나의 통일된 위치 인코딩으로 여러 모달리티 처리
이를 통해 텍스트와 이미지 토큰이 같은 위치 체계 안에서 상대 관계를 유지하며 함께 어텐션될 수 있습니다.
8.5. 왜 절대 위치 인코딩은 외삽에 약한가
상대 위치 계열(RoPE, ALiBi)이 외삽에 강한 이유를, 절대 위치 인코딩의 한계와 대비해 정리합니다.
절대 위치 인코딩의 외삽 약점:
sinusoidal -> 학습 길이 밖의 위치 패턴은 학습 중 본 적 없음
이론상 값은 계산되지만, 모델이 그 패턴을 해석하도록
학습되지 않아 실전 성능이 떨어짐
learned -> 학습 길이 밖 위치에 임베딩 자체가 없음 -> 외삽 원천 불가
상대 위치 계열이 강한 이유:
같은 거리 관계가 위치와 무관하게 동일하게 표현됨
-> "10칸 떨어짐"의 의미가 위치 5든 5000이든 같음
-> 학습에서 본 거리 관계를 긴 입력에서도 재사용 가능
다만 상대 위치도 만능은 아닙니다. RoPE조차 학습보다 훨씬 긴 입력에서는 큰 회전 각도가 학습 분포를 벗어나 성능이 떨어집니다. 그래서 NTK/YaRN 같은 보정이 필요한 것입니다. 핵심 교훈은 "상대 위치는 외삽의 출발점을 좋게 만들지만, 큰 폭의 확장에는 추가 보정이 거의 항상 필요하다"는 것입니다.
8.7. 임의 해상도와 위치 인코딩
멀티모달에서 위치 인코딩은 임의 해상도 처리와도 직결됩니다. 이미지 크기가 제각각이면, 고정된 위치 격자로는 다양한 해상도를 일관되게 다루기 어렵습니다.
고정 위치 격자의 한계:
학습 때 본 해상도(예: 224x224)에 맞춰 위치를 학습하면
-> 다른 해상도(예: 1024x768) 입력에서 위치 의미가 어긋남
다축 상대 위치(M-RoPE)의 이점:
위치를 (행, 열) 같은 좌표의 상대 관계로 인코딩
-> 해상도가 달라져도 "오른쪽으로 한 칸"의 의미가 보존
-> 임의 해상도 입력을 더 자연스럽게 처리
Qwen2-VL의 naive dynamic resolution 같은 접근은 이미지를 고정 크기로 강제 리사이즈하지 않고, 원본 비율과 해상도를 살린 채 처리하면서 다축 위치 인코딩으로 공간 관계를 유지합니다. 이는 OCR이나 문서 이해처럼 세밀한 공간 정보가 중요한 작업에서 특히 유리합니다.
9. 작은 예제로 보는 RoPE 회전
RoPE가 추상적으로 느껴진다면, 2차원 한 쌍을 직접 회전시켜 보면 직관이 잡힙니다. 차원 D=4(즉 2차원 쌍 2개)라고 합시다.
벡터 x = [x0, x1, x2, x3]
2차원 쌍으로 묶기: (x0, x1), (x2, x3)
위치 m=2, 첫 쌍의 각도 theta_0 = 0.5 라고 하면
회전 후:
x0' = x0 * cos(2*0.5) - x1 * sin(2*0.5)
x1' = x0 * sin(2*0.5) + x1 * cos(2*0.5)
두 번째 쌍은 더 느린 주파수(작은 theta_1)로 회전
-> 같은 위치라도 쌍마다 다른 각도로 돌아감
핵심은 같은 벡터라도 위치 m에 따라 회전 각도가 달라진다는 것, 그리고 두 토큰의 Query·Key 내적을 계산하면 회전 각도의 차이(즉 위치 차이 m-n)만 남는다는 것입니다. 이래서 절대 위치로 회전을 걸었는데 결과는 상대 위치로 나타납니다.
def rope_dot_demo(q, k, pos_q, pos_k, base=10000):
q, k: (D,) 같은 토큰 내용이라도 위치가 다르면 내적이 달라짐
qr = apply_rope(q.unsqueeze(0), torch.tensor([pos_q]), base)
kr = apply_rope(k.unsqueeze(0), torch.tensor([pos_k]), base)
return (qr * kr).sum() # 위치 차이에 의존하는 값
10. 컨텍스트 확장을 수치로 감 잡기
4K로 학습한 모델을 16K로 늘리고 싶다고 합시다. 확장 배율은 4배입니다. 각 기법이 이 배율을 어떻게 다루는지 직관적으로 봅니다.
확장 배율 s = 목표 길이 / 학습 길이 = 16K / 4K = 4
위치 보간(PI):
모든 위치 인덱스를 1/s 로 압축 (pos -> pos / 4)
-> 학습 범위 안에 들어오지만 인접 토큰 간 각도 간격도 1/4로 줄어
가까운 거리 해상도(고주파)가 뭉개짐
NTK-aware:
base를 키워(예: 10000 -> 10000 * s^(D/(D-2)) 근처) 고주파는 거의 보존,
저주파만 늘려 외삽 -> PI보다 짧은 문맥 정확도 유지
YaRN:
주파수 대역을 나눠 고주파는 그대로, 저주파는 보간,
중간 대역은 부드럽게 전환 + 어텐션 온도 보정
-> 큰 배율에서도 안정적, 소량 파인튜닝과 결합 시 효과 큼
수치로 보면 왜 단순 위치 보간이 짧은 문맥에서 손해를 보는지 분명해집니다. 모든 주파수를 똑같이 압축하면, 가까운 토큰을 구분하는 고주파 정보가 가장 크게 손상되기 때문입니다. NTK와 YaRN은 "어떤 주파수를 얼마나 건드릴지"를 차등화해 이 손해를 줄입니다.
11. 실무에서 컨텍스트 늘리는 절차
실제로 모델 컨텍스트를 늘릴 때의 일반적인 순서를 정리합니다.
1) 목표 길이와 확장 배율 결정 (예: 4K -> 32K, 8배)
2) 모델의 위치 인코딩 방식 확인 (RoPE인지, base 값은 얼마인지)
3) 확장 기법 선택:
- 소폭 확장 + 재학습 불가 -> NTK-aware (base 조정)
- 대폭 확장 + 소량 파인튜닝 가능 -> YaRN
4) 선택한 스케일링을 적용해 추론/파인튜닝
5) 롱컨텍스트 평가:
- 건초더미 속 바늘 찾기(needle-in-a-haystack)로 위치별 회수율 확인
- 짧은 문맥 성능이 퇴화하지 않았는지 회귀 검증
6) 서빙 시 paged KV cache로 늘어난 KV 메모리 관리
5단계의 회귀 검증이 특히 중요합니다. 컨텍스트를 늘리는 기법은 거의 항상 짧은 문맥 성능과 트레이드오프가 있으므로, 긴 문맥에서 잘 회수하는지만 보지 말고 원래 잘하던 짧은 작업이 망가지지 않았는지 함께 확인해야 합니다.
12. 위치 인코딩과 KV cache, 어텐션의 연결
위치 인코딩 선택은 어텐션·KV cache 최적화와도 맞물립니다.
RoPE는 Q, K에만 적용됨
-> KV cache에 저장되는 K에 회전이 이미 반영됨
-> GQA/MQA처럼 KV 헤드를 공유해도 RoPE와 충돌 없음
ALiBi는 어텐션 점수에 바이어스를 더함
-> 별도 위치 임베딩을 KV cache에 들고 다닐 필요 없음
-> 메모리 측면에서 단순
길이 외삽(NTK/YaRN)은 RoPE 각도 계산만 바꿈
-> KV cache 구조는 그대로 -> 서빙 스택과 호환 용이
이처럼 RoPE 계열이 널리 쓰이는 데에는 품질뿐 아니라, GQA/MQA·paged KV cache 같은 서빙 최적화와 깔끔하게 어울린다는 실무적 이유도 큽니다. 위치 인코딩을 고를 때 모델 품질만이 아니라 서빙 파이프라인 전체와의 궁합을 함께 보는 것이 좋습니다.
함정과 트러블슈팅
- **컨텍스트 확장 시 base 미조정**: RoPE 모델을 그냥 더 긴 입력에 쓰면 외삽 실패로 품질이 급락합니다. NTK/YaRN 같은 확장 기법을 반드시 적용하세요.
- **위치 보간의 고주파 손상**: 단순 위치 보간(PI)은 가까운 거리 정보를 담당하는 고주파를 망가뜨려, 짧은 문맥 정확도가 떨어질 수 있습니다.
- **learned PE로 외삽 시도**: 학습형 절대 위치 인코딩은 최대 길이를 넘는 위치에 임베딩이 없어 외삽이 원천 불가입니다. 긴 컨텍스트엔 RoPE/ALiBi 계열이 적합합니다.
- **RoPE를 V에도 적용**: RoPE는 Q와 K에만 적용해야 상대 위치 성질이 성립합니다. Value에까지 회전을 걸면 의미가 깨집니다.
- **차원 홀수 문제**: RoPE는 차원을 2차원 쌍으로 묶으므로 헤드 차원이 짝수여야 합니다. 홀수면 쌍 구성이 깨집니다.
- **멀티모달 축 배분 실수**: M-RoPE에서 시간/행/열 축에 차원을 잘못 배분하면 이미지의 공간 관계가 왜곡됩니다. 모델 구현의 축 분할 규칙을 따르세요.
12.5. RoPE 적용 위치와 캐싱 디테일
RoPE를 추론 파이프라인에 넣을 때 자주 헷갈리는 디테일을 짚습니다. RoPE는 Q와 K에 적용되는데, 적용 시점을 어디로 두느냐에 따라 KV cache 저장 내용이 달라집니다.
KV cache에 무엇을 저장하나:
일반적으로 RoPE를 적용한 후의 K를 캐시에 저장
-> 캐시된 K는 이미 회전이 반영된 상태
-> 새 토큰의 Q도 해당 위치로 회전시켜 내적
-> 위치 차이만 남아 상대 위치가 자연스럽게 작동
주의:
캐시에 회전 전 K를 저장하고 매번 회전하면 연산 낭비 + 일관성 위험
-> 보통은 회전 후 K를 저장하는 구현이 표준
컨텍스트 확장 기법을 적용할 때도 이 흐름은 유지됩니다. NTK나 YaRN은 각 위치에서의 회전 각도 계산만 바꾸므로, KV cache의 저장 구조나 어텐션 커널 자체는 그대로 둔 채로 위치 스케일링만 교체하면 됩니다. 이 점이 RoPE 계열이 서빙 스택과 잘 어울리는 또 하나의 이유입니다.
13. 실무 자주 묻는 질문
위치 인코딩을 적용하며 자주 부딪히는 질문을 정리합니다.
Q. 학습 길이만큼만 쓸 거면 어떤 위치 인코딩이든 상관없나?
A. 거의 그렇지만, 상대 위치(RoPE/ALiBi)가 일반화에 약간 유리한 경향.
추후 컨텍스트 확장 가능성이 있으면 RoPE 계열이 안전.
Q. RoPE base 값을 바꾸면 기존 가중치를 다시 학습해야 하나?
A. 소폭 조정(NTK-aware)은 재학습 없이도 어느 정도 작동.
큰 폭 확장은 소량 파인튜닝(YaRN 등)을 병행하면 안정적.
Q. ALiBi와 RoPE 중 무엇을 골라야 하나?
A. 대부분의 오픈 LLM 생태계가 RoPE 중심이라 도구/호환성 면에서 RoPE가 무난.
특정 외삽 특성이 필요하면 ALiBi도 후보.
Q. 멀티모달이면 무조건 M-RoPE인가?
A. 다축 위치가 필요한 이미지/비디오에서 유리. 모델 구현이 정한 축 분할을 따라야 함.
14. 핵심 요약 체크리스트
긴 글을 한 장으로 압축하면 다음과 같습니다.
[ ] self-attention은 순서를 모른다 -> 위치 정보 주입 필수
[ ] sinusoidal: 파라미터 없음, 외삽 제한적
[ ] learned: 데이터 적합, 외삽 불가
[ ] 상대 위치: 거리 기반 -> 일반화/외삽 유리
[ ] RoPE: Q,K 회전으로 상대 위치 인코딩, 추가 파라미터 없음, 현 표준
[ ] ALiBi: 거리 비례 페널티, 외삽 양호
[ ] 길이 외삽: PI < NTK-aware < YaRN (확장 폭/품질 순)
[ ] M-RoPE: RoPE를 다축으로 -> 멀티모달/임의 해상도
[ ] 확장 후엔 짧은 문맥 회귀 검증을 반드시
마치며
위치 인코딩은 "self-attention이 순서를 모른다"는 근본 한계를 메우는 장치입니다. 사인파에서 출발해 학습형, 상대 위치를 거쳐, 오늘날에는 회전으로 상대 위치를 우아하게 인코딩하는 RoPE와 거리 페널티를 거는 ALiBi가 주류가 되었습니다. 그리고 NTK, YaRN 같은 외삽 기법은 재학습 없이 컨텍스트를 늘리는 길을 열었고, M-RoPE는 이 아이디어를 멀티모달로 확장했습니다.
위치 인코딩을 이해하면 "왜 이 모델은 긴 컨텍스트에서 무너지는가", "어떻게 컨텍스트를 안전하게 늘릴 것인가" 같은 실무 질문에 답할 수 있습니다. 앞선 두 글(Transformer 구조, 어텐션의 진화)과 함께 읽으면 현대 LLM의 핵심 골격이 하나로 연결될 것입니다.
참고 자료
- Su et al., "RoFormer: Enhanced Transformer with Rotary Position Embedding" (arxiv 2104.09864): https://arxiv.org/abs/2104.09864
- Press et al., "Train Short, Test Long: Attention with Linear Biases (ALiBi)" (arxiv 2108.12409): https://arxiv.org/abs/2108.12409
- Peng et al., "YaRN: Efficient Context Window Extension of Large Language Models" (arxiv 2309.00071): https://arxiv.org/abs/2309.00071
- Vaswani et al., "Attention Is All You Need" (arxiv 1706.03762): https://arxiv.org/abs/1706.03762
- Wang et al., "Qwen2-VL" (arxiv 2409.12191): https://arxiv.org/abs/2409.12191
- Hugging Face Transformers 문서: https://huggingface.co/docs/transformers/index
- PyTorch 공식 문서: https://pytorch.org/docs/stable/index.html
- Qwen 모델 저장소: https://github.com/QwenLM
현재 단락 (1/207)
self-attention은 입력 토큰들의 집합을 보고 가중 평균을 냅니다. 그런데 어텐션 연산 자체는 순서를 모릅니다. "나는 너를 좋아해"와 "너는 나를 좋아해"는 같은 단어 ...