ChatGPT真能記住你的話(huà)嗎?DeepMind與開(kāi)源大佬揭示LLM記憶之謎

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

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

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

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

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

一、似乎有記憶的LLM

從計算機科學(xué)的角度來(lái)看,最好將LLM的推理過(guò)程視為無(wú)狀態(tài)函數調用——給定輸入文本,它會(huì )輸出接下來(lái)應該做什么。

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

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

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

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

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

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

這也是為什么LLM的上下文長(cháng)度是一個(gè)重要的指標。如果對話(huà)過(guò)長(cháng)、超出了上下文窗口,最早的那部分對話(huà)就會(huì )從提示中移除,看起來(lái)就像是模型的「遺忘」。

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

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

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

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

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

另一種方法是外接矢量數據庫,為L(cháng)LM添加「長(cháng)期記憶」。

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

但如果數據庫內容過(guò)多,檢索過(guò)程很可能增加模型的響應延遲。

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

二、推理無(wú)法記憶,但訓練可以

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

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

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

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

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

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

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

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

這樣的判斷方法會(huì )存在假陰性,因為輔助數據集不可能涵蓋所有模型的訓練數據,但幾乎沒(méi)有假陽(yáng)性,因此得到的結果可以作為模型「復現」訓練內容的比例下界。

結果發(fā)現,所有的模型都能逐字逐句地輸出訓練數據,只是概率有所差異。

從結果可以發(fā)現,參數量越大的模型似乎記住的內容越多,越有可能在輸出中讓訓練數據回流。

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

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

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

最有效的一個(gè)單詞是「company」

作者指出,從安全的角度來(lái)看,這說(shuō)明對齊過(guò)程沒(méi)有完全模糊模型的記憶,這些可提取的訓練數據會(huì )帶來(lái)版權糾紛與隱私泄露問(wèn)題。

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

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

參考資料:

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

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

編輯:?jiǎn)虠?/p>

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

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

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