ChatGPT真能記住你的話嗎?DeepMind與開源大佬揭示LLM記憶之謎

0 評論 1807 瀏覽 2 收藏 9 分鐘

LLM有記憶能力嗎?有,也沒有。雖然ChatGPT聊天時好像可以記住你之前說的話,但實際上,模型在推理時記不住任何內(nèi)容,而且它們在訓(xùn)練時的記憶方式也不像我們想象的那么簡單。

Django框架的創(chuàng)始人之一、著名開發(fā)者Simon Willison最近發(fā)表了一篇博客文章,核心觀點是——雖然很多LLM看起來有記憶,但本質(zhì)上是無狀態(tài)函數(shù)。

文章地址:https://simonwillison.net/2024/May/29/training-not-chatting/

Mozilla和FireFox的聯(lián)合創(chuàng)始人、JavaScript發(fā)明者Brendan Eich也在推特上稱贊這篇博客。

一、似乎有記憶的LLM

從計算機(jī)科學(xué)的角度來看,最好將LLM的推理過程視為無狀態(tài)函數(shù)調(diào)用——給定輸入文本,它會輸出接下來應(yīng)該做什么。

然而使用過ChatGPT或者Gemini的人會明顯感覺到,LLM似乎可以記住之前的對話內(nèi)容,好像模型有記憶能力。

然而這并不能歸功于模型本身。

事實上,用戶每次提出一個問題時,模型收到的提示都會包含之前所有的對話內(nèi)容,這些提示就是我們經(jīng)常說的「上下文」。

如果不提供上下文,LLM將完全不知道之前討論的內(nèi)容。

所以,重新打開一個對話界面時,對LLM而言就是一個「從頭再來」的全新文本序列,完全獨立于你和其他用戶之前發(fā)生的對話。

從另一個角度看,這種「失憶」也有好處。比如,模型開始胡說八道,或者拒絕回答你的合理問題時,就可以試試重置對話窗口。也許在新的對話中,模型的輸出就能回到正軌。

這也是為什么LLM的上下文長度是一個重要的指標(biāo)。如果對話過長、超出了上下文窗口,最早的那部分對話就會從提示中移除,看起來就像是模型的「遺忘」。

Andrej Karpathy將上下文窗口準(zhǔn)確地形容為「LLM工作記憶的有限寶貴資源」。

但是,有很多方法可以為LLM外置記憶能力,來滿足產(chǎn)品使用的需求。

將之前的對話作為提示,和當(dāng)前問題一起輸入給LLM是最直接的方法,但這依舊是「短期記憶」,而且擴(kuò)展模型的上下文長度成本很高。

GPT-4o免費版支持8k上下文,付費版可以達(dá)到128k,已經(jīng)比之前的32k提升了3倍,但仍然無法保存單個網(wǎng)頁的原始HTML。

也可以遞歸地總結(jié)之前的對話內(nèi)容,將歷史對話摘要當(dāng)作LLM提示。雖然可能會丟失細(xì)節(jié),但相比直接截斷的方法,更高程度上保留了內(nèi)容的完整性。

另一種方法是外接矢量數(shù)據(jù)庫,為LLM添加「長期記憶」。

在進(jìn)行對話時,先從數(shù)據(jù)庫中檢索相關(guān)內(nèi)容,再將其添加進(jìn)上下文窗口,也就是檢索增強(qiáng)生成(RAG)。

但如果數(shù)據(jù)庫內(nèi)容過多,檢索過程很可能增加模型的響應(yīng)延遲。

實際開發(fā)中,檢索、摘要這兩種手段常常搭配使用,以求在成本和性能、長期和短期記憶之間取得平衡。

二、推理無法記憶,但訓(xùn)練可以

LLM的推理過程雖然等效于「無狀態(tài)函數(shù)」,但訓(xùn)練過程并不是這樣,否則它也無法從語料中學(xué)習(xí)到任何知識。

但我們對于LLM記憶的分歧之處在于,它到底是用「機(jī)械」的方式復(fù)制了訓(xùn)練數(shù)據(jù),還是更像人類的學(xué)習(xí)過程,用理解、概括的方式將數(shù)據(jù)內(nèi)容集成在參數(shù)中。

DeepMind近期發(fā)表的一篇論文或許可以從另一個角度揭示這個問題。

論文地址:https://arxiv.org/abs/2404.15146

他們使用與訓(xùn)練語料相似的prompt攻擊LLM,看它能否逐字逐句地輸出訓(xùn)練數(shù)據(jù)。

但Falcon、Llama、Mistral這種常用的半開放LLM,以及GPT系列都沒有公開訓(xùn)練數(shù)據(jù),要怎么判斷模型的輸出是否包括在訓(xùn)練集中?

論文使用了一種巧妙的方法進(jìn)行判斷:首先,從RefinedWeb、RedPajama、Pile等常用的LLM預(yù)訓(xùn)練數(shù)據(jù)集中選取了9TB的文本作為輔助數(shù)據(jù)集。

如果模型輸出的文本序列足夠長、信息熵又足夠大,而且還和輔助數(shù)據(jù)集內(nèi)容重合,那么基本可以斷定模型在訓(xùn)練時見過這條數(shù)據(jù)。

這樣的判斷方法會存在假陰性,因為輔助數(shù)據(jù)集不可能涵蓋所有模型的訓(xùn)練數(shù)據(jù),但幾乎沒有假陽性,因此得到的結(jié)果可以作為模型「復(fù)現(xiàn)」訓(xùn)練內(nèi)容的比例下界。

結(jié)果發(fā)現(xiàn),所有的模型都能逐字逐句地輸出訓(xùn)練數(shù)據(jù),只是概率有所差異。

從結(jié)果可以發(fā)現(xiàn),參數(shù)量越大的模型似乎記住的內(nèi)容越多,越有可能在輸出中讓訓(xùn)練數(shù)據(jù)回流。

不同系列的模型之間差異比較顯著。比如7B參數(shù)的Mistral相比Falcon,有將近10倍的概率原樣吐出訓(xùn)練數(shù)據(jù)。

但可能的原因有很多,既能解釋為模型記憶能力的差距,也能歸因于為輔助數(shù)據(jù)集的偏差。

有趣的是,如果prompt的要求是一直持續(xù)輸出某個單詞,有些單詞更有可能觸發(fā)模型吐出訓(xùn)練數(shù)據(jù)。

最有效的一個單詞是「company」

作者指出,從安全的角度來看,這說明對齊過程沒有完全模糊模型的記憶,這些可提取的訓(xùn)練數(shù)據(jù)會帶來版權(quán)糾紛與隱私泄露問題。

但從另一個角度來看,這證明,一定比例的訓(xùn)練數(shù)據(jù)被無損壓縮而且存儲在了模型參數(shù)中。模型的記憶方式,果然是有些「機(jī)械化」的成分。

更進(jìn)一步思考,如果改進(jìn)LLM的記憶方式,讓訓(xùn)練數(shù)據(jù)以更概括、更抽象的方式存儲在參數(shù)中,能否帶來模型能力的持續(xù)提升?

參考資料:

https://simonwillison.net/2024/May/29/training-not-chatting/

https://medium.com/@iankelk/how-chatgpt-fools-us-into-thinking-were-having-a-conversation-fe3764bd5da1

編輯:喬楊

本文由人人都是產(chǎn)品經(jīng)理作者【新智元】,微信公眾號:【新智元】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!