01-神魔宇宙 ***宇宙天國首部曲 彌勒天書閣 https://maitreya-books.com/ 神話從來就不是怪力亂神,而是原始先民在日常生活情況的觀察之中,所建立的真實認知。唯有相信神話中的真實,才能感受到神話的詩意隱喻背後,所具有的神聖力量。打開你的想像,打開你的相信,你才能知道神話告訴了你什麼宇宙生命的資訊。 生命起源於宇宙之中,生長於宇宙之中,結束於宇宙之中,因此,宇宙的起源就是生命背景的起源。生命形成的每一個階段,其實都在述說著生命的本能,也就是生命本就存在的一種力量,在此雖是說明一種狀況,然而將這狀況投射在生命的生活行動之中,你就會明白自己究竟有哪些不可思議的本能!

華爲“天才少年”4萬字演講:現在的AI技術要麽無趣,要麽無用-(4)

2024040515:21

一個真人不僅能記住之前聊過的問題,不會生成重複的回答,而且如果同一個問題連問五遍,一定會生氣。我們還記得 Sam Altman 說的嗎,AI 是一個工具,不是一個生命。因此 “像人一樣會生氣” 就不是 OpenAI 的目標。但對于一個娛樂場景下好玩的應用,“像人” 是非常重要的。



另外比如說你問 Character AI 上的馬斯克,你還記得我們第一次見面嗎?

它會隨便瞎編一個,那不僅是幻覺的問題,同時還反映了 AI 缺少長期記憶。

現在已經有一些平台改進了這點,比如 Inflection 的 Pi 在記憶方面就比 Character AI 好很多。



另外你問 Character AI 上的馬斯克 “你是誰”,有的時候它說自己是 GPT,有的時候它說自己是川普,它自己不知道它自己到底是誰。

實際上 Google 的 Gemini 也會有類似的問題,Gemini API 甚至把 OpenAI 和 GPT 這些關鍵詞都給屏蔽掉了。如果用中文問,Gemini 一開始說自己是文心一言。後來這個 bug 修複了,又說自己是小愛同學了。

有人說這是因爲互聯網上的語料已經被大量 AI 生成的內容汙染了。數據集汙染確實不好,但這不是答錯 ”你是誰“ 的借口。身份問題都是要做微調的,比如 Vicuna 模型爲了讓它回答自己是 Vicuna 而不是 GPT 和 LLaMA,讓它回答自己是 LMSys 而不是 OpenAI 做的,是專門構造了微調數據的,在 Vicuna 的開源代碼中可以找到。



另外還有很多的深層的問題,比如說給 AI Agent 說 “我明天要去醫院看病”,那麽明天他會不會主動關心你看病結果怎麽樣。還有如果多個人在一起能不能正常聊天,而不會互相搶麥,大家都說個沒完沒了。還有一句話敲到一半的時候,他會等你說完,還是立即回複一些不知所雲的東西。還有很多類似的這樣的問題。

AI Agent 也需要能夠與其他 Agent 社交。比如目前的 Agent 跟每個人的記憶都是互相隔離的,一個數字生命如果從小明這裏得到一個知識,他應該跟小紅聊天的時候也知道,但是如果說它在從小明這裏得到了一個秘密,跟小紅聊天的時候他可能就不能說。Agent 社交也是一個很有意思的方向。

有趣的靈魂:慢思考與記憶



要解決這些問題需要一個系統的解決方案,關鍵就是一個慢思考。我們開頭就講過,慢思考是神經科學的一個概念,區別于基礎的感知、理解、生成這些快思考能力。我們前面提到 “好看的皮囊” 裏面這些多模態的能力,可以認爲是快思考。而 “有趣的靈魂” 更多需要慢思考。

我們可以思考一下,人類是如何感覺到時間流逝的?有一種說法認爲,時間流逝感源自工作記憶的消逝。另一種說法認爲,時間流逝感源自思考的速度。我認爲這兩種說法都是對的。這也是大模型思考的兩個本質問題:記憶(memory)和自主思考(autonomy)。

人的工作記憶只能記住 7 項左右的原始數據,其余數據都是整理後儲存,再進行匹配和提取。今天的大模型 attention 是線性的,上下文不管多長,都是線性掃描,這不僅效率低下,也難以提取邏輯深度較深的信息。

人類的思考是基于語言的。《人類簡史》認爲語言的發明是人類區別于動物最明顯的標志,因爲只有基于複雜的語言才可能進行複雜的思考。我們在大腦中沒有說出來的話,就像大模型的 Chain-of-Thought(思維鏈),是思考的中間結果。大模型需要 token 來思考,而 token 就像是大模型的時間。

慢思考裏面包括很多組件,包括記憶、情感、任務規劃、工具使用等。我們在有趣的 AI 這一部分,重點介紹記憶和情感這兩塊。



其中的第一個問題就是長期記憶。

其實我們應該慶幸大模型幫我們解決了短期記憶的問題。上一代的模型,比如基于 BERT 的那些模型,很難理解上下文之間的關聯。當時一個指代問題就很難解決,搞不清楚 “他” 說的是誰,“這個” 指的是哪個東西。表現出來就是,前面幾個回合告訴 AI 的東西,後面幾個回合就忘了。基于 Transformer 的大模型是首個根本上解決上下文之間語義關聯的技術,可以說是解決了短期記憶的問題。

但 Transformer 的記憶是用 attention 實現的,受限于上下文長度。超出上下文的曆史只能丟掉。那麽超出上下文的長期記憶怎麽解決?學界有兩條路線,一條是長上下文,就是把上下文支持到 100K 甚至無限大。另一條是 RAG 和信息壓縮,就是把輸入的信息總結整理之後再壓縮存儲,需要的時候只提取相關的記憶。

第一條路線的支持者認爲,長上下文是一種更幹淨、更簡單的方案,依靠 scaling law,算力足夠便宜就行。長上下文模型如果做得好,可以記住輸入信息中的所有細節。比如有一個經典的 “needle in a haystack”(大海撈針)信息提取測試,輸入一本幾十萬字的小說,就書中的一個細節提問,大模型都能回答出來。這是人類難以企及的超強細節記憶力。而且讀這幾十萬字內容只要幾十秒,簡直是比量子波動速讀還快。這就是大模型能力超過人的一個地方。

長上下文雖然效果好,但就目前而言,成本還是太高,因爲 attention 的成本是跟上下文長度成正比的。OpenAI 之類的 API 也是要對 input token 收費的,比如 8K 輸入 token 的上下文,500 token 的輸出,GPT-4 Turbo 輸入部分的成本是 $0.08,輸出部分的成本卻只有 $0.015,成本的大頭都在輸入上。如果 128K token 的輸入用滿,一個請求就要 $1.28。

有人會說現在輸入 token 貴是因爲沒有做持久化,每次重複輸入前面相同的長下文(例如對話記錄或長篇文檔)都需要重新計算 KV Cache。但就算把 KV Cache 全都緩存到片外的 DDR 內存裏,DDR 和 HBM 內存之間的搬入搬出也需要消耗很多資源。如果 AI 芯片能構建一個足夠大、足夠便宜的內存池,比如用高速互聯把大量的 DDR 連上來,可能這個問題會有新的解決思路。

在當前技術條件下,長期記憶我認爲關鍵是個信息壓縮的問題。我們不追求在幾十萬字的輸入中大海撈針,像人類一樣的記憶可能就足夠了。目前大模型的記憶就是聊天記錄,而人類記憶顯然不是用聊天記錄的方式工作的。大家正常聊天的時候不會不停地在那兒翻聊天記錄,而且人也記不住聊過的每一個字。

一個人真正的記憶應該是他對周圍環境的感知,不僅包括別人說的話、他說的話,還包括他當時想了什麽。而聊天記錄裏面的信息是零散的,不包含人自己的理解和思考。比如別人說了一段話我可能被激怒可能不被激怒,但人是會把當時是否被激怒了這個心情記憶下來的。如果不做記憶,每次都根據原始聊天記錄去推斷當時的心情,那可能每次推出來的都不一樣,就可能發生前後不一致的問題。



長期記憶實際上有很多的東西可以做。記憶可以分爲事實性的記憶和程序性的記憶。事實性記憶比如我們第一次是什麽時候見面的,程序性記憶比如個性以及說話風格。前面講到人物角色微調的時候也提到了對話性語料和事實性語料,對應的就是這裏的程序記憶和事實記憶。

事實性記憶裏面也有多種方案,比如總結、RAG 和長上下文。

總結就是信息壓縮。最簡單的總結方法是文本總結,也就是把聊天記錄用一小段話總結一下。更好的方法是用指令的方式去訪問外部存儲,就像 UC Berkeley 的 MemGPT 這個工作。ChatGPT 新增的記憶功能也是用類似 MemGPT 的方法,模型把對話中的要點記錄到一個叫做 bio 的小本本上。還有一種方法是在模型層面上用 embedding 做總結,比如 LongGPT 這個工作,目前主要是學術界在研究,實用性沒有 MemGPT 和文本總結強。

大家最熟悉的事實性記憶方案可能是 RAG(Retrieval Augmented Generation)了。RAG 就是搜索相關的信息片段,再把搜索結果放到大模型的上下文裏,讓大模型基于搜索結果回答問題。很多人說 RAG 就等于向量數據庫,但我認爲 RAG 背後一定是一整套信息檢索系統,RAG 一定不是向量數據庫這麽簡單。因爲大規模語料庫僅僅使用向量數據庫的匹配准確率是非常低的。向量數據庫比較適合語義匹配,傳統的 BM25 之類基于關鍵詞的檢索比較適合細節匹配。而且不同信息片段的重要程度不同,需要有個搜索結果排序的能力。現在 Google 的 Bard 比微軟的 New Bing 效果好一些,這就是背後搜索引擎能力的差別。

長上下文前面已經提到了,可能是一種終極方案。如果長上下文結合持久化 KV Cache、KV Cache 的壓縮技術和一些 attention 的優化技術,可以做到足夠便宜,那麽只要把所有對話的曆史和 AI 當時的思考和心情記錄下來,就可以實現一個記憶力比人還好的 AI Agent。但是有趣的 AI Agent 記憶力如果太好,比如能清楚的記得一年前的早上吃了什麽,會不會顯得不太正常,這就是需要産品設計方面思考了。

這三種技術也不是互斥的,它們是互相補充的。比如說總結和 RAG 就是可以結合在一起的,我們可以分門別類的做總結,對每一次聊天做總結,一年下來這些總結也會有很多內容,需要 RAG 的方法提取有關的總結,作爲大模型的上下文。

程序性的記憶,比如個性和說話風格,我認爲比較難僅僅通過 prompt 的方式解決,few-shot 的效果一般也不是很好。短期來看微調仍然是效果最好的路線,長期來看 Memba 和 RWKV 這些新的架構是存儲程序性記憶比較好的方式。



這裏我們講一個簡單有效的長期記憶解決方案,是文本總結和 RAG 相結合的。

原始聊天記錄首先按照一定的窗口分段,然後對每一段聊天記錄生成文本總結。爲了避免段落開頭丟失上下文,可以把上一段聊天記錄的文本總結也作爲輸入交給大模型。每一段聊天記錄的總結都拿去做 RAG。

RAG 的時候使用向量數據庫和倒排索引結合的方式,向量數據庫做語義匹配,倒排索引做關鍵詞匹配,這樣 recall(查全率)會高一些。然後需要有一個排序系統,取出 top K 的結果拿去送給大模型。

如果只是生成每段聊天記錄的總結,會造成兩個問題,首先是一個用戶的基本信息、興趣愛好、性格特征並不包含在每段聊天記錄的總結中,但這部分信息又是記憶中非常關鍵的部分。另一個問題是不同段的聊天記錄可能存在矛盾,比如多次開會討論同一個問題,結論肯定要以最後一次開會的爲准,但如果用 RAG 的方式提取出每次開會的總結,那會提取出很多過時的總結,可能在有限的上下文窗口中不能找到想要的內容。