豐色 發自 凹非寺
量子位 | 公衆号 QbitAI
一提到提高大模型長文本能力,就想到長度外推或者上下文窗口擴展?
不行,這些都太費硬件資源了。
來看一個奇妙新解:
和長度外推等方法使用 KV 緩存的本質不同,它用模型的參數來存儲大量上下文信息。
具體辦法就是建一個臨時 Lora 模塊,讓它僅在長文本生成過程中 " 流式更新 ",也就是用先前生成的内容不斷作爲輸入來充當訓練數據,以此保證知識被存進模型參數中。
然後一旦推理完成,就丢掉它,保證不對模型參數産生長久影響。
這個方法可以讓我們不用擴展上下文窗口的同時,随便存儲上下文信息,想存多少存多少。
實驗證明,這種方法:
既可以顯著提高模型長文本任務質量,實現困惑度下降 29.6%,長文本翻譯質量(BLUE 得分)提高 53.2%;
還能兼容并增強現有大多數長文本生成方法。
最重要的是,能大大降低計算成本。
在保證生成質量小幅提升(困惑度降低 3.8%)的同時,推理所需的 FLOPs 降低 70.5%、延遲降低 51.5%!
具體情況,我們翻開論文來看。
建個臨時 Lora 模塊用完即丢
該方法名叫Temp-Lora,架構圖如下:
其核心就是以自回歸的方式用先前生成的文本上逐步訓練臨時 Lora 模塊。
該模塊适應性很強可以不斷調整,因此對不同遠近的上下文都能深入理解。
具體算法如下:
在生成過程中,token 是逐塊生成的。每次生成塊時,使用最新的 Lxtoken 作爲輸入 X 生成後續 token。
一旦生成的 token 數量達到預定義的區塊大小∆,就使用最新的塊啓動 Temp-Lora 模塊的訓練,然後開始下一個塊生成。
在實驗中,作者将∆ +Lx 設置爲 W,以充分利用模型的上下文窗口大小。
對于 Temp-Lora 模塊的訓練,如果在沒有任何條件的情況下,學習生成新的塊可能構不成有效的訓練目标,并導緻嚴重的過拟合。
爲了解決這個問題,作者将每個塊前面的 LT 标記合并到訓練過程中,将它們用作輸入,将塊用作輸出。
最後,作者還提出了一種稱爲緩存重用(Cache Reuse)策略來實現更高效的推理。
一般來說,在标準框架中更新 Temp-Loramo 模塊後,我們需要使用更新的參數重新計算 KV 狀态。
或者,重用現有的緩存 KV 狀态,同時使用更新的模型進行後續的文本生成。
具體來說,隻有當模型生成最大長度(上下文窗口大小 W)時,我們才使用最新的 Temp-Lora 模塊重新計算 KV 狀态。
這樣的緩存重用方法就可以在不顯著影響生成質量的情況下加快生成速度。
關于 Temp-Lora 方法的介紹就這麽多,下面主要看測試。
文本越長,效果越好
作者在 Llama2-7B-4K、Llama2-13B-4K、Llama2-7B-32K 以及 Yi-Chat-6B 模型上上對 Temp-Lora 框架進行了評估,并涵蓋生成和翻譯這兩類長文本任務。
測試數據集一個是長文本語言建模基準 PG19 的子集,從中随機抽取了 40 本書。
另一個是來自 WMT 2023 的國風數據集的随機抽樣子集,包含 20 部中文網絡小說,由專業人員翻譯成英文。
首先來看 PG19 上的結果。
下表顯示了 PG19 上帶有和不帶有 Temp-Lora 模塊的各種型号的 PPL(困惑度,反映模型對于給定輸入的不确定性,越低越好)比較。将每個文檔劃分爲 0-100K 到 500K+token 的片段。
可以看到,所有型号經過 Temp-Lora 之後 PPL 都顯著下降,并且随着片段越來越長,Temp-Lora 的影響更加明顯(1-100K 僅降低 3.6%,500K+ 降低 13.2%)。
因此,我們可以簡單地得出結論:文本越多,使用 Temp-Lora 的必要性就越強。
此外我們還能發現,将塊大小從 1024 調整到 2048 和 4096 導緻 PPL 略有增加。
這倒是不奇怪,畢竟 Temp-Lora 模塊是在之前塊的數據上訓練的。
這個數據主要是告訴我們塊大小的選擇是生成質量和計算效率之間的關鍵權衡(進一步分析可以查閱論文)。
最後,我們還能從中發現,緩存重複使用不會導緻任何性能損失。
作者表示:這是一個非常令人鼓舞的消息。
下面是國風數據集上的結果。
可以看到,Temp-Lora 對長文本文學翻譯任務也有顯著影響。
與基礎模型相比,所有指标都有顯著改進:PPL 降低了 -29.6%,BLEU 得分(機器翻譯文本與高質量參考翻譯的相似度)提高了 +53.2%,COMET 得分(也是一個質量指标)提高了 +8.4%。
最後,是計算效率和質量方面的探索。
作者經實驗發現,使用最 " 經濟 "的 Temp-Lora 配置(∆ =2K,W=4K),能将 PPL 降低 3.8% 的同時,節省 70.5% 的 FLOP 和 51.5% 的延遲。
相反,如果我們完全忽略計算成本,使用最 " 豪華 "的配置(∆ =1K 和 W=24K),也可以實現 5.0% 的 PPL 降低,并額外增加 17% 的 FLOP 和 19.6% 的延遲。
使用建議
總結以上結果,作者也給出了實際應用 Temp-Lora 的三點建議:
1、對于需要最高級别長文本生成的應用,在不更改任何參數的情況下,集成 Temp-Lora 到現有模型中,就能以相對适中的成本顯著提高性能。
2、對于看重最小延遲或内存使用的應用,可以通過減少輸入長度和在 Temp-Lora 中存儲的上下文信息來顯著降低計算成本。
在這種設置下,我們可以使用固定的短窗口大小(如 2K 或 4K)來處理幾乎無限長的文本(在作者的實驗中爲 500K+)。
3、最後,請注意,在不含大量文本的場景中,例如預訓練中上下文比模型的窗口大小還小,Temp-Lora 就是毫無用處的。
作者來自保密機構
值得一提的是,發明這麽簡單又創新的辦法,作者卻沒有留下太多出處信息:
機構名稱直接落款 " 保密機構 ",三位作者的名字也隻有完整的姓。
不過從郵箱信息來看,可能來自港城大、港中文等學校。
最最後,對于這個方法,你覺得怎麽樣?
論文:
https://arxiv.org/abs/2401.11504
— 完 —
點這裏關注我,記得标星哦~
一鍵三連「分享」、「點贊」和「在看」
科技前沿進展日日相見 ~