跳到主要內容
OpenAI

2025年11月13日

研究發佈

透過稀疏電路來認識神經網路

我們會訓練模型去以更簡單、更好追蹤的步驟來進行思考,好讓大家能夠更清楚地瞭解其運作方式。

正在載入...

神經網路驅動了當今最強大的 AI 人工智慧系統,但我們對神經網路運作方式的理解仍有待釐清。我們不會以明確的逐步指示來設計這些模型。相反地,這些模型在成功習得一項任務之前,會透過調整數十億個內部連結(或是所謂的「權重」)來進行學習。我們設計出的是訓練的規則,而非系統最終所習得的具體行為;結果,我們便得出了一個人類無法輕易解讀的稠密連結網路。

我們是如何看待可解釋性的

AI 人工智慧系統變得愈漸強大,並已開始為科學、教育和醫療保健領域的決策帶來了實質的影響;因此,我們能否瞭解其運作方式,也就順勢變成了一件至關重要的議題。可解釋性指的是各種能夠幫助我們理解為什麼模型會產生特定輸出項目的方法。我們可以透過許多不同的方法來幫助我們達成這項目標。

舉例來說,推理模型會傾向說明它推導出最終答覆的過程。思路可解釋性會透過這些說明的內容來監控模型的行為。思路可解釋性能夠即刻提供我們必要的幫助:當今推理模型的思路能夠辨別「欺騙」這樣令人擔憂的行為並提供相應的資訊。然而,完全依賴這個屬性也實在是一種不可靠的策略,這種策略是可能會逐漸失效的。

另一方面,機制可解釋性是本工作的重點,旨在展開逆向工程並全面反推出模型的計算原理。截至目前為止,機制可解釋性的效益並沒有那麼即時有感;但原則上來說,機制可解釋性可以用來針對模型的行為給出更完整的解釋。機制可解釋性可以透過在最細微的層面上解釋模型的行為,來幫助我們減少不確定性並提高我們的自信心。但是,透過低階資訊來解釋複雜行為的過程可說是相當地漫長且不容易。

可解釋性能夠幫助達成多個重點目標,舉凡實現更優質的監督機能並提供不安全或是策略性失配行為的早期警告。此外,可解釋性還能輔助我們其他的安全性工作,像是可擴展的監督、對抗性訓練或是攻擊演練測試。

在這項工作中,我們展示了我們可以透過某種方式訓練模型,使其更易於解讀。對我們而言,對稠密網路的事後分析是一項頗有前景的補充。 

這是一個非常雄心勃勃的嘗試;想要徹底掌握我們強效模型的複雜行為,我們還有很長的路要走。然而,針對簡單的行為,我們發現到使用我們的方法所訓練出來的稀疏模型有著小巧且解耦的電路:這些電路既易於理解,也能夠順利執行相應的行為。這樣的結果表示我們是有機會能夠訓練出一個其機制可被我們充分理解的大型系統。

一種全新的可能:學習稀疏模型

先前的機制可解釋性工作會先從密集而複雜的網路開始展開作業,並試圖釐清其中的思路與機制。在這些網路中,每個單獨的神經元都會連接著數千個其他的神經元。大多數的神經元似乎都會執行多種功能,讓人實在是難以理解其中的行為機制。

但如果我們訓練的是擁有更多神經元的非纏結神經網路,而每個神經元只會有幾十個連結的話,那狀況是不是就不一樣了呢?這樣的話,系統所產生出來的網路或許就會變得更簡單一些,也更容易讓人理解。而這也正是我們工作的核心研究重點。

秉持著這項原則,我們訓練了與既有語言模型(如 GPT‑2)架構非常相似的語言模型,並僅做了一處微小修改:我們強制將模型的絕大多數權重置為零。這樣的安排限制模型僅能使用神經元之間極少數的潛在連接。我們認為:這樣簡單的調整能夠幫助我們有效地釐清模型的內部計算關係。

稠密電路與稀疏電路的比較圖。稠密版本的電路圖有兩行具有許多連線的節點,而稀疏版本的電路圖也有相同的安排,但連線數目較少且每條連線都很重要。

在一般的稠密神經網路中,每一個神經元都會與下一層的所有神經元有所連接。在我們的稀疏模型中,每個神經元只會與下一層的少數神經元有所連接。我們希望這樣能夠幫助我們更容易去釐清神經元以及整個網路。

評估可解釋性

我們希望能夠評估我們稀疏模型的計算解耦程度。我們考量了各種簡單的模型行為,並確認了我們能否分離出模型內負責各種行為之部件(我們將其稱之為「電路」)的可能性。

我們精心策劃了一套簡單的演算法任務。對於每個任務,我們將模型修剪至仍能執行該任務的最小電路。(想要瞭解更多詳細資訊的話,敬請參閱我們的論文(在新視窗中開啟)。)我們發現:透過訓練規模更大且更稀疏的模型,我們便能夠以更簡單的電路來產出更強大的模型。

散點圖:x 軸是模型能力(預訓練損失),而 y 軸則是可解釋性(刪減過後的電路大小)。每個點代表不同規模和稀疏程度的模型,顏色表示總參數,標記大小表示非零參數數量。箭頭表示的是右上方這個方向為「較佳」的方位。

我們所繪製的模型可解釋性與能力對比圖(左下角為「較佳」的方位)。以一個固定稀疏模型的規模來說,提高稀疏程度(將更多的權重設定為零)能在降低其能力的同時提高可解釋性。擴大模型規模會將前沿向外推展,而這也表示我們可以藉此構建更大型的兼具高性能與可解釋性的模型。

這邊來跟各位做個具體說明:請試想一個任務,在這個任務中,一個以 Python 程式碼所訓練的模型必須要以正確的引號類型來寫出一個字串。在 Python 中,‘hello’ 必須要以單引號作結,而 “hello” 則必須以雙引號作結。模型可以透過記住字串起首的引號類型,並在結尾處使用相同類型的引號來完成這個任務。

我們最具可解釋性的模型有包含了能夠精確執行該演算法的解耦電路。

一個稀疏轉換器內的範例電路圖表。該份圖表中顯示了在接收到「(」和「電路」等輸入權杖後,特定的神經元和注意力頭如何啟用的,而圖表中也有標示了正負權重、乘法、非線性以及 MLP 和注意力層之間的連接路徑,並在最終形成了輸出權杖的概率。

一個稀疏轉換器(用來預測究竟是要以單引號還是雙引號作結字串)內的範例電路。這個電路僅使用了五個殘差通道(垂直的灰線)、第零層的兩個 MLP 神經元、第十層的一個注意力查詢鍵通道和一個值通道。該模型 (1) 在一個殘差通道中對單引號進行編碼,在另一個通道中對雙引號進行編碼;(2) 使用 MLP 層將其轉換為一個偵測任何引號的通道以及另一個在單引號和雙引號之間進行分類的通道;(3) 使用注意力操作來忽略中間的 Token,找到前一個引號,並將該類型的引號複製到最後的 Token 中;(4) 預測匹配的結尾引號。

根據我們的定義來說:上述的確切連結是能夠完成該項任務的——即使我們移除了模型的其餘部份,這個小型電路仍然能夠持續運作。此外,這幾個小型電路也是不可或缺的——刪除這幾條連線會導致模型失效。

我們也研究了一些複雜程度更高的行為。要想清楚釐清我們負責這些行為的電路(例如:下面所示的變數綁定行為)更是困難。即使如此,我們仍然可以做到相對簡單的局部說明,而這些說明能夠協助我們預測模型的行為。

在 Python 函數 get_neighbors 中,標示出了一個範例 sparse-transformer 電路的圖表。將 current = set() 的兩次賦值框起來,彩色箭頭顯示了哪些注意力頭(標有 Q/K/V 索引)有被啟用,以在每一次的迴圈中將該變數的出現時機與當下用途連接起來。

另一組細節較少的範例電路。若要判斷一組名為 current 的變數類型,一種注意力操作會是在定義時,將變數名稱複製到 set() Token 中,另一種後續操作則是將類型自 set() Token 複製到變數的後續使用事例情境之中,好讓模型能夠正確推斷出下一個 Token。

未來的方針

這項工作是我們朝著更偉大的目標所邁開的早期步伐:讓大家可以清楚釐清模型的計算機制。但是,我們仍有很長的路要走。我們的稀疏模型遠比前沿模型小得許多,但我們仍尚未釐清稀疏模型中多數的計算機制。

接下來,我們希望能夠將這套技術擴展到規模更大的模型上,並藉此說明更多模型的行為。透過在高性能稀疏模型中列舉出能夠進行更為複雜之推理的電路模式,我們期望能夠藉此釐清其中的原理,好幫助我們能夠更有效地研究前沿模型。

為了要能克服訓練稀疏模型所衍生出的低效率問題,我們目前有兩個可行的方案。一個方案是透過在既有的稠密模型中擷取稀疏電路,而不是從頭開始訓練一個稀疏模型。就本質而言,部署稠密模型的效率會比部署稀疏模型的效率來得高。另一個方案是開發效率更高的技術來訓練模型,好藉此提高其可解釋性,而這個方案可能更易投入實際應用。

請注意:這裡所提供的發現並不能保證我們一定能將這種方法推廣到更強大的系統上,但這些早期的成果是我們所樂見的。我們的目標是希望能夠逐步擴大模型中我們能夠自信解讀的部份,並開發工具來打造我們能夠輕鬆進行分析、偵錯並評估的未來系統。

作者

Leo Gao、Achyuta Rajaram、Jacob Coxon、Soham V. Govande、Bowen Baker及Dan Mossing