본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 28. 04:15

abacusai/Long-Context

요약

Llama 모델의 컨텍스트 길이를 확장하기 위한 다양한 RoPE 인코딩 스킴과 실험 결과를 공유합니다. 선형 스케일링, 푸리에 기저 수정, xPos 방식 등을 적용하여 최대 16k 이상의 컨텍스트 길이를 확보하는 연구를 수행했습니다.

핵심 포인트

  • RoPE 인코딩 수정을 통한 Llama 컨텍스트 확장 실험
  • 선형 스케일링 및 푸리에 기저 조절 방식의 효과 분석
  • Instruction Fine-Tuning 결합 시 가장 우수한 성능 확인
  • 평가 방법론에 따라 스킴별 성능 순위가 달라질 수 있음

Transformer를 위한 위치 정보 (positional information) 인코딩 방식을 선택하는 것은 LLM (Large Language Model) 아키텍처의 핵심 요소 중 하나였습니다.

최근 저희와 커뮤니티의 다른 연구자들이 관심을 가져온 분야는 LLM을 더 긴 컨텍스트 (context)로 확장할 수 있는지 여부입니다.

저희는 RoPE (Rotary Position Embedding) 인코딩을 사용하여 2048 컨텍스트 길이로 사전 학습된 Llama의 컨텍스트 길이 능력을 확장하기 위한 다양한 스킴 (scheme)을 사용하여 일련의 실험을 수행했습니다. 여기에서 저희는 커뮤니티에 도움이 되기를 바라는 마음으로 일부 결과와 함께 학습 및 평가 스크립트를 공유합니다. 가장 성능이 좋은 모델인 IFT (Instruction Fine-Tuning)를 적용한 4배 및 16배 스케일의 선형 스케일링 (linear scaling) 모델의 경우, 다른 사람들이 사용하거나 자체 테스트를 수행할 수 있도록 가중치 (weights)도 공유합니다. 저희는 16배 스케일 모델이 최대 16k 컨텍스트 길이의 실제 작업에서 잘 작동할 것이며, 잠재적으로는 약 20-24k 컨텍스트 길이까지도 가능할 것이라고 믿습니다.

저희는 모델의 컨텍스트 길이를 확장하기 위해 매우 다양한 실험을 수행했습니다. 먼저, 기본 Llama 모델을 제로샷 (zero-shot)으로 단순히 사용하는 방법을 시도했습니다. 예상대로, 이는 2048 컨텍스트 길이까지는 잘 작동했지만 그 이후에는 매우 빠르게 성능이 저하되었습니다.

다음으로, 저희는 4096 컨텍스트 길이로 RedPajama 데이터셋에서 모델을 학습시키는 파인 튜닝 (fine tuning) 접근 방식을 조사했습니다. 이는 4096 컨텍스트까지 예상된 성능 향상을 가져왔으나, 다시 그 이상으로는 진전이 없었습니다.

컨텍스트 길이를 확장하는 또 다른 접근 방식은 RoPE 인코딩을 어떤 방식으로든 수정하는 것입니다. 여기서 저희는 많은 다양한 아이디어를 시도했습니다:

  • kaiokendev.github.io에서 설명된 선형 스케일링 (Linear scaling).
  • RoPE의 푸리에 기저 (Fourier basis)를 거듭제곱으로 스케일링하여, 저주파 (low frequencies)가 고주파 (high frequencies)보다 더 많이 늘어나도록 하는 방식.
  • 푸리에 기저 (Fourier basis)에 절단 (truncation)을 적용하는 방식. 저희의 아이디어는 모델이 학습 과정 동안 최소한 하나의 완전한 사이클을 가질 수 있을 만큼 충분히 빠른 주파수만을 보도록 하는 것이었습니다. 그보다 느린 모든 주파수는 0으로 설정되었습니다 (이는 회전이 전혀 없는 것과 동일하며, 즉 모든 컨텍스트 길이에서 동일하게 중요함을 의미합니다).
  • 위치 벡터 (position vector)를 무작위화 (Randomising)하는 방식.

특히, 저희는 RedPajama 데이터셋에 대한 미세 조정 (fine-tuning)과 Vicuna 데이터셋을 이용한 지시어 미세 조정 (instruction-fine-tuning)을 위의 접근 방식들과 결합했습니다. 이것이 가장 결실 있는 결과로 이어졌습니다.

마지막으로, xPos 논문에서 설명된 접근 방식을 구현하여 시도했습니다. 이 방식은 감쇠 진폭 패널티 항 (decaying amplitude penalty terms)을 추가하여, 푸리에 기저 (Fourier basis) 상에서 빠른 주파수가 느린 주파수보다 먼 거리에서 더 적은 영향을 미치도록 합니다 (이를 보여주는 유사도 히트맵 (similarity heatmaps)은 저희 블로그 포스트를 참조하세요).

아마도 저희가 내린 가장 날카로운 관찰 결과는, 서로 다른 평가 방법론/태스크 (evaluation methodologies/tasks)가 위에 상세히 기술된 접근 방식들의 서로 다른 순위를 도출한다는 점입니다. 이에 대해서는 아래에서 더 자세히 설명하겠습니다.

그럼에도 불구하고, 저희는 다음과 같은 일반적인 관찰 사항을 도출했습니다:

  • 선형 보간/스케일링 (Linear interpolation/scaling)이 모델의 컨텍스트 길이 (context length)를 늘리는 데 가장 견고한 (robust) 접근 방식인 것으로 보입니다.
  • N의 선형 스케일 (linear scale)을 사용하는 것이 반드시 모델의 컨텍스트 길이를 N배만큼 증가시키지는 않습니다. 예를 들어, 저희의 스케일 16 실험은 일반적으로 컨텍스트 길이가 32,000 (~2048 * 16)이 아닌 16,000 이후부터 성능이 저하되었습니다. 저희는 향후 연구를 통해 이 효과를 개선할 수 있는 아이디어를 계획하고 있습니다.
  • 절단 (Truncation)과 무작위화 (randomisation) 모두 퍼플렉시티 (perplexity) 점수는 매우 높게 나타나지만, 검색 (retrieval) 작업에서는 성능이 떨어지는 것으로 보입니다.
  • Vicuna 데이터셋을 활용한 지시어 미세 조정 (Instruction fine tuning)은 베이스 모델 (base model)이 처리할 수 있는 길이 내의 검색 컨텍스트에서는 정확도를 크게 향상시키지만, 베이스 모델이 실패하는 길이에서는 모델을 '수정'할 수 없습니다.

평가를 위해 저희는 두 가지 서로 다른 데이터셋을 사용했습니다:

  • 컨텍스트 내에서 부분 문자열 (substring)을 찾는 작업을 위한 LMSys 데이터셋 ('lines' 작업)
  • 다른 오픈 소스 베이스 QA 데이터셋을 기반으로 구축한 저희만의 오픈 북 질의응답 (open book question answering) 데이터셋인 WikiQA

또한, 저희는 다음 과정 동안 훈련 (train) 및 평가 (eval) 세트의 로그 손실 (log loss)을 살펴보았습니다.

LMSys 작업의 경우, 기존 데이터셋의 16,000 컨텍스트 테스트 케이스를 넘어 약 25,000의 컨텍스트 길이까지의 새롭고 더 긴 테스트 케이스를 생성했습니다.

WikiQA 작업은 Wikipedia 문서에 주어진 정보를 바탕으로 질문에 답하는 작업입니다. 저희는 Google Natural Questions의 단답형 (short answer) 형식 데이터를 기반으로 QA 작업을 구축했습니다. 이는 문서와 질문의 형식으로 구성됩니다. 저희는 질문에 대한 답이 문서에서 직접 잘라 붙여넣은 단일 단어 또는 짧은 문장인 단답형이 되도록 보장합니다. 이와 같이 작업을 구조화함으로써, 저희는 LLM이 컨텍스트 내에서 정답을 찾기 위해 어디를

저희는 대규모 Wikipedia 문서를 선정하고 이를 절단(truncate)하여, 2,000에서 16,000 토큰(token) 사이의 다양한 크기를 가진 동일 문서의 여러 버전을 확보했습니다. 각 문서 크기에 대해, 질문과 정답 텍스트를 서로 다른 위치, 즉 문서의 처음 10%, 중간 부분, 또는 마지막 10%에 배치한 여러 버전도 함께 준비했습니다. 동일한 문서의 여러 버전을 보유함으로써, 본질적으로 동일한 정보를 요구하면서도 모델 크기 전반에 걸쳐, 그리고 한 모델의 컨텍스트 위치(context positions) 내에서 철저하고 공정한 평가를 수행할 수 있습니다.

Wikipedia 기반 데이터셋의 잠재적인 문제는 모델이 컨텍스트(context)가 아닌 사전 학습된 코퍼스(pretrained corpus)를 통해 정답을 맞힐 수도 있다는 점입니다. 이를 해결하기 위해 저희는 또 다른 "변형된(altered)" 데이터셋을 생성했습니다. 이 데이터는 오직 수치적 정답을 가진 질문들로만 구성됩니다. 여기서 저희는 정답과 문서 내의 모든 정답 출현 위치를 다른 숫자로 변경합니다. 이는 기본적으로 LLM이 사전 학습된 코퍼스에서 기억해낸다면 틀린 답을 내놓도록 보장하기 위함입니다. 수정 방식은 다음과 같습니다:

  • 정답이 연도인 경우(매우 빈번하며, 즉 1000-2100 사이인 경우), 원래 값의 +/- 10 범위 내에서 다른 무작위 값으로 변경합니다. 연도는 연대기적 정보(chronological information)를 망가뜨려 문서의 해석을 터무니없게 만들지 않도록 특별 케이스로 취급합니다.
  • 정답이 그 외의 숫자라면, 동일한 자릿수를 가진 다른 무작위 숫자로 변경합니다.

저희는 원래의 QA 태스크를 Free Form QA (FFQA)라고 부르며, 변형된 태스크를 Altered Numeric QA (AltQA)라고 부릅니다.

저희는 두 가지 버전의 QA 태스크에 있는 모든 예시에 대해 "존재 정확도(Presence Accuracy)", 즉 모델이 생성한 답변에 정답이 부분 문자열(substring)로 존재하는지 여부를 측정하여 성공 여부를 평가합니다. WikiQA에서 모델의 추론(inference)을 실행하고 지표를 계산하려면 다음을 참조하십시오:

run_inference_WikiQA.py

compute_metrics_WikiQA.ipynb

[여기]

우리는 다른 사람들이 자신만의 긴 문맥 (long context) 실험을 수행할 수 있도록 이 데이터셋들을 HuggingFace에 공개합니다.

아래 결과에 대한 일반적인 사항으로서, 저자들은 이 작업에서의 정확도(accuracy) 차이가 모델 순위 품질을 특별히 나타내는 지표는 아니라고 믿습니다. 우리는 일반적으로 결과를 해석할 때 여기서 가장 광범위한 추세를 살펴봅니다.

또한, 베이스라인 (baseline)으로서, 표준 Llama-13b는 문맥 길이(context length) 2048까지만 0이 아닌 정확도를 가집니다 (그것의 Vicuna-instruction-fine-tuned 버전도 마찬가지입니다).

위에서 우리는 서로 다른 스케일링 (scaling) 접근 방식들을 비교합니다. 'Scale'은 지정된 스케일 값과의 선형 보간 (linear interpolation)을 의미합니다. 우리는 스케일 16을 사용한 선형 보간이 9000 이상의 문맥 길이에서 0이 아닌 정확도를 달성한 유일한 방식임을 확인했습니다. 하지만, 이는 짧은 문맥에서의 일부 정확도를 희생하는 결과로 나타나는 것으로 보입니다.

power = 0.5 기반 방식은 이 작업의 짧은 문맥에서 특히 잘 작동하는 것으로 보이지만, 문맥 길이가 증가함에 따라 정확도가 가장 급격하게 떨어집니다.

scale=16이 기대만큼 멀리 일반화되지 않는다는 점은 흥미롭습니다. 단순하게 생각하면, scale=4의 추세를 따를 것이라고 예상하게 됩니다. scale=4는 8192까지 0이 아닌 정확도를 유지하는데 (이는 원래 문맥 길이가 2048이고, 8192 = 2048 * 4이므로 합리적입니다. 이 범위를 넘어서면 모델은 이전에 접해보지 못한 키(key)와 쿼리(query) 사이의 상대적 거리를 보게 됩니다), scale=16은 2048 * 16 = 32768까지 계속해서 0이 아닌 정확도를 유지해야 합니다.

위에서 우리는 LoRA를 사용하여 Vicuna 지시어 세트 (instruction set)로 학습함으로써 발생하는 IFT (Instruction Fine-Tuning)의 영향을 보여줍니다. 우리는 IFT가 작지만 무시할 수 없는 차이로 정확도를 향상시킨다는 것을 확인했습니다. 그러나, 이것이 정확도 곡선의 전체적인 형태를 바꿀 만큼 충분하지는 않으며, 모델이 이 작업에서 0이 아닌 정확도를 달성할 수 있는 문맥 길이의 범위를 확장해주지도 않습니다.

위에서 우리는 모델이 학습할 때 사용한 값과 다른 다양한 스케일 값(선형 보간 (linear interpolation)을 위한)을 평가 시점에 적용하며 수행한 다양한 실험을 보여줍니다. 녹색 곡선은 베이스 모델(2048 컨텍스트로 학습됨)을 가져와 스케일 값을 적용한 결과를 나타냅니다. 이는 0이 아닌 정확도의 범위를 2048에서 4096으로 확장해주기는 하지만, 전체적으로 정확도가 낮습니다. 그러나 일반적으로 모델이 스케일 > 0로 학습되면, 평가 시점에 더 큰 스케일로 제로샷 (zero-shot) 수행을 상당히 잘 해내는 것으로 보입니다. 즉, 일관된 컨텍스트 길이의 범위를 매우 크게 증가시킵니다 (예를 들어, 위 두 그래프에서 8k 이상의 컨텍스트 길이에서는 0이었던 것과 달리, 여기서는 Train=4, Eval=8인 경우가 16k 컨텍스트 길이에서도 0이 아닌 값을 가짐을 비교해 보십시오). 하지만 이는 정확도 저하를 대가로 하며, 특히 Train=16, Eval=32의 경우에 그러합니다.

Train=16, Eval=12 실행 결과는 우리가 본 것 중 가장 긴 0이 아닌 정확도의 컨텍스트 길이를 가집니다. 이 모델은 약 20000의 컨텍스트 길이에서 0이 아닌 점수를 달성합니다.

아래 표에서는 두 모델 모두 scale=4로 평가되었습니다. 하지만 'no scaling' 모델은 scale > 1에서 파인튜닝 (finetuning)되지 않았습니다 (즉, 추가 학습을 경험하지 않았습니다). Scale=4 모델은 확장된 스케일에서 파인튜닝을 받았습니다.

Presence Accuracy (존재 정확도):

Context LengthIFT with Scale=4 on FFQAIFT No scaling on FFQAIFT with Scale=4 on AltQAIFT No scaling on AltQA
20480.32330.22170.72810.2982
...

참고: 16k 컨텍스트 길이에 대해, 우리는 추론 (inference) 중에 8의 스케일 인자 (scale factor)를 사용합니다. 이를 통해 원래의 2k 컨텍스트를 2*8=16k로 확장할 수 있습니다. 흥미로운 점은 스케일링된 모델이 스케일 인자 4로 학습되었음에도 불구하고, 추론 중에 성능을 크게 잃지 않으면서 16k(스케일 8)로 제로샷 보간 (zero-shot interpolate)을 할 수 있다는 것입니다. 그러나 이는 16k 데이터 포인트에서 정확도가 0으로 떨어지는 것에서 분명히 알 수 있듯이, 스케일링되지 않은 모델에서는 성립하지 않습니다. 이는 우리의 스케일링 및 컨텍스트 길이 보간이 작동함을 나타냅니다.

앞서 언급했듯이, 우리는 WikiQA 데이터의 서로 다른 버전을 만들기 위해 문서를 자르고 수정했습니다. 각 버전은 버전 이름에 명시된 바와 같이 특정 컨텍스트 길이(Context Length)까지 또는 그 지점에서의 모델 성능을 광범위하게 테스트하기 위한 것입니다.

평균 컨텍스트 길이 (Mean Context Length) |
최대 컨텍스트 길이 (Max Context Length) |
|---|---|
| ffqa_2k.json | 1936.71 | 3228 |
| ffqa_4k.json | 3805.06 | 5793 |
| ... |
평균 컨텍스트 길이 (Mean Context Length) |
최대 컨텍스트 길이 (Max Context Length) |
|---|---|
| altqa_2k.json | 1953.73 | 2698 |
| altqa_4k.json | 3737.39 | 5172 |
| ... |

위에서 볼 수 있듯이, 보간된 임베딩 (Interpolated Embeddings)을 미세 조정 (Finetuning)하는 우리의 기술은 WikiQA 태스크에서 입력 컨텍스트 길이의 증가에 대해 견고한(Robust) 좋은 모델을 제공하는 것으로 보입니다. 우리는 이 태스크의 두 가지 버전 모두에서 이를 입증합니다. 우리는 스케일 컨텍스트 (Scale Context) 4로 미세 조정을 수행하므로, 정확도가 4 * 2048 = 8192 크기의 입력 전까지는 떨어지지 않을 것으로 예상합니다. 이 한계를 넘어서도 우리는 어느 정도 합리적인 성능을 확인합니다. 이는 RoPE 임베딩 (RoPE Embeddings)의 주기성 (Periodicity)에 따른 결과로 보이며, 이로 인해 일부 특성들이 스케일 컨텍스트에 의해 설정된 한계를 넘어선 위치로 외삽 (Extrapolatable)될 수 있게 됩니다.

우리는 스케일 컨텍스트를 사용한 지시어 미세 조정 (Instruct Finetuned, IFT)이 성능의 상당한 도약을 이끌어낸다는 것을 보여주기 위해, 스케일 컨텍스트를 사용한 모델과 사용하지 않은 모델을 대조합니다. 두 모델 모두 평가 중에 여전히 스케일 컨텍스트 (=4)를 사용한다는 점에 유의하십시오. 흥미롭게도, 스케일된 RoPE 임베딩의 제로샷 (Zero-shot) 성능조차 무시할 수 없는 정확도를 보여줍니다. 그러나 임베딩을 명시적으로 미세 조정하는 것은 상당한 이득을 가져옵니다. 우리는 스케일 컨텍스트 계수에 의해 보간된 모든 위치에서 FFQA의 경우 거의 2배, AltQA의 경우 2.5배의 성능 향상을 확인했습니다.

우리는 개요에 설명된 모든 실험에 걸쳐 모델을 학습시켰습니다. 그중 모든 실험이 전체 평가를 수행할 만큼 유망해 보이지는 않았습니다. 일부 실험은 손실 곡선 (Loss Curves)이 유망해 보이지 않아 중단되었습니다. 어떤 경우에는 결과가 학습 중에 관찰된 손실 (Loss)과 항상 일치하지 않는다는 것을 발견하기도 했습니다.

아래 이미지들은 우리가 실행한 실험 중 일부의 곡선들을 보여줍니다:

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0