深度學習作為程式合成

深度學習作為程式合成

Lesswrong·

本文主張深度學習之所以成功,是因為它正在執行一種可行的程式合成形式,藉此搜尋能解釋數據的簡單且具組合性的演算法。這個假說將深度學習的實證結果與所羅門諾夫歸納法及演算法資訊論的理論理想聯繫起來。

認識論地位:這篇文章是我經驗中廣泛存在於前沿實驗室和機械可解釋性(mechanistic interpretability)研究人員之間想法的綜合,但很少在一個地方被全面地記錄下來——不同的社群往往只了解部分證據。核心假設——即深度學習正在執行某種可處理的程式合成(tractable program synthesis)——並非由我原創(甚至對我而言,這些想法也已有約 3 年歷史),而且我懷疑它已被多次獨立得出。(見關於相關工作的附錄)。

這也遠非完成的研究——更多是關於一個似乎越來越難以迴避的假設的快照,以及為什麼形式化值得追求的理由。在文章末尾,我討論了關鍵障礙,以及奇異學習理論(singular learning theory)等工具可能如何解決這些問題。

感謝 Dan Murfet、Jesse Hoogland、Max Hennick 和 Rumi Salazar 對本文提供的反饋。

Sam Altman:為什麼非監督式學習有效?

Dan Selsam:壓縮。理想的智能被稱為 所羅門諾夫歸納法(Solomonoff induction)……^([1])這篇文章的核心假設是:深度學習之所以成功,是因為它正在執行一種可處理形式的程式合成——尋找簡單、具組合性的演算法來解釋數據。如果這是正確的,這將把深度學習的成功重新定義為一個我們在原則上已經理解的實例,同時指出為了使這種聯繫變得嚴謹,我們需要形式化哪些內容。

我首先回顧所羅門諾夫歸納法的理論理想,以及深度學習成功的經驗性驚喜。接著,機械可解釋性提供了網路學習類演算法結構的直接證據;我將詳細檢查「頓悟」(grokking)和視覺電路的案例。更廣泛的模式提供了間接支持:網路如何避開維度詛咒、如何在過度參數化的情況下實現泛化,以及如何收斂到相似的表示。最後,我討論形式化需要什麼、為什麼困難,以及它所暗示的前行之路。

背景

無論我們是試圖抓住小偷的偵探、試圖發現新物理定律的科學家,還是試圖理解近期需求變化的商人,我們都在收集信息並試圖推斷其背後原因的過程中。

-Shane Legg^([2])在幼兒時期,人類嬰兒學會了物體恆存(object permanence)——即看不見的物體即使在沒有被直接觀察到時仍然存在。透過這樣做,他們的世界變得不再那麼混亂:母親透過把手放在臉前出現又消失,不再令人驚訝。他們從原始的感官知覺轉向將觀察結果解釋為來自一個外部世界: 一個決定他們所見、所感、所聞的連貫且自洽的過程。

隨著年齡增長,我們不斷完善這個世界模型。我們了解到火觸摸時會痛;後來知道可以用木頭和火柴生火;最終明白火是涉及燃料和氧氣的化學反應。在每個階段,世界變得不再那麼神奇,而更具可預測性。當爐子燙傷我們或水熄滅火焰時,我們不再感到驚訝,因為我們已經學會了支配它們行為的潛在過程。

這種學習過程之所以有效,是因為我們居住的世界儘管表面複雜,但並非隨機。它受一致、可發現的規則支配。如果週二摔碎玻璃會導致它破碎,週三也會發生同樣的情況。如果有人把球從山頂推下,它會滾下來,其速率是任何高中物理學生都能預測的。透過觀察,我們隱式地對這些規則進行了逆向工程。

這個想法——即物理世界本質上是可預測且基於規則的——在電腦科學中有一個正式名稱:物理丘奇-圖靈論題(physical Church-Turing thesis)。準確地說,它指出任何物理過程都可以由圖靈機模擬到任意精度。從恆星坍縮到神經元放電,任何事情原則上都可以由演算法描述並在電腦上模擬。

從這個角度來看,我們可以將這種「透過對所見事物進行規則逆向工程來構建世界模型」的概念形式化。我們可以將其操作化為一種程式合成(program synthesis):從觀察中,嘗試重建產生這些觀察結果的「真實」程式的某種近似。假設物理丘奇-圖靈論題成立,這樣的學習演算法將是「通用的」,最終能夠表示和預測任何現實世界的過程。

但這立即引出了一個新問題。對於任何一組觀察結果,都有無限多個程式可以產生它們。我們該如何選擇?答案是科學界最古老的原則之一:歐卡姆剃刀(Occam's razor)。我們應該偏好最簡單的解釋。

1960 年代,雷·所羅門諾夫(Ray Solomonoff)將這一想法形式化為通用歸納(universal induction)理論,我們現在稱之為所羅門諾夫歸納法。他將假設的「簡單性」定義為描述它的最短程式長度(這一概念被稱為柯氏複雜性 Kolmogorov complexity)。根據所羅門諾夫的說法,一個理想的貝氏學習者應該偏好短程式而非長程式。理論上,這個學習者可以學習任何可計算的事物,因為它搜尋所有可能程式的空間,以簡單性為指引來導航無限的搜尋空間並正確泛化。

所羅門諾夫歸納法的發明開啟了^([3])電腦科學中一個豐富且多產的子領域:演算法資訊理論(algorithmic information theory),並持續至今。所羅門諾夫歸納法仍被廣泛視為理想最佳的自監督學習演算法,這在某些假設下可以得到形式化證明^([4])。這些想法(或其擴展,如 AIXI)對早期深度學習思想家如 Jürgen SchmidhuberShane Legg 產生了影響,並塑造了一系列想法,試圖理論性地預測比人類更聰明的機器智能可能如何表現,特別是在 AI 安全 領域內。

不幸的是,儘管所羅門諾夫歸納法在數學上很美,但它完全無法處理。原始的所羅門諾夫歸納法是不可計算的,甚至像 速度歸納(speed induction) 這樣的近似版本也呈指數級緩慢^([5])。將其作為「學習的柏拉圖理想」的理論興趣保留至今,但實用的人工智慧早已轉向,認為它毫無可行性。


與此同時,神經網路產生了誰也沒預料到的結果。

這不是通常那種漸進式進步累積、專家能預見突破到來的科學進展。2016 年,大多數圍棋研究人員認為達到人類水平的棋力還需數十年;AlphaGo 在那年問世。蛋白質折疊問題在五十年的細緻工作中一直難以攻克;AlphaFold 基本上在一個比賽週期內解決了它^([6])。大型語言模型開始編寫程式碼、解決競賽數學題,並進行明顯的推理——這些能力是從下一個標記預測(next-token prediction)中湧現出來的,從未在損失函數中明確指定。在每個階段,領域專家(而不僅僅是局外人!)都措手不及。如果我們理解發生了什麼,我們本可以預測到它。但我們沒有。

該領域的反應是務實的:擴大規模化有效的方法,停止嘗試理解為什麼它們有效。這種態度在某種程度上是應得的。幾十年來,編碼人類關於視覺或語言知識的手工設計系統,在面對數據訓練的通用架構時屢戰屢敗。人類關於什麼是重要的直覺一直出錯。但這種務實立場硬化成了更強烈的東西——一種默認假設,即訓練好的網路本質上是不透明的,詢問權重意味著什麼是一種範疇錯誤。

乍看之下,這個假設似乎有一定的理論基礎。如果神經網路最好被理解為「僅僅是曲線擬合」的函數逼近器,那麼就沒有明顯理由期望學習到的參數具有任何特定含義。它們是優化問題的解,而不是表示。當研究人員確實觀察內部時,他們發現的是沒有明顯組織的浮點數密集矩陣。

但預測不透明性的鏡頭,無論結構是缺失還是僅僅不可見,都會做出同樣的預測。一些研究人員繼續觀察。

觀察內部

頓悟(Grokking)

來自 Power et al. (2022) 的模加法 Transformer 學會了快速泛化(上圖),同時權重中出現了傅立葉模式(右下圖)。插圖由 Pearce et al. (2023) 提供。

Power et al. (2022) 在模加法(modular addition)任務上訓練了一個小型 Transformer:給定兩個數字,輸出它們相加後模 113 的餘數。只有一小部分可能的輸入對被用於訓練——例如 30%——其餘的保留用於測試。

網路很快就記住了訓練對,全部答對。但在它沒見過的輸入對上,它的表現並不比隨機猜測好。這並不令人驚訝:有了足夠的參數,網路可以簡單地存儲輸入-輸出的關聯,而無需提取任何規則。而存儲的關聯對新輸入沒有幫助。

意想不到的事情發生了。如果你繼續訓練,儘管訓練損失已經幾乎降到最低,網路最終也會開始答對保留的輸入對。而且這不是逐漸發生的:測試性能在短短幾千個訓練步驟內從隨機跳升到接近完美。

所以網路內部發生了變化。但變了什麼?它已經擬合了訓練數據;數據沒有變。沒有外部信號可以觸發這種轉變。

一種調查方法是觀察權重本身。我們可以在訓練過程中的多個檢查點執行此操作並詢問:在泛化開始前後,權重是否有變化?

確實有。訓練早期的權重,在記憶階段,分析時沒有太多結構。後來,結構出現了。具體來說,如果我們觀察嵌入矩陣(embedding matrix),我們會發現它正將數字映射到圓上的特定位置。數字 0 映射到一個位置,1 映射到一個稍微旋轉的位置,依此類推,繞圓一圈。更準確地說:每個數字的嵌入包含一組特定頻率的正弦和餘弦值。

這種結構在訓練早期是缺失的。它隨著訓練的繼續而湧現,且湧現的時間大約與泛化開始的時間一致。

那麼這個結構在做什麼?追蹤它在網路中的路徑揭示了意想不到的事情:網路學會了一種基於三角學的模加法演算法。^([7])

在模加法任務上訓練的 Transformer 學會了一種具組合性的、人類可解釋的演算法。由 Nanda et al. (2023) 逆向工程得出。圖片來自 Nanda et al. (2023)

該演算法利用了角度相加的原理。如果你將一個數字表示為圓上的一個位置,那麼兩個數字相加就對應於它們角度的相加。網路的嵌入層執行這種表示。其中間層隨後使用三角恆等式組合兩個輸入的正弦和餘弦值。這些運算實現在注意力層和 MLP 層的權重中:人們可以讀出與這些恆等式中的項相對應的係數。

最後,網路需要轉換回離散答案。它透過檢查每個可能的輸出 $c$ 與它計算出的總和的匹配程度來實現。具體來說,輸出 $c$ 的 logit 取決於 $\cos(2\pi k(a+b-c)/P)$。當 $c$ 等於 $(a+b) \pmod P$ 時,這個量達到最大值——即正確答案。此時,不同頻率的餘弦值都等於 1 並產生相長干涉。對於錯誤答案,它們指向不同方向並相互抵消。

這不是一個鬆散的解釋性修飾。每個部分——圓形嵌入、三角恆等式、干涉模式——都具體存在於權重中,並可以透過消融實驗(ablations)進行驗證。

所以呈現出的圖景是這樣的。在記憶階段,網路以另一種方式解決任務——推測是分佈在參數中的類似查找表(lookup table)的東西。它擬合了訓練數據,但該解決方案無法擴展。然後,隨著持續訓練,另一種解決方案形成了:這種三角演算法。隨著演算法的組裝,泛化發生了。兩者不僅僅是相關的;追蹤權重中的結構和在保留數據上的表現,它們是同步移動的。

我們該如何解讀這點?這裡有一種解讀:記憶的網路與泛化的網路之間的區別不僅是量上的,而且是質上的。這兩個網路學到了不同種類的東西。一個存儲了關聯。另一個發現了一種方法——一種機械程序,它恰好在訓練數據之外的輸入上也有效,因為它捕捉到了問題結構的某些本質。

這是一個單一的例子,而且是一個玩具模型。但它提出了一個值得認真對待的問題。當網路泛化時,是因為它們發現了類似演算法的東西嗎?*如果是這樣,這對於深度學習實際在做什麼告訴了我們什麼?

值得注意的是,訓練數據中包含什麼和不包含什麼。數據包含輸入-輸出對:「32 和 41 得到 73」,依此類推。它不包含任何關於如何計算它們的信息。網路是靠自己得出方法的。

而且這兩種解決方案——查找表和三角演算法——對訓練數據的擬合程度同樣好。在記憶階段,網路的損失已經接近最小。無論是什麼促使它繼續搜尋,最終穩定在泛化演算法上,都不是因為泛化演算法更好地擬合了數據。而是別的東西——學習過程的某種屬性,它偏好一種解決方案而非另一種。

在某種意義上,泛化演算法更簡單。它將原本需要數千個存儲關聯的內容壓縮成一個精簡的程序。這是否是思考發生了什麼的正確方式——「簡單性」是否真的是訓練過程所偏好的——目前還不明顯。但某些因素使網路偏好一個能泛化的機械解決方案,而非一個不能泛化的解決方案,且這不僅僅是訓練數據的作用。^([8])

視覺電路

InceptionV1 透過分層組合車窗、車身和車輪(如圖所示)的探測器來將圖像分類為汽車,而這些探測器本身又是透過組合形狀、邊緣等探測器(未示出)形成的。來自 Olah et al. (2020)

頓悟是一個受控環境——小型網路、簡單任務,旨在實現完全可解釋。在解決現實問題的現實模型中,是否也會出現同樣的結構?

Olah et al. (2020) 研究了 InceptionV1,這是一個在 ImageNet 上訓練的圖像分類網路——ImageNet 是一個包含超過一百萬張標註了物體類別照片的數據集。網路輸入一張圖像,輸出一個包含一千個可能標籤的機率分佈:「汽車」、「狗」、「咖啡杯」等等。我們能理解這個更現實的設定嗎?

一個自然的起點是詢問單個神經元在做什麼。假設我們選取網路中某處的一個神經元。我們可以透過搜尋數據集或優化輸入以最大化激活來找到使其強烈激活的圖像。如果我們收集強烈激活給定神經元的圖像,它們是否有共同點?

在早期層中,確實有,而且我們發現的模式很簡單。前幾層的神經元對特定方向的邊緣、小塊紋理、顏色之間的過渡做出反應。不同的神經元對不同的方向或紋理做出反應,但許多神經元對視覺上可識別的東西具有選擇性。

在後面的層中,我們發現的模式變得更加複雜。神經元對曲線、角落或重複模式做出反應。更深層的神經元對眼睛、車輪或窗戶等物體部件做出反應,而不是幾何原語。

這已經暗示了一個層次結構:早期是簡單特徵,後期是複雜特徵。但更引人注目的發現是關於複雜特徵是如何構建的。

Olah 等人不僅可視化了神經元的反應。他們還追蹤了層與層之間的連接——檢查將一層神經元連接到下一層的權重,識別哪些早期特徵促成了哪些後期特徵。他們發現,後期特徵是以可解釋的方式從早期特徵組合而成的。

例如,在 InceptionV1 中有一個神經元,我們識別出它對狗頭有反應。如果我們透過觀察哪些來自前一層的神經元以強權重連接到它來追蹤其輸入,我們會發現它接收來自探測眼睛、口鼻、毛皮和舌頭的神經元的輸入。狗頭探測器是由更簡單的探測器的輸出構建而成的。它不是從頭開始探測狗頭;它是在檢查更簡單特徵的正確組合是否以正確的空間排列出現。

我們在整個網路中都發現了同樣的模式。探測車窗的神經元連接到探測具有反射紋理的矩形形狀的神經元。探測車身的神經元連接到探測光滑、彎曲表面的神經元。而探測整輛汽車的神經元則連接到探測車輪、窗戶和車身的神經元,這些神經元以我們預期的汽車空間配置排列。

Olah 等人將這些路徑稱為「電路」(circuits),這個術語是有意義的。結構確實像電路:有輸入、中間計算和輸出,由決定特徵如何組合的加權邊連接。用他們的話說:「你真的可以從權重中讀出有意義的演算法。」

而且組件是被重複使用的。促成車輪探測的相同邊緣探測器也促成了人臉探測、建築探測以及許多其他事物。網路並沒有為它識別的一千個類別分別構建特徵集。它構建了一個共享的部件詞彙表——邊緣、紋理、曲線、物體組件等——並針對不同的識別任務進行不同的組合。

我們可能會覺得這種結構似曾相識。布林電路(Boolean circuit)是簡單閘(gate)的組合——每個閘接收幾個位元作為輸入,輸出一個位元——連接在一起以計算複雜的事物。程式是簡單運算的組合——每個運算執行一小部分功能——排列起來以完成更大的任務。Olah 等人在 InceptionV1 中發現的內容具有相同的形狀:小規模計算、分層組合,且組件在不同路徑之間共享和重用。

從理論電腦科學的角度來看,這就是演算法的一般樣子。不僅僅是頓悟中那個特定的三角技巧,而是計算本身。你把一個難題拆解成碎片,解決這些碎片,然後組合結果。使這變得可處理、使其成為演算法而非查找表的,正是這種組合結構。重用使其精簡;精簡使其可行。


Olsson et al. 認為,大型語言模型中上下文學習(in-context-learning)的主要機制是一種被稱為歸納頭(induction head)的機械注意力電路。與頓悟的例子類似,機械電路在快速的「相變」中形成,這與上下文學習性能的大幅提升相吻合。圖表來自 Olsson et al.

頓悟和 InceptionV1 是兩個例子,但它們遠非僅有的例子。機械可解釋性已發展成為一個實質性的領域,其中的研究人員記錄了許多此類結構——在玩具模型中、在語言模型中,跨越不同的架構和任務。歸納頭語言電路以及 Transformer 語言模型中的括號匹配,玩具任務中學習到的世界模型多步推理,強化學習代理中的類網格細胞機制,生成對抗網路(GAN)中的分層表示等等。只要我們設法仔細觀察,我們往往會發現一些機械性的東西。

這提出了一個問題。如果我們在訓練好的網路內部發現的東西(至少在我們能發現任何東西的時候)看起來像是由部件構建的演算法,那麼這對於深度學習正在做什麼暗示了什麼?

假設

我們該如何看待這點?

我們已經看到神經網路學會了看起來像演算法的解決方案——由簡單、可重用的部件構建的組合結構。在頓悟案例中,這與泛化精確吻合。在 InceptionV1 中,這種結構使網路能夠在輸入空間維度巨大的情況下識別物體。在機械可解釋性文獻記錄的許多其他案例中,出現了相同的形狀:不是單一的黑箱計算,而是更像電路的東西。

這讓人想起我們開始時的圖景。所羅門諾夫歸納法將學習定義為搜尋解釋數據的簡單程式。這是一個理論理想——在某種意義上可證明是最佳的,但完全無法處理。所羅門諾夫與深度學習之間的聯繫大多被視為純粹的概念性:一種思考學習「應該」做什麼的好方法,對神經網路實際做什麼沒有影響。

但來自機械可解釋性的證據暗示了另一種可能性。如果深度學習在功能上與程式合成相似呢?不是透過相同的機制——連續參數上的梯度下降與離散程式上的枚舉搜尋完全不同。但也許目標是同一種對象:由部件構建的機械解決方案,捕捉數據生成過程中的結構。

需要明確的是:這是一個假設。證據顯示神經網路可以學習組合式解決方案,且此類解決方案在特定的、可解釋的案例中與泛化同時出現。它並沒有證明這總是發生,或者存在一致的簡單性偏差,或者我們理解為什麼梯度下降能有效地找到此類解決方案。

但如果這個假設是正確的,它將重新定義深度學習正在做的事情。神經網路的成功將不再是一個需要被接受的謎團,而是我們原則上已經理解的事情的一個實例:搜尋精簡、機械的模型來解釋你的觀察所展現的力量。謎題將從「為什麼深度學習有效?」轉向「梯度下降如何如此有效地實現這種搜尋?」

這第二個問題很難。所羅門諾夫歸納法之所以無法處理,正是因為程式空間巨大且離散。梯度下降僅使用局部信息導航連續參數空間。如果這兩個過程都以某種方式到達相似的目的地——學習問題的組合式解決方案——那麼神經網路損失景觀(loss landscapes)的結構中正在發生一些有趣的事情,一些我們尚未理解的事情。我們將在文章末尾回到這個問題。

所以這個假設提出的問題和它回答的一樣多。但它提供了一些有價值的東西:一個框架。如果深度學習正在進行某種形式的程式合成,那給了我們一種方式來將零散的觀察——關於泛化、關於表示的收斂、關於為什麼規模化有效——連接成一個連貫的圖景。這個圖景是否能解釋不僅僅是這些特定例子,是我們接下來要探討的。

澄清假設

我所說的「程式」是什麼意思?

我認為人們在閱讀這篇文章時,很大程度上可以使用純粹操作性的、「看到它你就知道它」的「程式」和「演算法」定義。但如果你試圖仔細思考這點,會存在真正的概念性問題。

在大多數計算系統中,都有一個隨設計而來的詞彙表——指令、子程序、暫存器、數據流等等。我們可以指出「程式」,因為系統的構建就是為了使其可見。

神經網路並非如此。我們有神經元、權重、激活等,但這些可能不是正確的計算原子。如果訓練好的網路中存在計算結構,它不會自動貼上標籤。所以如果我們想詢問網路是否學習程式,我們需要知道我們在尋找什麼。什麼樣的發現才算數?

這對可解釋性來說也是一個真正的問題。當研究人員聲稱在網路中發現「電路」或「特徵」時,是什麼讓這成為一種發現,而不僅僅是他們喜歡的一種模式?必須有一些精確且與基質無關(substrate-independent)的東西是我們正在追蹤的。退一步考慮在我們非常理解的情況下,計算結構到底是什麼,會有所幫助。

考慮各種計算模型:圖靈機、Lambda 演算、布林電路等。它們有不同的原語——帶子、替換規則、邏輯閘——但丘奇-圖靈論題告訴我們它們是等價的。在其中一個模型中可計算的任何內容,在所有其他模型中也都是可計算的。所以「計算」並不是任何特定的形式體系。它是這些形式體系的共同點。

它們有什麼共同點?讓我指出一個具體點:每一種都透過組合簡單的碎片來構建複雜的運算,其中每個碎片僅與少數輸入交互。圖靈機的轉移函數觀察一個單元格。一個布林閘接收兩個或三個位元。一個 Lambda 應用涉及一個函數和一個參數。複雜性來自碎片如何組合,而不是來自任何單個碎片觀察整個問題。

這僅僅是一個共享屬性,還是更深層次的東西?

將其認真對待的一個理由是:你可以僅從這個原則推導出一個完整的計算模型。詢問「我可以透過組合有界元數(bounded arity)的碎片來構建什麼函數?」並仔細算出答案。你得到的是(在離散情況下)布林電路——不是計算的一個受限片段,而是一個通用模型,與所有其他模型等價。組合原則本身就足以產生完全通用的計算。

有界元數約束是必不可少的。如果每個碎片都能看到所有輸入,我們就只有查找表。使組合強大的正是每個碎片都是「局部的」,一次只能與有限的事物交互——它迫使解決方案具有真正的內部結構。

所以當我說網路可能學習「程式」時,我的意思是:透過組合簡單碎片構建的解決方案,每個碎片操作少數輸入。 不是因為那是一種很好的結構,而是因為那可能就是計算的本質。

請注意,我們並未暗示計算必然是在離散上進行的——它可能是在連續值上進行的,如模擬計算(analog computation)。(然而,「碎片」必須是離散的,這才是一個連貫的概念。當與隨後的觀點結合時,這會產生問題,我們將在接近末尾時討論。)

一個澄清:網路的架構瑣碎地具有組合結構——前向傳遞可以在電腦上執行。這不是我的主張。我的主張是訓練在這種基質發現了一個有效的程式。想想 FPGA:一個通用的邏輯組件網格,硬體工程師將其配置成特定的電路。架構是網格;學習到的權重是配置。

最後一點,即神經網路中的程式結構是學習到的且取決於連續參數,這實際上使這個問題變得相當微妙,且不同於我們熟悉的其它計算模型(甚至是模擬計算)。這是一個微妙的問題,使得形式化變得困難,我們將在文章末尾回到這個問題。

我所說的「程式合成」是什麼意思?

我所說的程式合成,是指在可能的程式中進行搜尋,以找到一個擬合數據的程式。

有兩點使其不同於普通的函數擬合。

首先,搜尋是**通用目的(general-purpose)**的。線性回歸在線性函數上搜尋。決策樹在軸對齊的分區上搜尋。這些是狹窄的假設類別,由從業者選擇以匹配問題。這裡的主張不同:深度學習在一個基本上可以表達任何高效可計算函數的空間中搜尋。並非網路擅長學習某種特定結構,而是它們可以學習存在的任何結構。

其次,搜尋由**強大的歸納偏好(inductive biases)**引導。如果沒有對某些程式優於其他程式的偏好,在所有程式上進行搜尋是無法處理的。自然的候選者是簡單性:偏好較短或較不複雜的程式,而非較長或較複雜的程式。這就是所羅門諾夫歸納法所做的——它根據程式的長度分配先驗機率,然後根據數據進行更新。

所羅門諾夫歸納法是理論參考點。它在某種意義上可證明是最佳的:如果數據具有任何可計算的結構,所羅門諾夫歸納法最終會找到它。但它也是無法處理的——不僅僅是慢,在其純粹形式下是字面意義上的不可計算,即使在近似情況下也是呈指數級緩慢。

假設是深度學習透過完全不同的手段實現了功能上相似的結果。連續參數上的梯度下降看起來一點也不像離散程式上的枚舉。但或許兩者都瞄準了同一種對象——捕捉結構的簡單程式——並透過不同的路徑到達那裡。我們將在文章末尾回到這個問題。

這將要求學習過程實現類似簡單性偏差的東西,儘管「程式複雜性」並不在損失函數中。這是否是準確的特徵描述,我還不確定。但某種強大的歸納偏好必須在運作——否則我們無法解釋為什麼網路在具備記憶能力的情況下仍能泛化,或者為什麼規模化有助於而非損害性能。

假設的範圍是什麼?

我對使用隨機優化(SGD、Adam 等)在標準架構(如 MLP、CNN 或 Transformer)上進行監督和自監督學習,並在標準任務(如圖像分類或自回歸語言預測)上的情況思考最深,並強烈準備好為這些主張辯護。我也相信這可以擴展到擴散模型、對抗設定、強化學習等環境,但我對這些思考較少,無法像前者那樣有信心。

為什麼這還不夠

前面的案例研究提供了一個強大的存在性證明:深度神經網路能夠學習並實現非平凡的、組合式的演算法。InceptionV1 透過組合電路解決圖像分類,或者 Transformer 透過發現基於傅立葉的演算法解決模加法,這些證據是很難反駁的。當然,還有更多我們尚未討論的例子。

儘管如此,問題依然存在:這是例外還是常態? 目前呈現的證據與「這類行為只是一個奇怪的邊緣案例」完全一致。

不幸的是,機械可解釋性還不足以解決這個問題。目前機械可解釋性工具能提供如此清晰、完整且無歧義正確結果^([9])的環境非常罕見。

難道大多數網路不是不可解釋的嗎?為什麼這不能證偽該論點。

我們難道不應該將缺乏此類清晰的機械可解釋性結果視為反對我們假設的積極反證嗎?如果模型確實在一般情況下學習程式,那麼這些程式難道不應該顯而易見嗎?相反,這些系統的內部看起來要「混亂」得多。

這個反對意見是嚴肅的,但在邏輯上存在跳躍。它將「我們目前的方法尚未發現清晰的程式結構」這一陳述與更強大的陳述「不存在此類結構」混為一談。換句話說,缺乏證據並非不存在的證據^([10])。我們面臨的困難可能不是結構的缺失,而是網路選擇的表示方案與我們目前用來搜尋它的工具之間的失配。

試圖識別 Atari 機器中哪些單個電晶體負責不同的遊戲是行不通的;儘管如此,Atari 機器確實具有真正的計算結構。我們在神經網路中可能處於類似的情況。來自 Jonas & Kording (2017)

為了使這點具體化,考慮一個思想實驗,改編自論文「神經科學家能理解微處理器嗎?」:

想像一組神經科學家正在研究一個運行街機(Atari)遊戲的微處理器(MOS 6502)。他們的工具受限於其行業:例如,他們可以探測單個電晶體的電壓並損毀它們以觀察對遊戲的影響。他們無法獲得高級原始碼或架構圖。

正如論文所證實的,神經科學家將無法理解該系統。這種失敗並非因為系統缺乏組合式的程式結構——根據定義,它就是一台執行程式的機器。他們的失敗在於抽象層級的失配。軟體的有意義概念(子程序、變數、調用棧)在電晶體層級沒有簡單的物理對應物。他們觀察到的「混亂」——例如一個電晶體同時參與計算分數、繪製精靈和播放聲音——是因觀察層級錯誤而產生的錯覺。

我的主張是,這正是我們面對神經網路時的情況。表面上的「混亂」,如 多義性(polysemanticity)*,並非反對學習程式的證據;它是一個邏輯未在單個神經元層級組織的程式的預期特徵。網路可能正在實現類似程式的東西,但使用的是目前對我們來說很陌生的「編譯器」和「指令集」。^([11])

在我看來,視覺和模加法案例研究中的清晰結果,是強大的約束(例如 CNN 的連接稀疏性,或頓悟設定中的重度正則化和淺層架構)迫使學習到的程式進入了一種對我們來說恰好異常容易閱讀的表示形式。它們在易讀性上是例外,而非在其底層本質上是例外。^([12])

因此,雖然機械可解釋性可以為我們的假設提供合理性,但我們需要轉向更間接的證據來開始建立一個積極的論據。

間接證據

就在 OpenAI 成立之前,我見到了 Ilya [Sutskever]。他對我說的第一句話之一是:「聽著,模型,它們只是想學習。你必須理解這點。模型,它們只是想學習。」

這有點像禪宗的公案。我聽了這話,然後我開悟了。

……那告訴我的是,我所看到的現象不僅僅是某些隨機的事情:它是廣泛的,它是更普遍的。

模型只是想學習。你把障礙從它們面前移開。你給它們好的數據。你給它們足夠的操作空間。你不要做一些愚蠢的事情,比如在數值上給它們不好的條件。

它們就想學習。它們會做到的。

-Dario Amodei^([13])我記得當我訓練我的第一個神經網路時,它帶有一種近乎奇蹟的感覺:它可以解決我完全不知道如何編寫程式碼的問題(例如如何區分貓和狗),而且是以一種完全不透明的方式,以至於即使在它解決了問題之後,我自己對如何解決該問題的了解也不比之前多。此外,儘管優化器有明顯問題、程式碼有錯誤或訓練數據很差,它仍具有非凡的韌性——不像我以前構建的任何其他工程系統,其魯棒性幾乎讓人聯想到生物。

我的印象是,這種「神奇」感是從業者中常見的(儘管通常不宣之於口)經驗。許多人只是學會接受這個謎團並繼續工作。但困惑並非美德——它只是暗示你的理解是不完整的,你對現象背後的真實機制一無所知。

我們在深度學習上的實踐成功已經超越了我們的理論理解。這導致了各種解釋的激增,這些解釋往往感覺是權宜且局部的——為了解釋特定的經驗發現而量身定制,卻沒有與其他觀察或任何更大的框架聯繫起來。例如,「雙重下降」(double descent)理論為 U 型測試損失曲線提供了一種敘事,但它是一個自洽的故事。例如,它不與我們關於 Transformer 中歸納頭如何形成的理論共享概念基礎。每一項新發現似乎都需要一個新的、定制的理論。人們自然會擔心我們是在擺弄周轉圓(epicycles)。

這種理論上的脆弱感因第二個問題而加劇:對於任何單一現象,我們往往缺乏共識,同時存在多個競爭假設。考慮神經網路為何能泛化的核心問題。它是最好由 SGD 對平坦最小值的隱式偏差、神經切線核(neural tangent kernels)的行為,還是某些其他屬性來解釋?該領域對這些觀點進行了積極辯論。在沒有機械理論獲得支持的地方,我們往往退縮到描述性標籤。我們說複雜能力是規模的「湧現」(emergent)屬性,這個詞命名了謎團,卻沒有解釋其原因。

當我們檢查最基礎的框架時,這種理論上的混亂最為尖銳。在這裡,問題不僅僅是缺乏共識,而是與經驗現實的直接衝突。這種脫節表現在幾個方面:

  • 有時,我們的理論做出的預測在實踐中被積極證偽。經典統計學習理論專注於偏差-變異權衡(bias-variance tradeoff),建議不要採取那些幾乎產生了所有最先進性能的規模化策略。
  • 在其他情況下,理論可能在技術上是正確的,但在實踐中具有誤導性,未能解釋使我們的模型有效的關鍵屬性。例如,通用逼近定理(Universal Approximation Theorem)保證了表示能力,但它是透過一種暗示指數級規模化的構造來實現的,而我們的模型不知何故避開了這點。
  • 而在其他領域,我們的經典理論幾乎完全沉默。它們沒有提供任何框架來開始解釋深奧的謎題,例如在相同數據上訓練的截然不同的模型之間,表示形式不可思議的收斂。

因此,我們面臨著一系列重大的經驗發現,而我們的基礎理論要麼與之矛盾、要麼具有誤導性,要麼乾脆缺席。這種理論真空為新視角創造了機會。

程式合成假設提供了這樣一個視角。它建議我們轉變對深度學習根本在做什麼的看法:從統計函數擬合轉向程式搜尋。具體主張是深度學習執行搜尋解釋數據的簡單程式。

這種視角的轉變可能提供一種方式來理解我們概述的理論張力。如果學習過程是搜尋一個高效的程式而非任意函數,那麼規避維度詛咒就不再那麼神祕。如果這種搜尋由強大的簡單性偏差引導,那麼規模化的非凡有效性就成了預期結果,而非悖論。

我們現在轉向關於逼近、泛化和收斂的著名悖論,看看程式合成假設如何解釋每一個悖論。

逼近悖論

(另見 這篇文章 的相關討論。)

我們可以克服維度詛咒,因為現實問題可以被分解成部件。當這按順序發生時(如右側的樹),深度網路具有優勢。圖片來源

在我們考慮網路如何學習或泛化之前,有一個更基本的問題:神經網路如何憑藉有限數量的參數,在原則上甚至能表示它所訓練的複雜函數?

考慮圖像分類任務。一個接收 1024x1024 像素圖像(大約一百萬個輸入維度)並將其映射到單個標籤(如「貓」或「狗」)的函數,先驗地是一個具有驚人高維複雜性的對象。誰能說這個函數的良好近似甚至存在於給定大小的神經網路所能表達的函數空間中?

教科書對這個問題的回答是通用逼近定理(UAT)。該定理指出,一個具有單個隱藏層的神經網路,只要給予足夠多的神經元,就可以將任何連續函數逼近到任意精度。從表面上看,這似乎完全解決了問題。

通用逼近定理的精確表述

設 $\sigma$ 為一個連續、非多項式的函數。那麼對於從 $\mathbb{R}^n$ 的緊子集到 $\mathbb{R}^m$ 的每個連續函數 $f$,以及某個 $\epsilon > 0$,我們可以選擇足夠大的神經元數量 $k$,使得存在一個網路 $g$,滿足:

$$\sup_x |f(x) - g(x)| < \epsilon$$

其中 $g(x) = C \cdot (\sigma \circ (A \cdot x + b))$,對於某些矩陣 $A \in \mathbb{R}^{k \times n}, b \in \mathbb{R}^k, C \in \mathbb{R}^{m \times k}$。

參見此處的證明大綱。通俗地說,這意味著對於任何表現良好的目標函數 $f$,你總是可以透過使神經元數量 $k$ 足夠大,來構建一個「足夠好」的近似單層網路 $g$。

請注意,這裡的網路是淺層的——該定理甚至沒有解釋為什麼需要深層網路,我們在談論深度分離(depth separations)時會回到這個問題。事實上,人們甚至不需要神經網路就可以證明這類定理——該定理直接平行於分析學中經典的 Stone-Weierstrass 定理,後者證明了多項式的類似陳述。

然而,這個答案極具誤導性。關鍵的限制在於「給予足夠多的神經元」這句話。仔細觀察 UAT 的證明會發現,對於一個任意函數,所需的神經元數量隨輸入維度呈指數級增長。這就是臭名昭著的維度詛咒。要表示一個百萬像素圖像上的函數,這將需要災難性數量的神經元——比宇宙中的原子還要多。

因此,UAT 並不是一個令人滿意的解釋。事實上,它是對一個近乎瑣碎事實的數學重述:有了指數級資源,人們可以簡單地記住函數的行為。用於證明該定理的構造實際上是在構建一個連續版本的查找表。這不是對深度學習成功的解釋;這是一個證明,即如果深度學習必須處理任意函數,它將是毫無實際意義的。

這不僅僅是 UAT 特定證明的弱點;它是高維空間的一個基本屬性。逼近理論中的經典結果表明,這種指數級規模化不僅是所需資源的上界,而且是一個嚴格的下界。這些定理證明,任何旨在逼近任意平滑函數的方法都注定會遭受維度詛咒。

參數計數下界

文獻中存在許多在不同技術假設下證明各種參數計數下界的結果。

DeVore, Howard, and Micchelli (1989) [定理 4.2] 的一個經典結果確立了任何連續逼近方案(包括神經網路)在 $d$ 維所有平滑函數空間上達到誤差 $\epsilon$ 所需的參數數量 $n$ 的下界。參數數量 $n$ 必須滿足:

$$n \gtrsim \epsilon^{-d/r}$$

其中 $r$ 是函數平滑度的度量。為了在維度 $d$ 增加時保持恆定的誤差 $\epsilon$,參數數量 $n$ 必須呈指數級增長。這證實了如果目標函數是任意的,沒有任何聰明的技巧可以逃脫這種命運。

那麼,通用逼近定理真正的教訓不是神經網路很強大。真正的教訓是:如果我們在現實世界中學習的函數是任意的,深度學習將是不可能的。 因此,深度學習在參數數量合理的情況下取得的經驗性成功,是關於問題本身性質的一個深刻線索:它們必須具有結構。

程式合成假設為這種結構命名:組合性(compositionality)。這不是一個新想法。它是電腦科學的基礎原則。為了解決一個複雜問題,我們不會寫下一個巨大的查找表來指定每個可能輸入的輸出。相反,我們編寫一個程式:我們將問題分層拆解為一系列簡單、可重用的步驟。每個步驟(就像電路中的邏輯閘)都是一個微小的查找表,我們透過組合它們來獲得巨大的表達能力。

這與我們透過機械可解釋性在某些深度神經網路中觀察到的經驗相符。它們似乎透過學習特徵的分層組合來解決複雜任務。視覺模型學會探測邊緣,邊緣組合成形狀,形狀組合成物體部件(車輪、窗戶),最後組合成「汽車」的物體探測器。網路不是在學習單個、龐大的函數;它是在學習一個拆解問題的程式。

這與經典計算的平行關係為逼近問題提供了一個替代視角。雖然 UAT 考慮的是任意函數的情況,但另一組結果研究了神經網路能多好地表示具有這種組合式、程式化結構的函數。

其中一個最相關的結果來自於考慮布林電路,它是程式化組合的一個典型例子。已知前饋神經網路可以表示任何由多項式大小的布林電路實現的程式,且僅需多項式數量的神經元。 這提供了與 UAT 不同種類的保證。它暗示如果一個問題具有高效的程式化解決方案,那麼該解決方案的高效神經網路表示也存在。

這為神經網路如何規避維度詛咒提供了一種解釋。它們的有效性並非源於表示任何高維函數的能力,而是源於它們適合表示具有高效程式的微小、結構化函數子集。從圖像識別到語言翻譯,實踐中看到的難題似乎都屬於這個特殊的類別。

為什麼特別是組合性?來自深度分離結果的證據。

到目前為止的論點是,現實世界的問題必須具有某種特殊的「結構」才能逃脫維度詛咒,而這種結構就是程式結構或組合性。但我們如何確定?是的,逼近理論要求我們必須擁有某些東西來將我們的目標函數與任意平滑函數區分開來,以避免需要指數級多的參數,但它並未指定是什麼。結構不一定必須是組合性;它可能是完全不同的東西。

雖然沒有確定的證明,但關於**深度分離定理(depth separation theorems)**的文獻為組合性假設提供了證據。邏輯很直接:如果組合性是關鍵,那麼一個在組合運算能力上受限的架構應該會感到吃力。具體來說,人們會預期限制網路的深度——即其進行順序、逐步計算的能力——應該會迫使它在某些問題上回到指數級規模化。

而這正是定理所顯示的。

這些深度分離結果(有時也稱為「不平坦化定理」)涉及構造一些函數族,深度神經網路可以用多項式數量的參數表示它們,但淺層網路則需要指數級數量才能表示。文獻中包含一系列此類函數,包括鋸齒函數某些多項式以及具有分層或模組化子結構的函數

單獨來看,這些例子中的許多都是數學構造,本身過於具體,無法告訴我們太多關於現實任務的信息。但綜合來看,一個模式出現了。深度提供指數級優勢的函數,一致地是那些「逐步」構建的函數。它們具有深度網路可以鏡像的順序結構。深度網路可以在一層計算中間結果,然後將該結果輸入下一層,有效地執行多步計算。

相比之下,淺層網路沒有這種順序處理的空間。它必須在單個並行步驟中計算其輸出。雖然它仍然可以執行「逐件」(piece-by-piece)計算(這是其寬度所允許的),但它不能執行「逐步」(step-by-step)計算。面對一個本質上是順序的問題,淺層網路被迫一次性模擬整個多步計算。這可能效率極低,就像在高度並行的機器上模擬順序程式有時需要指數級更多的資源一樣。

這與經典複雜性理論形成了平行。神經網路中深度與寬度的區別,鏡像了順序(P)與可並行(NC)計算之間的區別。正如人們猜測某些問題本質上是順序的且無法被有效並行化(NC ≠ P 猜想),這些定理表明某些函數本質上是深的,無法被有效地「平坦化」為淺層網路。

泛化悖論

(另見 這篇文章 的相關討論。)

或許與經典理論最劇烈的背離來自於深度學習模型的泛化方式。學習演算法只有在能對新的、未見過的數據表現良好時才有用。統計學習理論的核心問題是:允許模型泛化的條件是什麼?

經典的答案是偏差-變異權衡。該理論假設模型的誤差可以分解為兩個主要來源:

  • 偏差(Bias): 由於模型過於簡單而無法捕捉數據潛在結構所產生的誤差(欠擬合 underfitting)。
  • 變異(Variance): 由於模型對其所見的特定訓練數據過於敏感,導致其擬合了噪聲(過擬合 overfitting)。

根據這個框架,學習是一場微妙的平衡行動。從業者的工作是仔細選擇具有「正確」複雜性的模型——既不太簡單也不太複雜——以落入偏差和變異都較低的「金髮姑娘區」(Goldilocks zone)。這一觀點得到了諸如「天下沒有白吃的午餐」定理等原則的支持,這些原則暗示不存在普遍良好的學習演算法,只有其歸納偏好被人類精心選擇以匹配特定問題領域的演算法。

從這個經典視角來看,明確的預測是:盲目地增加模型容量(例如,透過添加更多參數),使其遠遠超過擬合訓練數據所需的程度,是災難性的做法。這樣的模型應該具有災難性的高變異,導致嚴重的過擬合和極差的泛化能力。

然而,現代深度學習中最重要的經驗發現或許就是:這個預測完全錯誤。正如 Rich Sutton 所說的「苦澀的教訓」,通往更好性能的最可靠路徑是擴大計算規模和模型大小,有時甚至深入到模型可以輕易記住整個訓練集的範疇。這不僅僅是對理論預測的微小偏離:它是對理論核心規範性建議的直接矛盾。

這引出了第二個更深層的謎題,最早由 Zhang et al. (2017) 提出。作者進行了一個簡單的實驗:

  • 他們在一個真實數據集(如 CIFAR-10)上訓練一個標準視覺模型,並確認其泛化良好。
  • 接著,他們在標籤被完全隨機化的損毀版數據集上,使用完全相同的模型(相同的架構、優化器和正則化)進行訓練。

網路的表達能力足以使其在隨機標籤上達到近乎零的訓練誤差,完美地記住了荒謬的數據。正如預期的那樣,它在測試集上的表現非常糟糕——它沒有學到任何可泛化的東西。

悖論在於:為什麼同一個模型在真實數據上泛化良好?經典理論通常將模型的泛化能力與其「容量」或「複雜性」聯繫起來,這是其架構的一個固定屬性,與其表達能力有關。但這個實驗表明,泛化不是模型的靜態屬性。它是模型、學習演算法與數據本身結構之間交互的動態結果。同一個完全有能力記住隨機噪聲的網路,在接受具有真實結構的數據訓練時,不知何故「選擇」了尋找一個可泛化的解決方案。為什麼?

程式合成假設為這兩個悖論提供了一個連貫的解釋。

首先,為什麼規模化有效? 假設認為學習是在某個程式空間中的搜尋,由強大的簡單性偏差引導。在這種觀點下,增加更多參數類似於擴大搜尋空間(例如,允許更長或更複雜的程式)。雖然這確實增加了模型表示過擬合解決方案的能力,但簡單性偏差起到了強大的正則化作用。學習過程不是在尋找任何擬合數據的程式;它是在尋找最簡單的程式。給予搜尋更多的資源(參數、計算、數據)提供了更好的機會來找到對應於真實潛在結構的簡單、可泛化的程式,而不是滿足於一個更複雜的、記憶式的程式。

其次,為什麼泛化取決於數據結構? 這是受簡單性偏差引導的程式搜尋的自然結果。

  • 當在真實數據上訓練時,存在一個解釋統計規律的簡短、簡單的程式(例如,「貓有尖耳朵和鬍鬚」)。學習過程的簡單性偏差找到了這個程式,並且因為它捕捉到了真實結構,所以泛化良好。
  • 當在隨機標籤上訓練時,不存在這樣的簡單程式。將給定圖像映射到隨機標籤的唯一方法是透過一個長、複雜、高複雜性的程式(實際上是一個查找表)。在被迫違背其歸納偏好的情況下,學習演算法最終找到了這樣一個程式來最小化訓練損失。這個解決方案是純粹的記憶,自然無法泛化。

如果假設類似程式合成的東西是真的,那麼數據依賴型泛化現象就不那麼令人驚訝了。模型的泛化能力不是其架構的固定屬性,而是其學習到的程式的屬性。模型在真實數據集上找到一個簡單程式,在隨機數據集上找到一個複雜程式,這兩個程式具有非常不同的泛化屬性。而且有一些證據表明,泛化背後的機制與我們討論過的其他經驗現象並非毫無關係。我們可以在前面討論過的**頓悟(grokking)**設定中看到這點。回想一下在模加法上訓練的 Transformer:

  • 最初,模型學習一個基於記憶的程式。它在訓練數據上達到 100% 的準確率,但其測試準確率接近零。這類似於學習「隨機標籤」數據集——一個複雜、不可泛化的解決方案。
  • 在經過大量的進一步訓練後,在懲罰複雜性的正則化項(權重衰減)驅動下,模型的內部解決方案經歷了「相變」。它發現了模加法的傅立葉演算法
  • 隨著演算法程式的發現(或者更確切地說,隨著稍後發生的記憶程式的移除),測試準確率突然跳升至 100%。

泛化的突然增加似乎是模型用更簡單的演算法解決方案取代複雜、過擬合解決方案的直接結果。在這種情況下,泛化是透過合成一個不同的、更高效的程式來實現的。

收斂悖論

當我們要求神經網路解決一項任務時,我們指定了希望它解決什麼任務,但沒有指定它應該如何解決該任務——學習的目的就是讓它自己尋找策略。我們定義一個損失函數和一個架構,創建一個可能函數的空間,並要求學習演算法透過最小化損失來找到一個好的函數。鑑於這種自由度以及搜尋空間的高維性,人們可能會預期由不同模型——特別是那些具有不同架構或隨機初始化的模型——所找到的解決方案會具有高度的多樣性。

相反,我們在經驗上觀察到的是一種強烈的收斂趨勢。這在表示對齊(representational alignment)現象中表現得最為直接。這種對齊非常魯棒:

  • 它在同一架構的不同訓練運行中都成立,表明最終的解決方案並非隨機種子的敏感偶然結果。
  • 更令人驚訝的是,它在不同架構之間也成立。例如,在同一視覺任務上訓練的 Transformer 和 CNN 的內部激活通常可以透過簡單的線性變換相互映射,這表明它們不僅學到了相似的輸入-輸出行為,還學到了相似的中間計算步驟。
  • 在某些情況下,它甚至跨模態成立。像 CLIP 這樣訓練將圖像與文本關聯的模型,學到了一個共享的表示空間,其中狗的照片向量靠近短語「一張狗的照片」的向量,這表明它們收斂到了一個共同的、抽象的概念結構。

當我們觀察到與生物系統的平行關係時,謎團進一步加深。例如,在視覺網路早期層中湧現的類 Gabor 濾波器,與靈長類動物視覺皮層 V1 區域神經元的感受野驚人地相似。看來進化和隨機梯度下降這兩種在截然不同的基質上運作、完全不同的優化過程,在暴露於自然世界的相同統計結構時,收斂到了相似的解決方案。

解釋這點的一種方法是假設模型並非在導航某個無差別的任意函數空間,而是正在瞄準一組稀疏的、解決任務的高效程式。如果遵循物理丘奇-圖靈論題,我們將自然世界視為具有真實的、可計算的結構,那麼一個有效的學習過程可以被看作是搜尋一個逼近該結構的演算法。從這個角度來看,收斂並非偶然,而是一個信號,表明不同的搜尋過程正在發現相似的客觀優良解決方案,就像不同的工程傳統可能會獨立地得出拱形是跨越間隙的高效解決方案一樣。

這個假設——即學習是搜尋一個最佳的、客觀的程式——帶有一個強烈的暗示:搜尋過程必須是通用目的的,能夠在沒有被明確編碼在架構中的情況下找到此類程式。碰巧,該領域一個獨立的大規模趨勢在這一點上提供了大量的數據。

Rich Sutton 的「苦澀的教訓」描述了一個一致的經驗發現:長期的進步來自於擴大通用的學習方法,而非來自於編碼特定的人類領域知識。舊的範式,特別是在電腦視覺、語音識別或遊戲博弈等領域,涉及辛辛苦苦地手工打造具有顯著先驗知識的系統。多年來,最先進的技術依賴於複雜的手工設計特徵提取器(如 SIFT 和 HOG),這些提取器建立在人類關於圖像哪些方面是重要的直覺之上。學習的作用被限制在一個相對簡單的分類器上,該分類器操作這些預先消化過的特徵。潛在的假設是,如果沒有強大的人類引導,搜尋空間太難導航。

深度學習的現代範式證明了這個假設是錯誤的。進步來自於放棄這些手工設計的約束,轉而利用數據和計算的蠻力訓練通用的端到端架構。這種通用學習相對於編碼的人類知識的一致勝利,是一個強大的指標,表明我們正在使用的搜尋過程實際上是通用目的的。它表明學習演算法本身在獲得足夠靈活的基質和足夠的資源時,是比人類智慧更有效的發現相關特徵和結構的機制。

這個視角有助於連接這些現象,但也邀請我們完善最初的圖景。首先,「單一最佳程式」的概念可能過於僵化。我們觀察到的可能不是收斂到單個點,而是收斂到一組結構相似、高效程式的狹窄子集。模型可能正在學習不同但在演算法上相關的解決方案,它們都屬於同一類有效策略。

其次,目前尚不清楚這種收斂純粹是問題解空間的屬性,還是我們的搜尋演算法的結果。隨機梯度下降並非中立的探索者。在導航高度過度參數化的損失景觀時,隨機優化的隱式偏差可能會創造強大的通道,將學習過程漏斗式地引向特定種類的簡單、組合式解決方案。或許並非條條大路通羅馬,而是通往羅馬的路最快。因此,收斂可能是關於我們學習動力學本身性質的一個線索——即它們對特定類別的解決方案具有強大的、內在的偏好。

綜合來看,這些觀察表明,現實世界任務的有效解決方案空間比可能的模型空間要小得多且更有結構。收斂現象表明我們的模型正在找到這種結構。苦澀的教訓表明我們的學習方法足夠通用,可以做到這一點。剩下的問題指引我們去探究該結構的精確性質,以及我們的學習演算法如此擅長尋找它的機制。

前行之路

如果你已經跟隨論證到了這一步,你可能已經感覺到在哪裡變得難以精確。機械可解釋性的證據顯示網路可以實現組合式演算法。間接證據表明這與它們為何能泛化、規模化和收斂有關。但「與……有關」承擔了太多的解釋工作。說深度學習就是某種形式的程式合成,到底意味著什麼?

試圖仔細回答這點會導致兩個問題。主張「神經網路學習程式」似乎需要說明在連續參數空間中程式到底是什麼。它還需要解釋梯度下降如何能高效地找到此類程式,畢竟我們知道程式搜尋具有難處理性。

這些正是那種「困難本身就具有啟發性」的問題。每一個都有特定的形狀——你需要思考什麼,解決方案需要提供什麼。我刻意專注於它們:正是這種形狀最終指引我走向了一些我原本不會考慮的特定數學工具(奇異學習理論、代數幾何等)。

這也是這篇文章將轉變語調的地方。剩下的章節勾勒了這些問題的結構,並示意了為什麼某些數學框架可能變得相關。我不會在這裡全面展開——那需要遠超單篇部落格文章範圍的機制——但我希望展示為什麼你需要離開岸邊,以及你在開闊的海面上可能會發現什麼。

表示問題

程式合成假設假設了兩種本質上不同的數學對象之間的關係。

一方面,我們有程式。程式是一個離散且符號化的對象。它的身份由其組合結構定義——一個由不同運算組成的圖。對這種結構的一個微小改變,比如翻轉一個比較符或將加法替換為減法,都可能創建一個完全不同的程式,其行為發生不連續的、全局性的變化。程式空間是離散的。

另一方面,我們有神經網路。神經網路由其參數空間定義:一個實值權重的連續向量空間。網路計算的函數是這些參數的平滑(或至少是分段平滑)函數。這種平滑性是使透過梯度下降進行學習成為可能的本質屬性,梯度下降是一個沿著連續損失景觀進行無窮小步進的過程。

這呈現出一種表面上的類型失配:連續參數空間中的連續過程如何產生離散、有結構的程式?

問題比表面上看起來更深。要理解原因,我們必須首先精確定義當我們說一個網路「學會了一個程式」時意味著什麼。這不能僅僅關於網路計算的輸入-輸出函數。一個為模加法完美記住查找表的網路,在有限域上計算的函數與學會了通用的三角演算法的網路相同。然而,我們會強調說它們學會了不同的程式。程式不僅僅是函數;它是底層的機制

因此,這個概念必須依賴於參數,而不僅僅是函數,這呈現了進一步的概念障礙。為了將「機制」的概念形式化,一個自然的首要想法可能是將連續參數空間劃分為離散區域。在這個圖景中,區域 $W_A$ 內的所有參數向量都對應於同一個程式 $A$,而不同區域 $W_B$ 中的向量則對應於程式 $B$。但這個簡單的圖景遇到了一個微妙且致命的問題:正是使梯度下降成為可能的平滑性,消解了程式之間任何尖銳的邊界。

想像參數空間中一條從點 $w_A \in W_A$(顯然實現了程式 $A$)到點 $w_B \in W_B$(顯然實現了程式 $B$)的連續路徑。想像一下,比如說,$A$ 有一些 $B$ 沒有的額外子程序。因為從參數到函數的映射是平滑的,網路的行為在這條路徑上必須連續變化。在這條路徑上的哪個確切點,機制從 $A$ 切換到了 $B$?新的子程序是在哪裡添加的?沒有規範的地方可以劃線。尖銳的邊界將意味著不連續性,而從參數到函數映射的平滑性似乎禁止了這點。

這不是一個簡單的問題,值得花一些時間思考你可能會如何嘗試解決它,以體會這點。

那麼,這暗示了對於程式合成假設要成為一個連貫的科學主張,它需要一些尚未存在的東西:一個關於程式空間的正式的、幾何的概念。這是一個相當大的空白需要填補,在某些方面,這整篇文章就是我為這樣一個雄心勃勃的數學目標辯護的冗長方式。

我不會假裝我和我的合作者沒有我們^([14]) 自己 的想法來解決這個問題,但所需的數學複雜度大幅跳升,它們可能需要各自的一篇完整文章才能說清楚。現在,我將僅示意一些我認為指向正確方向的線索。

第一個是退化(degeneracies)現象^([15])。例如,考慮死神經元(dead neurons),其傳入權重和激活使得該神經元對任何輸入都不會觸發。具有死神經元的神經網路就像一個移除了這些死神經元的較小網路。這提供了一種機制,讓神經網路以依賴參數的方式改變其「有效大小」,這對於例如根據你在參數空間中的位置動態添加或移除新子程序(如我們上面的例子)是必要的。事實上,死神經元只是具有類似效果的整個退化動物園中的一個例子,這些退化在神經網路中似乎極其普遍。

值得一提的是,目前的圖景現在強烈暗示了一個被稱為代數幾何的數學分支。代數幾何(特別是奇點理論)系統地研究這些退化,並進一步提供了離散結構(代數)與連續結構(幾何)之間的橋樑,這正是我們確定的程式合成假設所必需的聯繫^([16])。此外,奇異學習理論告訴我們這些退化如何控制損失景觀和學習過程(經典上僅在貝氏設定下,我們在下一節討論這一局限性)。這裡還有很多可以說的,但我留待未來再對這些材料進行適當處理。

搜尋問題

這個故事還有另一個問題。我們的假設是深度學習正在執行某種形式的程式合成。這意味著我們不僅要解釋程式如何在神經網路中被表示,還需要解釋它們如何被學習。這裡有兩個子問題。

  • 首先,深度學習如何能實現所需的歸納偏好?為了讓深度學習演算法實現類似於所羅門諾夫歸納法的東西,它們必須能夠隱式地遵循依賴於程式結構的歸納偏好,如簡單性偏差。也就是說,優化過程必須以某種方式意識到程式結構,以便偏好某些類型的程式(例如較短的程式)而非其他程式。優化器必須「看到」參數的程式結構。
  • 其次,深度學習在實踐中有效,且使用合理的計算資源;與此同時,即使是所羅門諾夫歸納法最有效的版本(如速度歸納),其運行時間也呈指數級或更糟^([5])。如果深度學習正在高效地執行某種與所羅門諾夫歸納法類似的程式合成,這意味著它已經隱式地做到了我們在顯式上無法弄清楚的事情——它的效率必然源於某種我們尚不了解的洞察。當然,我們知道部分答案:SGD 僅需要局部信息即可進行優化,而不是像貝氏學習那樣進行暴力全局搜尋。但隨後謎團變成了一個眾所周知的謎團:為什麼像 SGD 這樣的近視搜尋能收斂到全局優良的解決方案?

這兩個都是關於優化過程的問題。局部優化器(如 SGD)如何能執行類似所羅門諾夫歸納法的東西,目前還一點也不明顯,更不用說比我們歷史上為所羅門諾夫歸納法本身(及其變體)所能想出的方法高效得多。這是一個困難的問題,但我將嘗試指向我認為可以回答這些問題的研究。

優化過程先驗地可能取決於許多因素:優化器的選擇、正則化、dropout、步長等。但我們可以注意到,深度學習在這些變量的廣泛選擇範圍內都能取得一定的成功(儘管有時性能會下降)。AdamW 與 SGD 的選擇似乎遠不如選擇進行基於梯度的學習本身來得重要。換句話說,我相信這些變量會影響效率,但我懷疑它們並非解釋優化過程為何可能成功的根本原因。

相反,這裡有一個共同變量,它似乎決定了隨機優化器絕大部分的行為:損失函數。像 SGD 這樣的優化器根據小批量損失函數^([17])(如均方誤差)採取每一個梯度步驟:

$$\frac{dw}{dt} = -\tau \frac{dL}{dw}$$
$$L(w) = \frac{1}{n} \sum_{i=1}^n (y_i - f_w(x_i))^2$$

其中 $w$ 是參數向量,$f_w$ 是模型在參數 $w$ 下的輸入/輸出映射,$(x_i, y_i)$ 是 $n$ 個訓練樣本和標籤,$\tau$ 是學習率。

在最常見的監督學習版本中,我們可以進一步聚焦。損失函數本身可以分解為兩個效應:參數-函數映射 $w \mapsto f_w$,以及目標分佈。整體的損失函數可以寫成參數-函數映射與到目標分佈的某種統計距離的組合,例如對於均方誤差:

$$L(w) = \ell \circ f$$
其中 $\ell(g) = 1/n \sum_{i=1}^n (y_i - g(x_i))^2$。

請注意,這裡的統計距離 $\ell(g)$ 是一個相當簡單的對象。幾乎在所有情況下,這裡的統計距離(在函數空間上)都是凸的且具有相對簡單的函數形式;此外,它是人們在許多不同架構中都會使用的相同距離,包括那些沒有達到神經網路卓越性能的架構(例如多項式逼近)。因此,人們預期可學習性和歸納偏好的問題在很大程度上歸結為參數-函數映射 $f_w$,而非(函數空間)損失函數 $\ell(g)$。

如果上述推理正確,這意味著為了理解 SGD 如何可能執行某種程式合成,我們僅需要理解參數-函數映射的屬性。這將是一個實質性的簡化。此外,這將學習動力學與我們之前的表示問題聯繫起來:參數-函數映射正是負責表示章節中討論的謎團的同一個對象。

這不是一個無懈可擊的論證——它取決於一個經驗性問題,即是否可以忽略(或視為二階效應)除損失函數之外的其他優化細節,以及關於參數-函數映射相對於(函數空間)損失重要性的手揮式論證是否穩固。

即使假設這個論證有效,我們也只是定位了謎團,而非解決了它。問題依然存在:參數-函數映射的哪些屬性使得目標可學習?在這一點上,推理變得更具推測性,但我將勾勒一些想法。

表示章節關注的是映射在參數空間每個點編碼了什麼結構。可學習性似乎取決於更深層次的東西:點與點之間路徑的結構。函數空間損失的凸性意味著在函數空間中足夠直的路徑是無障礙的——粗略地說,如果終點是較低損失,則整條路徑都是下坡。所以問題變成了:映射提供了哪些函數空間路徑?

相同的架構成功地學習了許多不同的現實世界目標。無論映射的什麼屬性啟用了這點,它必須是相對通用的——不是為特定目標量身定制的。這自然引導我們詢問:在什麼情況下,參數-函數映射為具有某種結構的目標提供了足夠直接的路徑,並表徵「足夠直接」意味著什麼。

這又回到了表示問題。如果映射編碼了某種程式結構的概念,那麼參數空間中的路徑結構就會誘導程式之間的關係——哪些程式是「相鄰的」,哪些是從哪些可達的。表示章節詢問程式如何被編碼為點;可學習性詢問它們如何被連接為路徑。這些是同一個對象的不同側面。

一個假設:程式之間的組合關係可能對應於由參數-函數映射定義的某種「路徑相鄰性」概念。如果共享結構的程式在附近——可透過直接路徑相互到達——且如果較簡單的程式位於通往較複雜程式的路徑上,那麼效率、簡單性偏差以及經驗觀察到的階段性學習將自然隨之而來。梯度下降將是增量式構建而非隨機搜尋;困擾所羅門諾夫的枚舉問題將消解為遍歷問題。

這是推測性的且不精確。但對於所需事物的形狀,有一種數學上的自然感。表示問題要求對象層級的對應:參數空間中的地層(strata)對應於程式。搜尋問題要求更強大的東西——這種對應擴展到路徑。參數空間中的路徑(梯度下降所遍歷的)應該對應於程式之間某種關係或轉換的概念。

這是高等數學中常見的舉措(有時由範疇論形式化):一旦你在兩類對象之間建立了對應關係,你就會詢問它是否擴展到這些對象之間的關係。在高等範疇論等領域,當「對象之間的關係」特別採取路徑的形式時,詢問這類問題尤為常見。我不主張這些領域的現有機制可以直接應用,特別是在我提供的細節(缺乏)的情況下。但這個問題足以引發調查: 「程式之間的相鄰性」應該意味著什麼?參數-函數映射是否誘導或保留了這種結構?如果是這樣,這對我們可以進行經驗檢查的學習動力學有什麼預測?

附錄

相關工作

這篇文章中的大部分想法並非個人原創;我認為核心價值在於將它們綜合在一起。據我所知,我在此表達的想法在前沿實驗室的研究人員、機械可解釋性研究人員、深度學習科學領域的部分研究人員以及其他人中非常普遍。特別是,深度學習正在執行所羅門諾夫歸納法的某種可處理版本的核心假設並不新鮮,並且已被多次 撰寫 多次。(然而,我不認為這在整個機器學習領域是一個流行或被接受的觀點。)就個人而言,我考慮這個假設的版本已有大約三年。透過這篇文章,我旨在分享對該假設證據的更全面綜合,並指出形式化這一想法的具體研究方向。

以下是各個領域已知和已發表內容的不完全列表:

深度學習與程式合成之間的現有比較。 圍繞所羅門諾夫歸納法的想法對許多早期以 AGI 為中心的研究人員極具激勵作用。Shane Legg(DeepMind 聯合創始人)關於所羅門諾夫歸納法撰寫了他的 博士論文;John Schulman(OpenAI 聯合創始人)在 這裡 明確討論了與深度學習的聯繫;Ilya Sutskever(OpenAI 聯合創始人)一直在發表關於相關想法的 演講。在 少數 地方 可以 發現 明確陳述的深度學習與所羅門諾夫歸納法之間的假設聯繫,儘管我不認為這些是首創。我的個人經驗是,這類直覺在例如前沿實驗室工作的人中相當普遍,即使它們沒有以書面形式發表。我不確定誰最先有了這個想法,並懷疑它是被多次獨立得出的。

特徵學習。 說普通 ML 研究人員將深度學習視為一個完全的黑箱演算法是不準確的;深度神經網路能夠從任務中提取「特徵」並以此表現良好,這是被廣泛接受且無爭議的。然而,聲稱這些特徵實際上是以某種類似電腦程式的機械方式被提取和組合的,則更進了一步。

組合性、層次結構和模組化。 我這裡非正式的「程式」概念與組合性密切相關。一個相當知名的假設是,監督學習之所以表現良好,是由於模型和/或目標任務中的組合式/分層式/模組化結構。這在 逼近理論中(特別是關於深度分離的文獻)尤為突出,作為對我在「逼近悖論」章節中強調的問題的一種解釋。

機械可解釋性。 機械可解釋性領域的(隱含)前提是,人們可以理解負責網路輸出的內部機械性(即類程式)結構。機械可解釋性負責發現了大量此類結構的例子,我認為這構成了程式合成假設最強有力的單一證據。我在文中討論了幾個此類結構的案例研究,但在該領域的許多論文中,可能還有數百個我沒有涵蓋的例子。最近的綜述可以在 這裡 找到。

奇異學習理論。 在「前行之路」章節中,我強調了退化在控制某種有效程式結構中可能扮演的角色。在某種程度上(我已示意但未詳述),本文提出的想法可以被看作是激勵奇異學習理論作為正式奠定這些想法並產生實際工具來操作化它們的一種手段。這在奇異學習理論領域內的 一系列工作 中最為明確,該工作試圖精確地將程式合成與(玩具)學習機器的奇異幾何聯繫起來。


  • ^(^)來自 GPT-4.5 發布討論,38:46

  • ^(^)來自他的 博士論文,第 23-24 頁。

  • ^(^)連同所羅門諾夫、柯爾莫哥洛夫、柴廷和列文的獨立貢獻。

  • ^(^)必須小心,因為一些常用的關於這種最優性的「證明」在某種程度上是循環論證。這些通常大致如下:在假設數據生成過程具有低柯氏複雜性的前提下,所羅門諾夫歸納法是最優的。這當然完全是循環的,因為我們實際上從一開始就假設了所羅門諾夫歸納法的歸納偏好是正確的。更好的證明則顯示了一個遺憾界(regret bound):在任何序列上,所羅門諾夫歸納法的累積損失最多比任何可計算的預測器差一個常數——其中常數取決於競爭預測器的複雜性,而非序列的複雜性。這是一個不需要對數據源做任何假設的頻率派保證。參見 這篇博士論文 的第 3.3.2 節和定理 3.3。感謝 Cole Wyeth 向我指出這個論點。

  • ^(^)參見 這篇論文

  • ^(^)取決於「蛋白質折疊」的定義,人們可以爭論該問題是否真的已解決;例如,蛋白質如何隨時間動態折疊的問題據我所知仍是開放的。參見分子生物學家 Mohammed AlQuraishi 的 這篇知名部落格文章 了解更多討論,以及為什麼他認為儘管有這些限制,將 AlphaFold 稱為「解決方案」是合適的。

  • ^(^)事實上,該解決方案可以被視為整數在加法模 P 下的群(循環群 $C_P$)的表示論演算法。後續 論文 證明了神經網路也能學會比循環群更一般的群的可解釋表示論演算法。

  • ^(^)就此而言,在這種特定情況下,我們確實知道如果不是訓練損失,那必然是什麼在驅動這個過程:正則化 / 權重衰減。在頓悟的情況下,我們確實對權重衰減如何引導訓練偏好泛化解決方案有 相當的理解。然而,這種解釋在各方面都有局限性,目前尚不清楚它在多大程度上能推廣到這種特定設定之外。

  • ^(^)需要明確的是,人們仍然可以將現有的機械可解釋性工具應用於真實語言模型並獲得富有成效的結果。但結果通常只能解釋網路的一小部分,且其方式(在我看來)不如 Olah et al. (2020) 對 InceptionV1 的逆向工程那樣清晰且令人信服。

  • ^(^)這個短語經常被濫用——例如,如果你出庭時沒有證據,我可以合理地推斷你的案子沒有好的證據。這是邏輯推理與啟發式/貝氏推理之間的差距。在現實世界中,如果一個命題的證據存在,它通常可以且會被找到(因為我們關心它),所以你可以將缺乏證據解釋為暗示該命題為假。然而,在這種情況下,我提出了一個具體理由,說明為什麼即使所述命題為真,人們也不應該期望看到證據。

  • ^(^)許多可解釋性研究人員特別相信 線性表示假設,即這種程式結構的變量(「特徵」)對應於激活空間中的線性方向,或更強大的 疊加假設,即此類方向構成了激活空間的一個稀疏過基(overbasis)。在解釋這些假設時必須小心,因為社群內有不同的操作化定義;在我看來,更複雜的版本比幼稚的版本要合理得多(感謝 Chris Olah 的有益對話)。目前,我懷疑線性表示是否能對模型的行為給出 最平實的描述,或者這是否足以進行完全的逆向工程,但我相信該假設指出了模型的一些真實特徵,且像 SAE 這樣的工具只要意識到其局限性,就會是有幫助的。

  • ^(^)參見例如 這些 論文 的結果,作者透過額外的正則化項激勵空間模組化。作者將其解釋為激勵模組化,但我會將其解釋為激勵現有的模組化浮現到表面

  • ^(^)來自 Dwarkesh Patel 的播客,13:05

  • ^(^)這些想法的功勞實際上應該歸於 Dan Murfet,以及他現在/以前的學生,包括 Will Troiani、James Clift、Rumi Salazar 和 Billy Snikkers。

  • ^(^)設 $f(x|w)$ 表示模型在輸入 $x$、參數 $w$ 下的輸出。形式上,我們說參數空間中的一個點 $w \in W$ 是退化的奇異的,如果存在一個切向量 $v \in T_wW$,使得方向導數 $\nabla_v f(x|w) = 0$ 對於所有 $x$ 成立。換句話說,在參數空間中沿某些方向移動不會改變模型的行為(在一階近似下)。

  • ^(^)這並不像看起來那麼陌生。請注意,這提供了一個將神經網路與經典計算很好地聯繫起來的視角。首先考慮,例如,布林電路的閘字面意義上定義了 $F_2$ 上的方程組,其解集是 $F_2$ 上的代數簇。或者,考慮具有多項式(或解析)激活函數的神經網路定義了 $\mathbb{R}$ 上的方程組,其消失集是 $\mathbb{R}$ 上的代數(分別為解析)簇。當然,這距離填補這一空白僅走了一小步,但人們可以開始看到這如何變得合理。

  • ^(^)一個常見的視角是將這種小批量損失寫成其均值(總體)值加上某個噪聲項。也就是說,我們將 SGD 等優化器視為類似於「梯度下降加噪聲」的東西。這與過阻尼朗之萬動力學(overdamped Langevin dynamics)等數學模型非常相似,儘管請注意噪聲項可能不像朗之萬動力學中那樣是高斯的。神經網路訓練的收斂是由總體項還是噪聲項驅動的,這是一個開放性問題。(請注意,這與 SGD 訓練的神經網路的泛化 / 歸納偏好是由總體項還是噪聲項驅動的是不同的問題。)我暫且相信(儘管有些爭議)收斂和歸納偏好都是由總體損失中的結構而非噪聲項驅動的,但在這裡解釋我的推理有點超綱了。

Lesswrong

相關文章

  1. 無K-複雜度的所羅門諾夫歸納法技術導論

    5 個月前

  2. 神經演算法推理

    The Gradient · 超過 2 年前

  3. 你無法透過模仿學習來實現持續學習

    大約 1 個月前

  4. 「對齊很難」的論述為何看似與人類直覺格格不入,反之亦然的六個原因

    5 個月前

  5. 末日預言者的日記:關於 AI 風險的十二年爭論(第一部分)

    9 天前