長上下文 是什麼?
Long Context:長上下文 的完整解釋
指大型語言模型能夠處理和理解更長输入序列的能力,通常指支援數千到數百萬個 token 的上下文窗口。
核心概念
長上下文(Long Context)是指大型語言模型處理更長輸入序列的能力。在自然語言處理任務中,許多重要的語義和語法信息需要跨越較長距離才能表現。例如,在小說中,人物特徵可能在開頭定義,在故事中間被提及;在技術文檔中,引言和結論可能相隔數頁。
傳統的 Transformer 模型(如原始 BERT 用 512 token,GPT-2 用 1024 token)的上下文窗口受限,無法有效利用這些長距離信息。現代長上下文模型通過多項創新,將上下文窗口擴展到 4K-128K 甚至更多。
長上下文不僅是一個工程挑戰,也涉及深層的機制問題:注意力機制如何在更大規模上保持有效性、位置編碼如何編碼更多位置、記憶體如何支撐更長序列。
運作原理
長上下文的挑戰
計算複雜度
標準的多頭注意力複雜度為 O(n²d),其中 n 是序列長度,d 是嵌入維度。當 n 從 512 增加到 32K 時,計算量增加 4096 倍。在 GPU 上,這導致訓練和推理時間的指數增長,成為實際部署的瓶頸。
記憶體占用
除了計算,記憶體占用也是瓶頸。KV 快取(用於自迴歸推理)的大小為 O(n × d),對於 32K 序列,快取大小可能達數十 GB,遠超單個 GPU 的記憶體(通常 16-80 GB)。
訓練穩定性
更長的序列意味著更複雜的梯度流動。注意力權重在長序列上可能變得不穩定,導致訓練困難。
外推性
訓練時的位置編碼通常基於訓練序列長度。推理時若遇到更長序列,模型需要外推位置編碼,這對某些編碼方法不友好。
解決方案
注意力機制優化
稀疏注意力:如 Longformer、BigBird,限制每個位置的注意力範圍,複雜度降至 O(n√n) 或 O(n)。
滑動窗口注意力:如 Mistral,每個位置只注意鄰近的固定窗口,複雜度為 O(n×w)。
分組查詢注意力(GQA):減少 KV 頭數,降低記憶體占用。
多查詢注意力(MQA):更激進的 GQA,單個 KV 頭被所有 Q 頭共享。
位置編碼改進
RoPE 加 YaRN:RoPE 的相對位置性加上 YaRN 的動態頻率調整,增強外推性。
ALiBi:線性位置偏置,無需嵌入層修改,天然支持長序列外推。
位置插值:線性插值或內插法,調整位置索引以適應更長序列。
KV 快取優化
量化:將 KV 快取量化為低精度(如 int8),減少記憶體占用 4-8 倍。
頁面注意力(Paged Attention):如 vLLM 採用的分頁策略,提高記憶體利用率。
快取蒸餾:選擇性保留重要的 KV 對,丟棄冗余信息。
訓練技巧
漸進式訓練:從短序列開始,逐步增加序列長度。
位置繫數學習:學習調整位置編碼的參數,以適應更長序列。
梯度檢查點:減少反向傳播中保存的中間激活,節省記憶體。
實際應用
Claude 系列
Anthropistic 的 Claude 模型支援較長上下文。Claude 1 支持 100K token,Claude 2 增加到 200K token。這使得 Claude 能夠分析整部小說、長文檔、代碼庫等。
GPT-4 變體
OpenAI 的 GPT-4 Turbo 支援 128K token 上下文。結合改進的位置編碼和注意力機制,GPT-4 Turbo 在長文檔理解和分析上表現優異。
LLaMA 2 Long
Meta 的研究表明,可以通過位置插值將 LLaMA 2 的上下文從 4K 擴展到 32K,性能損失小於 2%。
Mistral Long
Mistral 7B 雖然訓練於 8K 序列,但通過改進的位置插值和滑動窗口注意力,推理時可支援更長序列。
應用場景
文檔分析:分析長論文、法律文件、技術規範等。
代碼理解:處理整個代碼庫或長源文件。
長文學作品:分析或生成小說、故事等。
多輪對話:在長對話中維持一致性和連貫性。
信息檢索:在長檔案中查找和總結相關信息。
常見誤區
誤區一:支援長上下文就能理解整個長文檔。實際上,更長的上下文不一定意味著更好的理解。模型仍然受限於學習能力和注意力的有效性。某些長文檔中的信息可能分散且不連貫,即使提供完整上下文,模型也可能無法很好地綜合。
誤區二:長上下文在所有任務上都有幫助。實際上,某些任務(如句子分類、詞性標註)不需要長上下文。盲目使用長上下文只會增加計算成本,無益於性能。
誤區三:長上下文能力不會隨訓練序列長度衰減。實際上,模型對超出訓練序列長度太遠的內容,理解能力會下降。例如,訓練於 4K 的模型,在 100K 推理時,對開頭的信息可能遺忘或忽視。
誤區四:所有位置編碼方法都適合長上下文。實際上,某些位置編碼(如 Sinusoidal)外推性有限;某些(如 RoPE)需要改進;只有 ALiBi 等天然支援長序列。
與相關技術的比較
與檢索增強生成(RAG)的比較:RAG 通過檢索相關文檔片段來擴展上下文,而長上下文直接接收完整輸入。長上下文在理解完整文檔的全局結構上更優,RAG 在處理超大規模文檔語料上更高效。
與記憶機制的比較:某些模型採用記憶機制(如存儲歷史對話摘要)來擴展有效上下文。長上下文是直接方法,記憶機制更靈活但可能遺漏細節。
與多輪提示工程的比較:通過精巧的提示策略多輪查詢,可在短上下文下完成長上下文任務。長上下文更直接,但成本更高。
與模型集合的比較:多個短上下文模型的集合可能無法替代單個長上下文模型,因為全局一致性和連貫性需要統一的上下文。