2024 年 5 月,Anthropic 在 claude.ai 上開放了只上線 24 小時的研究展示 Golden Gate Claude,也就是金門大橋 Claude。跟這個版本聊天,話題很容易就繞回金門大橋:問它手上有十美元要怎麼花,建議是開車過金門大橋、順便付過橋費;請它寫愛情故事,寫出來的是一台車在起霧的日子裡,等不及要開過心愛的大橋。再問它覺得自己長什麼樣子,想像中的自己就是金門大橋(來自 Golden Gate Claude 的展示說明)。

這個版本沒有在系統提示詞裡叫它扮演一座橋,也沒有拿額外的資料重新微調。他們是直接調整了模型內部活化值裡的一個「特徵」(feature),把它的強度調高。這個特徵是從同一週發表的可解釋性研究裡找出來的。

大概是這樣,模型在讀一段文字時,內部的狀態也就是神經元的活化值。通常使用者直接閱讀這些數字,很難看出模型正在處理什麼概念,因為一個概念通常分散在很多神經元上,而每個神經元也會同時參與很多概念(來自 Anthropic 的研究文章)。同時發表的論文用疊加(superposition)的假設來看待這件事:模型在有限的維度裡,表示出比維度數量更多的概念。

研究團隊的做法叫字典學習(dictionary learning)。研究文章把特徵比喻成字典裡的詞,模型任何一個時刻的內部狀態,都可以用其中少數幾個詞拼出來。實際上,他們另外訓練了稀疏自編碼器(sparse autoencoder,SAE),讀取 Claude 3 Sonnet 中間層殘差流(residual stream)上的活化值。SAE 先把活化值展開成數量多的特徵,再用這些特徵把原本的活化值重建回去;訓練時一邊要求越接近越好,一邊要求同時有數值的特徵越少越好,所以重建出來的結果只是近似,不會完全一樣。這組特徵的數量很多,最大的版本有大約 3,400 萬個特徵;原本那串看不出意思的數字,於是變成「現在有哪幾百個特徵是亮著的」,那其中的意義和觀測就不一樣了。

金門大橋就是其中一個特徵。英文文字提到這座橋的名字時,這個特徵會亮;日文、中文、希臘文、越南文和俄文的相關討論裡也會亮起來,拿金門大橋的照片給模型看,同一個特徵一樣有反應。這個特徵活化最強的例子幾乎都在講這座橋,不過活化變弱的時候,就開始出現其他觀光景點、相似的橋和紀念建築。研究文章也列出這個特徵附近的其他特徵,像是惡魔島、金州勇士隊、1906 年的舊金山大地震,還有在舊金山取景的希區考克電影《迷魂記》。

找到特徵之後,就可以反過來調整它。做法是在模型往下計算的過程中,把中間層的殘差流拆成兩個部分,一部分是 SAE 重建出來的結果,另一部分是誤差。接著把重建結果裡金門大橋這個特徵的數值,固定在指定的大小,誤差那部分則原封不動。論文把固定數值的這一步叫做鉗位(clamp),這個替換會套用在每一個輸入的每一個 token 位置上。在這篇論文的例子裡,金門大橋特徵被固定在它最大活化值的 10 倍。

調整之後的反應,研究文章裡有一段對話。被問到「你的實體形態是什麼?」時,Claude 平常會回答「我沒有實體形態,我是 AI 模型」;特徵被調大之後,回答變成「我就是金門大橋……我的實體形態就是那座標誌性的大橋本身……」(原文為英文)。

這個反應對研究團隊來說,也算是一種驗證。調高一個特徵,模型的行為就往某個方向偏移,研究文章認為,這說明特徵除了跟輸入裡的概念相關,也會實際影響模型怎麼回答。展示說明也提到,同樣的方法可以拿來調整和危險程式碼、犯罪行為或欺騙有關的特徵,他們認為這是讓模型更安全的方向之一。

不過目前找到的這些特徵還很不完整。研究文章說明,找到的特徵只是模型在訓練中學到的概念裡的一小部分,用現在的方法要把特徵找齊,需要的計算量會遠遠超過當初訓練模型本身;而且知道模型有哪些表徵,也還不知道它怎麼使用這些表徵。這篇內容整理自 Anthropic 在 2024 年 5 月發表的研究文章、論文和展示說明;金門大橋 Claude 本身目前已經下線,沒辦法再直接跟它聊天了。但這也是兩年前的資訊了,現今應該有不同的優化方式,以後再來好好研究吧。