Rotary Positional Embedding(RoPE)用不同頻率的旋轉,把Token位置直接帶進Query與Key。它讓Attention Score自然包含相對位置差異,因此成為多數現代LLM的主流位置編碼。RoPE能支援長上下文,卻不代表模型可以無限外推。
當推論長度遠超過訓練長度,高頻與低頻維度會進入模型沒看過的位置分布,可能造成注意力失準、短距離能力下降或遠端位置混淆。Position Interpolation、NTK-aware Scaling、YaRN與LongRoPE都是重新安排旋轉頻率的不同方法,需要以長Context和原始短Context同時驗收。
- RoPE把每兩個向量維度視為平面,依位置旋轉不同角度。
- Attention中的旋轉差會反映Token相對距離。
- 訓練長度外的角度組合屬於Out-of-distribution。
- Position Interpolation把長位置壓回原訓練範圍。
- NTK-aware方法依頻率維度採不同縮放。
- YaRN結合頻率修正與Attention Temperature,降低延伸訓練成本。
- LongRoPE以非均勻搜尋與漸進延伸處理超長Context。
- 標稱Context Window不能取代Passkey、Needle、排序、引用與P99延遲測試。
RoPE如何表示位置?
對向量中第i組二維分量,RoPE依位置m和頻率θ_i進行旋轉:
R(m, θ_i) =
[ cos(mθ_i) -sin(mθ_i) ]
[ sin(mθ_i) cos(mθ_i) ]
q_m = R(m) q
k_n = R(n) kQuery位置m與Key位置n的內積,可化成與m−n相關的旋轉,因此模型能感知相對位置。不同維度使用不同頻率:高頻維度對局部位置變化敏感,低頻維度則能跨越較長距離。
為什麼超出訓練長度會失準?
- 模型沒在訓練中看過更大的位置索引。
- 部分高頻維度在訓練範圍內已完成很多旋轉週期。
- 部分低頻維度在訓練期間尚未充分覆蓋。
- 延伸後的相位組合可能離開已學分布。
- 浮點精度與Kernel實作也會影響大位置計算。
- Attention本身可能偏好局部或特定位置。
模型可以接受更長Tensor,不代表它能正確使用所有位置。流暢摘要往往掩蓋錯誤引用、時間排序和遠端條件遺失。
RoPE Base 的作用
θ_i = base ^ (-2i / d)Base決定不同維度的頻率分布。提高Base會降低部分維度旋轉速度,有機會延長可分辨距離;直接修改Base可能破壞原模型學到的短距離分布,因此通常需要微調或專門Scaling方法。
Position Interpolation
Position Interpolation把目標長度的位置索引壓縮到原始訓練範圍。若模型原本訓練到L,現在要延伸到L’,可使用比例s=L’/L:
m_interpolated = m / s- 避免直接使用模型沒見過的極大角度。
- 需要少量Long-context Fine-tuning適應壓縮後位置。
- 所有距離都被壓縮,局部辨識可能受到影響。
- 延伸倍率越高,位置解析度壓力越大。
Position Interpolation提供簡單基線,但不區分不同頻率維度的訓練程度。
NTK-aware Scaling
NTK-aware方法不對所有頻率做相同比例縮放,而是調整RoPE Base或頻率分布,讓高頻局部能力與低頻長距離能力取得不同取捨。相關實作名稱與公式在不同框架中不完全一致,因此部署時要確認模型配置和引擎真正採用的算法。
- 高頻維度較偏局部Token關係。
- 低頻維度較偏長距離位置。
- 動態版本可能依實際Sequence Length調整Scaling。
- 不同Tokenizer和微調資料會改變結果。
- 配置名稱相同不代表實作完全一致。
YaRN在做什麼?
YaRN(Yet another RoPE extensioN method)結合不同頻率區段的Interpolation/Extrapolation策略,並加入Attention Magnitude或Temperature修正。論文報告它以較少Long-context Token和訓練步驟延伸LLaMA Context。
- 辨識需要Interpolation的頻率維度。
- 保留部分已具外推能力的低頻維度。
- 修正延伸後Attention Logit尺度。
- 通常仍需要Long-context Fine-tuning。
- 要重新驗證短Context和困惑度。
YaRN是RoPE延伸方法,不會降低KV Cache容量;Context越長,KV、Prefill和服務成本仍會增加。
LongRoPE與LongRoPE2
LongRoPE利用兩種非均勻性:不同RoPE維度不應使用相同縮放,不同Token位置也不一定需要完全線性分配。它透過搜尋找到非均勻Scaling,再以漸進式Fine-tuning延伸到更長Context。
- 先搜尋維度與位置相關Scale。
- 逐步從較短延伸到更長Context。
- 另做短Context重校準,降低原始能力損失。
- LongRoPE2使用Needle-guided Perplexity協助搜尋。
- 論文最大長度不等於所有任務有效長度。
和MLA的Decoupled RoPE差在哪?
| 技術 | 主要問題 |
|---|---|
| RoPE Scaling | 如何讓位置編碼適應更長Token序列 |
| Decoupled RoPE | 在MLA中把位置敏感Key與可壓縮內容Key分開 |
| MLA | 降低KV Cache維度和Decode HBM讀取 |
| KV Quantization | 降低每個Cache元素的Bytes |
MLA架構可閱讀Multi-head Latent Attention怎麼運作?。
短Context能力為什麼可能退化?
- 位置距離被壓縮,局部解析度下降。
- Fine-tuning資料多為長文本,改變原分布。
- Attention Temperature調整不適合短輸入。
- 模型學會依賴延伸後位置模式。
- 推論引擎Scaling參數與訓練不一致。
驗收必須保留原始短Context Benchmark、常用Prompt與Instruction Following,不能只報告128K以上結果。
長Context驗收矩陣
| 測試 | 目的 |
|---|---|
| Passkey/Needle | 定位遠端明確事實 |
| Multi-needle | 多個位置與干擾 |
| 排序與時間線 | 保持相對位置 |
| 版本比較 | 區分相似段落 |
| 程式碼跨檔 | 遠距依賴與Symbol |
| 來源引用 | 答案能回到頁碼和段落 |
| 短Context回歸 | 原始能力未被破壞 |
- 在前、中、後不同位置放置關鍵內容。
- 加入相似但錯誤的干擾段落。
- 測不同語言、數字、表格與程式碼。
- 記錄Accuracy、TTFT、KV、P99和成本。
- 比較原始模型與延伸模型。
部署檢查
- 確認Model Config中的RoPE Type、Factor與Base。
- 確認Tokenizer、Chat Template和模型版本一致。
- 確認Serving Engine支援該Scaling。
- 測最大長度以下多個代表點。
- 測短Context與原始Benchmark。
- 觀察KV容量與Prefill時間。
- 設產品層最大Input與Admission。
- 對超長請求提供RAG、摘要或分段Fallback。
能輸入一百萬Token,不代表每次都應使用一百萬Token。超長Prefill、KV Cache和資料噪音仍會提高成本與錯誤率。
常見問題
只改RoPE Factor就能延長Context嗎?
技術上可能讓模型接受更長輸入,但有效利用通常需要相容設定、微調和驗收。錯誤Factor會破壞短距離與長距離能力。
YaRN一定比Position Interpolation好嗎?
不一定。YaRN通常提供更細的頻率處理,但結果依模型、延伸倍率、資料和實作。應在相同任務下比較。
RoPE延伸會降低KV Cache嗎?
不會。它處理位置表示;Token數增加仍會使KV Cache和Prefill成本上升,除非搭配MLA、GQA、量化或稀疏注意力。
原始資料
RoPE延伸真正要保住的,是短距離解析與長距離位置同時可用。Position Interpolation、YaRN和LongRoPE只是不同Scaling方法;有效Context仍由訓練、模型、引擎和可驗收任務共同決定。
資料來源與延伸閱讀
- RoFormer與RoPE(arxiv.org)
- Position Interpolation(arxiv.org)
- YaRN(arxiv.org)
KEEP READING
接著讀什麼?
從同一主題繼續閱讀,或回到 YOLO LAB 的完整文章索引,找到下一個值得投入時間的問題。
發表迴響