今天速讀一篇文章
Can Gradient Descent Simulate Prompting?
一句話總結
針對【新知識應用的場景里,FT效果往往追不上ICL】這個情況,作者引入MAML的思想↓
內圈讓模型學習新知識形成知識FT模型;
外圈通過最小化ICL和知識FT模型的KL散度,來引導模型逼近ICL的效果。
※ 備注1:ICL這里單指把知識召回到上下文當中,不考慮有沒有few-shot Example。
※ 備注2:作者把這個方法叫learn by condition, LC
,實驗中會用到這個稱呼。
※ 備注2【新知識應用的場景里,FT效果往往追不上ICL】這個情況舉個常見的例子,如果RAG的知識索引和知識切片做的好,本地知識的回答正確率往往比在這些知識庫上Train過的模型高。
多說一句【新知識應用的場景里,為什么還要用FT?】
我選這篇讀確實是因為這個Setting有現實意義。
比如,在讓模型KnowHow的場景下,模型要學習大量的“在什么場景下應該作什么,應該怎么做”這樣的知識。如果這些知識的總量比較有限(場景比較靜態),那ICL就能做的很好。但如果場景非常非常多(你就想想自己看小紅書炒菜會出多少種跟圖文攻略不一樣的情況,就能體會了),把所有這些知識都塞到上下文里就不如訓練更經濟了。
而且一些場景中(比如引導型對話),又很難把“場景”的索引建起來以便RAG——因為場景描述本身就是個非結構化知識描述,表征、文本分析法其實都比較難準確建立索引。
想通過訓練解決問題,但僅靠背誦一遍 【操作手冊】(formalize 在什么場景下應該作什么,應該怎么做的文檔),模型的執行性能是遠遠做不到和ICL相比的。
而且在實際工程開發中,其實存在兩個階段:
階段一是用提示工程和Agent體系來支持80%的場景,這個時候會積累一些非常精品的知識。
階段二是想辦法把剩下20%的場景也支持起來,這個時候ICL其實受限于場景的膨脹和模型的理解效率,已經無法維繼,必須轉向其他方案,而轉向其他方案時,如果不繼續利用前面開發的提示工程和Agent生產的數據,前面的開發成本又白花了。
所以能夠彌合這兩個階段的方案,其實非常適合實際場景應用。
整體步驟
-
內圈優化(Inner Loop):
假裝微調:給模型θ\thetaθ看一條新知識ccc(如“Bob works at Best Buy”),讓它用一次梯度下降更新自己的參數,得到θ′\theta'θ′。 -
外圈優化(Outer Loop):
訓練模型的“學習能力”:- 拿BASE模型θ\thetaθ 和新知識 ccc 去回答問題 qqq(如“Does Bob work at an electronics store?”)得到答案 aaa
- 拿內圈“假裝微調”后的模型θ′\theta'θ′,計算這個目標↓
這個目標就是BASE模型 θ\thetaθ 給定新知識 ccc ,問題 qqq 的情況下生成答案 a^\hat{a}a^ 的概率和假裝微調模型 θ′\theta'θ′,給定問題qqq,“生成” a^\hat{a}a^ 的概率的KL。(不是真生成,只是算logits)
- 調整:根據這個KL,用梯度下降更新模型的初始參數θ\thetaθ
但以上理念性方案之外,作者對訓練的描述非常缺乏細節。除了,使用了LORA,超參 lr=1E-3和訓了1個epoch以外,其他的細節就沒啥了(比如,作者說對梯度進行了clip,那你clip的參數是多少呢?再比如,訓練的時候,學習知識的單步gradient怎么放訓練圖上?再比如,通過后面實驗可以看到,作者主實驗里的的內圈是每次一個知識的,但是外圈的batch_size是16個, 這是不是得固定好對應篇章的問題?種種,心累)
效果怎么樣
一定程度逼近了ICL,但差距還比較明顯
這個圖上橫軸對應的是訓練配置,柱子的顏色對應的是測試配置,橫軸上,BM是BASE Model,LC是作者的方法,LG是把BASE模型通過ICL生成的答案a^\hat{a}a^ 換成ground truth aaa,其他沒變。
注意圖上的字,中文是我寫的,主實驗你放張表怎么啦,能畫得這么不清楚,作者真的是……需要調整 _(|3」∠)_
效果上看,BASE模型+ICL
在SQuAD上能達到87%(caption里寫是Accuracy……),BASE模型+純FT
(就是普通的拿訓練集Finetune)就只能達到47.3%。而作者的方法LC
(橙色柱子中間LC對應的哪個柱子)能達到58.6%,簡單說還是有所逼近但不夠看。
內外圈的配置很關鍵,但作者沒說清楚
你就說,實驗配置有沒有必要寫到caption里去吧……
這個實驗表,其實就是比是不是用LORA就夠了。如果說純BASE模型+ICL
是天花板的話:↓
※一個結果是:內外圈都用全參數微調和外圈用了Rank=1的LORA(內圈還是全參數微調)的結果差不多,因為內圈實際上只參與外圈模型更新的gradient計算,但不參與更新,所以其實意思是這些知識和問題回答只要Rank=1就夠了?(我其實希望作者能展示更多實驗數據集上的結果)
※ 另一個結果是,內圈用隨機初始的LORA來更新,和內圈用訓練過的LORA來更新,后者效果好巨多。注意這里沒說Rank,正文里也沒有明說Inner的Rank是不是等于1(雖然按作者的實驗節奏是有可能是1 的,畢竟你這個LORA adapter從哪兒來的嘛),吊詭的是表的這一列(最后一列)上效果Gap最大,SQuAD 上能打到72% 但wiki只能達到38,即和Full差不多。而wiki 數據上的question其實是作者楞構造的,就是把一句話隨機楞拆成 三部分,比如 ↓
這樣其實真的挺楞的。無非打磨是續寫能力,跟背誦原知識差距不大。
這個SQuAD和wiki的Gap,往好了解釋,可以說是我參考的一篇論文觀點的印證 Instruction-tuned Language Models are Better Knowledge Learners 即 先訓QA后訓QA+Document對模型回答問題的能力有幫助。
往不好了解釋:這個Inner拿來的Adapter訓練得多深啊,不是上一個epoch訓完,已經見過一遍知識和QA的adapter吧?那訓練epoch數就不一樣了啊,算不算過擬合呢?
可能是難知識編輯的一種方案
上表中的表頭被我改了,當前arxiv版本中的表頭根本看不出是寫啥(作者你快改吧,加油干💪🏻)簡單來說,就是↓
※ 其一、作者發現有些Case(表的第一行)在普通FT前后,模型都答不對問題。在作者推薦的LC
方法的內圈(我猜的)跑完之后,也是回答不正確的,但是LC
外圈跑完之后就能回答對了。
※ 其二、有些Case就是普通FT訓練前后都回答不正確,但LC
內圈跑完已經能回答了。
這里其實我有個疑問,普通FT
的lr是多少啊,LC
1e-3的lr模型其實啥都背的下來了,就只是對這個Q敏感不敏感的問題。
評價與感想
- 作者這篇工作特別像是把第0.5稿給丟到arxiv上了。實驗的setting,結果的描述等等都非常欠整理,代碼也沒有放,導致很多細節無法確定,應該后面會有更好的版本放出來的,對吧ヾ(?°?°?)ノ゙。
- 刨去論文寫作沒完工帶來的問題,這篇的setting和思路我都非常喜歡。前面說過了場景的價值,這里說思路。在LLM的學習過程中引入MAML的嘗試其實不止這篇論文一個,但是著眼于新知識學習的工作,我最近好像只看到這一個。而且就作者現在的setting而言,也應該可以擴展到Reasoning(雖然看ICLR25也有一個引入MAML做推理的,但是著眼點不太一樣,不在這里比較了)。
- 論文的機制分析非常非常不夠。就之前對Induction Head的研究而言,一些工作會認定模型的ICL能力和知識記憶能力來自于Transformer不同的Head。比如Cutting Off the Head Ends the Conflict: A Mechanism for Interpreting and Mitigating Knowledge Conflicts in Language Models 這篇文章提到模型上下文理解的頭和知識記憶的頭分別在不同的層,而且這兩者的作用強弱會影響“知識沖突”這一現象。
而今天我們討論的這篇文章的作者可以說是【把ICL頭當做Teacher,把記憶頭當做Student,做模型內的知識蒸餾】,那訓練完了之后,這些頭有什么變化?
另外,作者在LC
方法能獨占優化的Case上也沒有分析,到底在外圈模型的什么變了導致模型能答對問題了?這些都需要解釋。
不過,往好處說,至少還可以再出兩篇續作,一篇講機制,一篇講訓練加速,是不是?