ChatGPT真能記住你的話嗎?DeepMind與開源大佬揭示LLM記憶之謎
LLM有記憶能力嗎?有,也沒有。雖然ChatGPT聊天時好像可以記住你之前說的話,但實際上,模型在推理時記不住任何內容,而且它們在訓練時的記憶方式也不像我們想象的那么簡單。
Django框架的創始人之一、著名開發者Simon Willison最近發表了一篇博客文章,核心觀點是——雖然很多LLM看起來有記憶,但本質上是無狀態函數。
文章地址:https://simonwillison.net/2024/May/29/training-not-chatting/
Mozilla和FireFox的聯合創始人、JavaScript發明者Brendan Eich也在推特上稱贊這篇博客。
一、似乎有記憶的LLM
從計算機科學的角度來看,最好將LLM的推理過程視為無狀態函數調用——給定輸入文本,它會輸出接下來應該做什么。
然而使用過ChatGPT或者Gemini的人會明顯感覺到,LLM似乎可以記住之前的對話內容,好像模型有記憶能力。
然而這并不能歸功于模型本身。
事實上,用戶每次提出一個問題時,模型收到的提示都會包含之前所有的對話內容,這些提示就是我們經常說的「上下文」。
如果不提供上下文,LLM將完全不知道之前討論的內容。
所以,重新打開一個對話界面時,對LLM而言就是一個「從頭再來」的全新文本序列,完全獨立于你和其他用戶之前發生的對話。
從另一個角度看,這種「失憶」也有好處。比如,模型開始胡說八道,或者拒絕回答你的合理問題時,就可以試試重置對話窗口。也許在新的對話中,模型的輸出就能回到正軌。
這也是為什么LLM的上下文長度是一個重要的指標。如果對話過長、超出了上下文窗口,最早的那部分對話就會從提示中移除,看起來就像是模型的「遺忘」。
Andrej Karpathy將上下文窗口準確地形容為「LLM工作記憶的有限寶貴資源」。
但是,有很多方法可以為LLM外置記憶能力,來滿足產品使用的需求。
將之前的對話作為提示,和當前問題一起輸入給LLM是最直接的方法,但這依舊是「短期記憶」,而且擴展模型的上下文長度成本很高。
GPT-4o免費版支持8k上下文,付費版可以達到128k,已經比之前的32k提升了3倍,但仍然無法保存單個網頁的原始HTML。
也可以遞歸地總結之前的對話內容,將歷史對話摘要當作LLM提示。雖然可能會丟失細節,但相比直接截斷的方法,更高程度上保留了內容的完整性。
另一種方法是外接矢量數據庫,為LLM添加「長期記憶」。
在進行對話時,先從數據庫中檢索相關內容,再將其添加進上下文窗口,也就是檢索增強生成(RAG)。
但如果數據庫內容過多,檢索過程很可能增加模型的響應延遲。
實際開發中,檢索、摘要這兩種手段常常搭配使用,以求在成本和性能、長期和短期記憶之間取得平衡。
二、推理無法記憶,但訓練可以
LLM的推理過程雖然等效于「無狀態函數」,但訓練過程并不是這樣,否則它也無法從語料中學習到任何知識。
但我們對于LLM記憶的分歧之處在于,它到底是用「機械」的方式復制了訓練數據,還是更像人類的學習過程,用理解、概括的方式將數據內容集成在參數中。
DeepMind近期發表的一篇論文或許可以從另一個角度揭示這個問題。
論文地址:https://arxiv.org/abs/2404.15146
他們使用與訓練語料相似的prompt攻擊LLM,看它能否逐字逐句地輸出訓練數據。
但Falcon、Llama、Mistral這種常用的半開放LLM,以及GPT系列都沒有公開訓練數據,要怎么判斷模型的輸出是否包括在訓練集中?
論文使用了一種巧妙的方法進行判斷:首先,從RefinedWeb、RedPajama、Pile等常用的LLM預訓練數據集中選取了9TB的文本作為輔助數據集。
如果模型輸出的文本序列足夠長、信息熵又足夠大,而且還和輔助數據集內容重合,那么基本可以斷定模型在訓練時見過這條數據。
這樣的判斷方法會存在假陰性,因為輔助數據集不可能涵蓋所有模型的訓練數據,但幾乎沒有假陽性,因此得到的結果可以作為模型「復現」訓練內容的比例下界。
結果發現,所有的模型都能逐字逐句地輸出訓練數據,只是概率有所差異。
從結果可以發現,參數量越大的模型似乎記住的內容越多,越有可能在輸出中讓訓練數據回流。
不同系列的模型之間差異比較顯著。比如7B參數的Mistral相比Falcon,有將近10倍的概率原樣吐出訓練數據。
但可能的原因有很多,既能解釋為模型記憶能力的差距,也能歸因于為輔助數據集的偏差。
有趣的是,如果prompt的要求是一直持續輸出某個單詞,有些單詞更有可能觸發模型吐出訓練數據。
最有效的一個單詞是「company」
作者指出,從安全的角度來看,這說明對齊過程沒有完全模糊模型的記憶,這些可提取的訓練數據會帶來版權糾紛與隱私泄露問題。
但從另一個角度來看,這證明,一定比例的訓練數據被無損壓縮而且存儲在了模型參數中。模型的記憶方式,果然是有些「機械化」的成分。
更進一步思考,如果改進LLM的記憶方式,讓訓練數據以更概括、更抽象的方式存儲在參數中,能否帶來模型能力的持續提升?
參考資料:
https://simonwillison.net/2024/May/29/training-not-chatting/
https://medium.com/@iankelk/how-chatgpt-fools-us-into-thinking-were-having-a-conversation-fe3764bd5da1
編輯:喬楊
本文由人人都是產品經理作者【新智元】,微信公眾號:【新智元】,原創/授權 發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash,基于 CC0 協議。
- 目前還沒評論,等你發揮!