更新時間:2025-03-17 09:23:50作者:佚名
最近,在漫長的背景下有越來越多的業務需求,這只是當前功能和主流解決方案的基本內容的簡要摘要。
長期文字最相關的是自然的位置編碼。現在,許多模型使用繩索,這是位置編碼。繩索的基本內容以前已經對其進行整理。
關于長篇小說
從2023年中期開始,主要的LLM制造商開始關注長篇小說問題。在2023年5月,克勞德(Claude)支持長度為100k令牌。在6月和7月,Chatgpt3.5還支持16K,ChatGLM2-B的最大長度可以達到32K。
(一個單詞,ChatGLM系列一直非常好,從基本模型,長窗口,工具呼叫和代理商來看,我一直處于相對尖端的水平。我最近已經使用Chatglm3和Chatglm4進行了體驗。
大約在同一時間,LM-SYS的Longchat和Mosaiclm的MPT也支持16K和更長的環境。
剛剛在今年的農歷新年之前出現的QWEN-1.5系列桶也以32k的速度開始。還有一些支持超長窗口的型號
模型支持長度
Baichuan2
192k
gpt4-turbo
128K
是的
200k
基米
128K(200,000個漢字)
Claude2
200k
在完成基本模型效果后,大型制造商完成了他們可以贏得的排名,并專注于增長背景的能力(當然,長篇小說也有排名)。
為什么這么久?
長上下文要求
根據所使用的語言和令牌,每個令牌的相應編碼文本不同。以中文為例,在大多數模型中對應于每個令牌的漢字數量> 1.5個字符(某些有效的標記器可以實現2個以上的字符)。然后,200k令牌可以處理30w單詞的上下文。
我剛剛讀過劉·辛云(Liu Zhenyun)的小說《一句話價值一千句話》。整本書大約是270,000個單詞,這意味著這些長篇小說模型現在可以在幾秒鐘內閱讀小說,然后與我交換我的經歷,或者告訴我本書的摘要,或幫助我在文本中找到一些詳細的描述。
以上方案對應于大型模型的工具場景。我們可以使用大型模型閱讀論文,總結研究報告或閱讀代碼的能力。這些場景需要相對較長的上下文輸入。
大型型號,抹布(檢索效果的一代)也有一個流行的應用程序方案,它對長上下文輸入也有要求。但是,在抹布中,大多數輸入文本不是直接來自用戶輸入,而是檢索到的。
除了基于工具的應用程序方案外,還有一些個性化的方案,這些方案也對長篇小說有要求。例如,一些智能助手需要長時間記住用戶的喜好和設置。這些偏好和設置可以以propt或對話的形式持續存在,當進行新的對話時,將這些內容與用戶的新輸入進行處理。
實際上,即使是單個聊天也可能要求模型處理更長的上下文。例如,我們可以讓模型扮演特定的電影和電視角色或游戲角色與我們交談。目前,通常會設置該模型,例如這是什么樣的任務,故事背景和世界觀的樣子以及現在需要溝通的哪些方面。這些設置將以提示的形式在開始時輸入模型。隨著對話的進行,如果模型的文本能力很長,則可能會忘記我們之前給出的設置,這將導致經驗中的問題。
上面的示例實際上導致了長期文本要求的更具體的內容:(1)當文本相對較長時,您仍然可以說人類語言,并且PPL還應較低(2)除了說人類語言外,您還應該能夠考慮到上述詳細信息,并且應該沒有自我糾紛。
如何支持長篇小說
看來許多當前的應用程序方案確實具有較長的上下文要求,那么如何實施它們?
如果我們直接訓練2K/4K長度的模型,然后在推斷時設置一個8K或16K的窗口,那么PPL將急劇上升,從而導致該模型無法說到人類語言。在談論繩索時提到的原因之一是該模型無法處理尚未經過良好培訓的位置編碼。
直接培訓
由于在訓練期間使用2K/4K無法在8K/16K/32K+的上下文長度上得到很好的推理,因此在培訓期間直接使用更長的數據來訓練還不夠嗎?
從理論上講,這個想法是可行的,但是您在實踐中會遇到一些問題(他可能認為這不是問題)。
1。培訓數據
直觀地說,要培訓長上下文模型,需要長文本。要達到32K或更大的長度,它只能是書籍。
當然,我們還可以將多個中長的文本拼寫,然后將其用于培訓。例如,當過濾4K長度數據時,這8件足夠長。然后,使用注意力面具來限制文本的每個段落之間的注意力,以便他們可以在各自的位置訓練每個段落而不相互干預。即使您不戴口罩,效果也很好。
通常,它是[連續的長文本]> [多個中等文本剪接](也可用)
2。資源消耗
讓我們簡要介紹一下變形金剛在培訓中消耗的資源。
假設該模型具有圖層,詞匯尺寸為,隱藏的大小為,批處理大小為,并且訓練窗口長度為,并且使用Adam Optimizer進行訓練(需要一階和二階動量)。為了簡化估計,可以假定注意力頭的數量為1。
(1)參數數量
模型的總參數數量= Word Vector參數數量 + *解碼器層參數數量=
您可以看到參數數量與窗口長度無關,并且模型確定它是固定值。
(2)計算的數量
一次性正向計算量=輸出分類標頭logits計算 + *每層計算數量
看看計算數量和參數數量之間的關系。忽略參數數量和計算數量中的低階項,然后
可以看出,隨著輸入長度的增加,總計算量為平方。目前,基本上可以將其視為線性。當前,大多數型號的范圍在1K至1W的范圍內,當它們不超長時,基本上可以被認為與這些模型相當。計算是長度的“弱”二次關系
(3)視頻記憶
在訓練過程中,視頻內存主要包括模型參數,梯度,優化器狀態值和中間激活值。
在訓練過程中,每個參數()具有相應的梯度(),每個參數對應于具有一階動量和二階動量()的優化器。在混合精度訓練中,半精度用于正向計算和梯度計算,優化器會備份單位優化器狀態,??梯度和參數以更新參數,因此共同的參數占據。
該部分與輸入長度沒有直接關系。
需要占據視頻內存的另一部分是中間激活值。
保存激活值是計算梯度,因此每個矩陣乘法,軟磁性和輟學都需要保存輸入值的中間激活值。
對于注意力層,輸入時,您必須首先投射需要保存的中間值;計算重量時,您需要乘以矩陣,并且需要保存矩陣的值;執行SoftMax時,您需要保存輸入;依此類推,所有需要保存的中間激活值都是。對于圖層模型interpolation是什么意思,將其乘以。
可以看出,中間激活值隨著平方關系的增加而增加。當訓練4K長度模型和32K長度模型時,激活值所需的視頻記憶增加了64倍。在這種情況下,要么擴展集群,添加更多的GPU,降低批量的大小,要么增加梯度積累的價值,這無論如何都會增加培訓成本。
小型型號(例如2B,7b)可以是硬連線并支持16k或32k的長度,但是對于較大的長度(200k)或較大的型號(34b,70b+),這將更便宜。
現在的一般方法是將其分為兩個階段。在第一階段,使用2K或4K訓練基本模型。在模型學習了文本內容和短位置關系之后,然后使用比第一階段少的數據在長篇小說中優化效果。
在第二階段,如何通過更少的培訓來取得更好的結果。
線性插值位置插值
6月23日,META提出了一種線性插值方法PI(位置插值),用于“通過位置插值擴展大語模型的上下文窗口”,該繩索可以將2K的基本模型擴展到32K,并在1K訓練下實現良好的結果。
相比之下,通過直接微調擴展的Llama模型僅顯示有效上下文尺寸kmax的最小增加到2048年至2560,即使在微調超過10000步之后,也沒有明確指示窗口尺寸的加速度。
相反,直接基于基本模型的長文本微調的效率相對較低。經過10,000步的訓練,有效長度僅從2048年增加到2560。
看來,盡管繩索具有許多優勢,但不包括長上下文外推。
還對本文中繩索的外推性能進行了一些分析。最初,繩索是相對位置編碼,具有遠程衰減的特征。從理論上講,它應該具有某些外推能力,但實際上并非如此。簡而言之,紙張發現,當相對位置差異不大時(
查看上圖中間的圖片。當該位置超過3000時,突然出現了較大的注意力評分。右圖的圖使用插值方法,這是相對穩定的。
(遠程衰減上邊界問題的特定推導過程將不會擴展。有興趣的朋友可以閱讀本文的原始文本)
另一方面,PI甚至可以在無需插值的情況下就具有一定的長窗口功能。
插值的概念如下:如下圖所示,左上部分表示預先訓練的2K長度位置代碼,右上部分表示基于此基礎的直接外推,因此,以前未經培訓的許多值將出現,并且模型的學習成本相對較高;下半部分代表基于已經訓練的2K模型的插值,類似于每兩個位置代碼之間插入一個位置點,因此總位置表示從2K增加到4K。在此基礎上,進行了少量的微調,該模型可以快速學習新的位置表示。
這個想法也非常直觀。例如,原始模型學到了位置1,位置2,位置3 ...的某個規則,現在我告訴該模型,該位置不一定是整數,而是位置1,位置1.5,位置2,位置2.5 ...盡管值已經發生了變化,但相對關系仍然存在,因此該模型還可以在原始學識淵博的關系的幫助下迅速延伸到“ 0.5”位置。
由于三角函數的平滑性質,我們可以重新定義注意力評分的計算,以使結果沒有異常大的值,即,它是原始長度(即2048年),我們想增加的長度(8k/16k/32k等)。
更具體地說,是為了繩索進行一些修改
等效于位置的分辨率已從1下降。
(分析,但實施非常簡單。工程師的福音。我真的希望這些論文能夠在將來給出這樣的結果)
然后使用數萬到數十萬個樣本進行預訓練,這很好。
(文章還具有隨后的重點。在訓練長篇小說之后,在短上下文方案中效果略有下降)
NTK意見插值
線性插值等效于直接線性地拉伸COS函數,減少不同位置之間的差異,從而使模型之間的區別降低,這有些簡單且粗糙。 NTK感知的插值在理論上提出了一種更“精致”的方法,這是一種在繩索上進行非線性插值的方法。 Codellama使用此方法將長度擴展到1m。
NTK是神經切線核,神經可能的核。這是什么?讓GLM4幫助回答
神經切線內核(NTK)是深度學習理論的概念,這是一種理論工具,在訓練無限范圍的神經網絡時會出現。在深度學習領域,寬度通常是指網絡中每一層的神經元數量。 NTK的提議為理解深度學習提供了一種新的觀點,尤其是當網絡寬度趨于無限時,線性模型可以近似網絡的行??為。
理想情況下,當網絡寬度傾向于無限時,網絡訓練過程可以通過固定的內核函數來描述,即神經切線核。該內核函數描述了網絡輸出與輸入之間關系的性質,從而使我們可以使用內核方法來分析此類網絡的訓練和概括能力。
具體而言,NTK允許我們預測網絡權重的演變,并且隨著培訓的進行,以及網絡在無限寬的網絡中如何隨時間變化。這些預測在數學上更清晰和分析性更為清晰,有助于我們深入了解深度學習的工作原理,尤其是在概括和優化方面。
NTK的研究為設計新的網絡體系結構,培訓算法和理論分析提供了重要的理論基礎。它還表明,在某些條件下,深度學習可以簡化為傳統的統計學習理論,例如核方法,這些理論為將深度學習與經典的機器學習理論聯系起來提供了橋梁。
大致了解這一點。那么,NTK對長篇小說擴展有何評論?
它認為,線性插值可以平等地在各個方向上處理組件并降低旋轉速度interpolation是什么意思,這是一個問題。
回想一下,在繩索中,位置的輸入向量的矩陣長度像這樣“旋轉”
它將輸入矢量的元素分為兩組,總共有兩個組,分別有兩個元素,并且不同的組分別旋轉。在這里,我們可以發現每個組的旋轉速度不同,因為可以看出,組越小,旋轉越快,旋轉越大,旋轉速度就慢。在這里,總旋轉速度越大,整體旋轉速度越慢,反之亦然。在同一位置,由于不同的旋轉速度,位置向量的信號頻率高且低。前部較高,頻率越低。
不加選擇地提取高頻和低頻信息將失去許多重要的高頻信息,這不是很好。高頻信號應推斷,以防止分辨率太低,所有分辨率都被擠壓在一起。低頻信號適合插值。
如何實現“高頻外推和低頻插值”?
首先,在談論繩索時,對于二維情況,
當擴展到高維條件時
在, 。
在此公式下,線性插值等效于
變得
1“ data-formula-type =” inline-equation“ style =”>,這等同于壓縮。
NTK感知的縮放繩索已更改,具體來說,它的基本值已修改(最初是10,000的繩索)
有
它等效于繁殖系數。當它相對較小時,它接近1,等效于直接外推。當它相對較大時(請注意,從0到[errata]的值應為d/2-1),它接近,接近線性插值。
引用了Zhihu文章的觀點,以了解NTK-Aware Interpolation
有趣的是,繩索的行為就像時鐘。 12小時的時鐘基本上是一條繩索,尺寸為3,底座為60。因此,每秒鐘,每一分鐘每分鐘,每分鐘,小時手每分鐘都會旋轉1/60。現在,如果您將時間降低了4次,則是第二次使用的線性繩索縮放。不幸的是,現在每一秒都不同,因為現在二手幾乎不會每秒移動。因此,如果有人給您兩個不同的時間,只有一秒鐘的時間,您將無法將它們與遠處區分開。 NTK感知的繩索擴展不會放慢時間。一秒鐘仍然是一秒鐘,但它將幾分鐘減少了1.5次,小時減少了2次。這樣,您可以在半天的一小時零24小時內握住90分鐘。因此,現在您基本上的時鐘尺寸為129.6萬秒,而不是43.2k秒。由于不需要小時手來準確測量觀看時間的時間,因此至關重要的是,比秒鐘更大的時間縮放小時至關重要。我不想失去二手的準確性,但是我可以承受微小手甚至小時手的準確性損失。
此外,Su Jianlin從“主要”的角度分析了繩索。有興趣的朋友可以閱讀原始文本,這也非常聰明。
在紗線的論文中,NTK的優勢和缺點被評論
鑒于[6]的結果,與PI相比,該方法在擴展非注冊模型的上下文大小方面的表現要好得多[9]。但是,這種方法的一個主要故障是,鑒于它不僅是一種相互作用方案,因此某些維度略有推斷為“界外”值,因此用“ NTK-Aware”干擾[6]對PI [9]進行微調。此外,由于“界外”值,理論量表因子s不能準確描述真實的上下文擴展量表。實際上,對于給定上下文長度擴展,必須設置比例值S高于預期尺度。
NTK的優點是它可以比無線性插值做得更好,而無需微調。但是,由于低頻部分仍將被外推到范圍之外的值,因此必須將系數設置為大于所需的系數。例如,如果您想在32K下取得更好的結果,則必須選擇大于8的結果,例如16。
NTK-PORTS
NTK-Parts方法在NTK插值的基礎上有另一種思想。它認為,無論是線性插值還是NTK感知的插值,它都認為繩索的所有組成部分對網絡都同樣重要。 NTK-Poarts的想法認為,應對不同的組件進行不同的處理,并且它們對網絡的影響也不同。
對于組件,繩索的波長嵌入
表示一輪旋轉所需的長度。當它很小時,波長很短,反之亦然,波長很長。這也對應于我們之前所說的,前面的組件是高頻,背面的組件是低頻。
這里可以觀察到,當它相對較大時,波長可能會更大。在這種情況下,繩索尚未單圈旋轉,這將導致該組件的分布不均勻(例如,如果僅旋轉轉彎的1/4,則值全部集中在0?1之間,并且對于-1?0,則沒有值。在這種情況下,該維度的編碼等同于絕對位置編碼,因為幾乎每個位置都有其獨特的價值。相反,當它相對較小時,模型只能訪問相對位置信息。
此外,插值將導致在相鄰或接近位置的緊密關系(因為旋轉量很小并且點產品較大),并且文章認為這將損害該模型理解本地關系的能力,因此被選為不介入高頻部件。 NTK-PORTS的想法是
引入了一個比例來表示波長與上下文長度之間的關系。還有兩個閾值可以區分上述三種情況。如果認為波長很大,并且認為波長很小。為方便起見,定義坡道功能
NTK-PARTS插值可以定義為一對操作
這里有兩個超級參數要確定。根據實驗給出的文本中給出的建議值是,當波長與上下文長度一樣長時,如果波長與上下文長度一樣長,則認為波長是較大的,并且僅插值。當波長小于上下文長度的1/32時,被認為波長比上下文小得多,因此僅被推斷出來。
動態NTK縮放繩
無論是線性插值還是NTK感知的插值,都可以使用固定系數來縮放原始繩索,該系數將有一些局限性。一方面,在這種情況下,模型可以支持的最大上下文是由使用的縮放系數確定的。如果超過此范圍,將仍然會出現注意力評分的風險。另一方面,在解碼過程中,當解碼長度尚未達到訓練長度時,它用于修改基座,這也可能導致一些損失。基于NTK插值,動態NTK縮放的繩索將固定系數更改為動態系數。
具體來說,是
這樣,隨著解碼長度的增加,當l“ data-formula-type =“ inline-equation”樣式=“”>從1逐漸增加時,無需更改它。
要注意的一件事是,當使用動態系數時,您應該注意KV-Cache的緩存機制是否正確,并在使用繩索之前記住要緩存值。
紗
上述方法均使用插值。研究人員發現,通過插值,令牌之間的距離變得更近(因為旋轉角度現在較小),并且平均最小距離正在減少,因此注意軟軟療法的分布將變得更加尖銳(也就是說,它們都在一定間隔中集中)。換句話說,繩索的原始長距離衰減特征變得更弱且不明顯,這將導致該模型更加注意更多的令牌,這將削弱注意力機制并導致產出質量的降低。
當繩索插值到更長的上下文時,注意軟馬克斯分布中的熵會減少,因此研究人員的目標是逆轉此熵扣除額(即增加注意力集的“溫度”)。這可以通過將中間注意矩陣乘以溫度1“ data-formula-type =” inline-equation“ intline-equation” style =“”>,但是由于將繩索編碼為rope作為旋轉矩陣,因此可以簡單地通過恒定因子擴展繩索的長度。這樣,您就不必修改注意力代碼。
通過對駱駝1和駱駝2的實驗,本文提出了建議的值。該值的效果可以通過Llama版本和規模模型獲得更好的結果,這意味著在長文本中,這種熵變化很常見。
紗線的最終方法是將NTK逐個組合在一起,并使用此溫度值來調整注意力評分。
紗線在微調方面更好,沒有微調。
logn
LOGN是指通過LOGN改善注意力計算中縮放因素的方法,該方法在他的博客中分析了su jianlin。一般的想法與紗線的縮放相似。
簡而言之,我仍然希望,當上下文漫長時引入更多的令牌時,現有令牌仍然可以集中在代幣不會太分心的情況下。因此,提出了新的注意力評分公式
如您所見網校頭條,當l“ data-formula-type =“ inline-equation” style =“”>時,其效果類似于YARN中的縮放。
其他
在擴大推理的時間長度時,還有許多其他有效的任務,例如各種窗口關注,流媒體LLM,Longlora,Focus Transformer等,以及對數據,評估等的更多分析,需要一個一個人整理。
概括
較短的預估計模型(2K,4K)應用于較長的上下文,將由于訓練和推理之間的不一致而導致效果下降。
這兩個問題分別可以通過編碼和注意力評分縮放來緩解這兩個問題。
線性插值PI,NTK插值和分割的NTK插值都可以減輕第一個問題,而LOGN和YARN考慮了第二個問題。目前,這些方法在實際應用中有許多變化,包括修改超參數,功能的重新定義等。
參考
【1】分析變壓器模型的參數數量,計算數量,中間激活,KV緩存
【2】通過位置插值擴展大語模型的上下文窗口
【3】變壓器升級路徑:10。繩索是編碼的β計量
【紗4紗:大語模型的有效上下文窗口擴展
【5】基于調節繩索旋轉角度的大型模型長度的外推法的詳細說明
【6】關于LLM長度外推的簡短討論[7]我想讓大型模型在Propt中了解更多示例,此方法使您可以輸入更多字符
【8】變壓器升級路徑:8。長度外推和位置穩健性
【9】繩索外推優化 - 支持192K上下文長度
數據報