神經網絡之父 Geoffrey Hinton 推翻畢生心血「反向傳播演算法」:打掉重來,AI 才有未來!

一張指導圖,防止讀者迷失

【我們為什麼挑選這篇文章】以「深度學習之父」 和「神經網絡先驅」聞名於世的 Geoffrey Hinton 提出了對現在最核心的 back-propagation (反向傳播)演算法的深沈反思。Hinton 說:「我的觀點是把它(反向傳播)全部丟下,重起爐灶。」

反向傳播演算法是 Siri、圖像辨識等 AI 技術的核心,為何 Geoffrey Hinton 希望推翻它? Google 首席 AI 科學家李飛飛不只同意 Hinton 的說法,還這樣比喻反向傳播的重要性,就像勞斯萊斯發動機之于飛機,非常重要,但還不足以讓我們像鳥兒一樣自由翱翔。」這篇文章解釋了究竟反向傳播演算法是什麼?而 Hinton 提出的 capsule 有何全新見解?(責任編輯:劉庭瑋)

現在的深度學習發展似乎已經陷入了大型化、深度化的怪圈,我們設計的模型容易被對抗樣本欺騙,同時又需要大量的訓練數據——在無監督學習上我們取得的突破還很少。作為反向傳播這一深度學習核心技術的提出者之一,Geoffrey Hinton 很早就意識到反向傳播並不是自然界生物大腦中存在的機制。那麼,在技術上,反向傳播還有哪些值得懷疑的地方?

反向傳播的問題在哪?

Geoffrey Hinton 對人工智能的未來非常擔憂。在最近的一次人工智能會議上,Hinton 表示自己對於反向傳播「非常懷疑」,並提出「應該拋棄它並重新開始」。

在人工智慧多年的發展過程中,反向傳播已經成為了深度學習不可或缺的一部分。研究人員發現,只要層是可微分的,我們就可以在求解時使用任何計算層。換句話說,層的梯度是可以被計算的。更為清楚地說,在尋物遊戲中,準確表現出被蒙住眼睛的玩家與他的目標之間的距離。

在反向傳播上,存在著幾個問題:第一個是計算出來的梯度是否真的是學習的正確方向。這在直觀上是可疑的。人們總是可以尋找到某些看起來可行的方向,但這並不總是意味著它最終通向問題的解。所以,忽略梯度或許也可以讓我們找到解決方案(當然,我們也不能永遠忽略梯度)。適應性方法和優化方法之間存在著很多不同。

現在,讓我們回顧一下反向傳播思想的起源。歷史上,機器學習起源於曲線擬合的整體思路。在線性回歸的具體情況下(如對一條線進行擬合預測),計算梯度是求解最小二乘問題。在優化領域,除了使用梯度找到最優解之外,還有許多其他方法。不過,事實上,隨機梯度下降可能是最基本的優化方法之一。所以它只是我們能想到的很多方法中最為簡單的一個,雖然也非常好用。

大多數研究優化的學者很長一段時間以來都認為深度學習的高維空間需要非凸解,因此非常難以優化。但是,由於一些難以解釋的原因。深度學習使用隨機梯度下降(SGD)的效果卻非常好。許多研究人員對於為什麼深度學習用SGD 優化如此簡單提出了不同解釋,其中最具說服力的說法是這種方法傾向於找到真正的鞍點——而不是小範圍內的谷地。使用這種方法的情況下,總是有足夠的維度讓我們找到最優解。

一張指導圖,防止讀者迷失

DeepMind 研究的合成梯度是一種解耦層方法,以便於我們不總是需要反向傳播,或者梯度計算可推遲。這種方法同樣非常有效。這一發現可能也是一種暗示,正在產生更通用的方法。好像關於這個方向的任何升級都是有益的(隨意提了一下合成梯度),不管效果是不是一樣。

還有一個使用目標函數的典型問題:反向傳播是相對於目標函數計算的。通常,目標函數是預測分佈與實際分佈之間差異的量度。通常,它是從 Kullback-Liebler 散度衍生出來的,或者是像 Wassertsein 這樣的其他相似性分佈數值。但是,在這些相似性計算中,「標籤」是監督訓練必不可少的一部分。在 Hinton 拋出反向傳播言論的同時,他也對於監督學習發表了自己的看法:「我認為這意味著放棄反向傳播……我們確實不需要所有數據都有標籤。」

簡而言之,沒有目標函數就無法進行反向傳播。如果你無法評估預測值和標籤(實際或訓練數據)的value 值,你就沒有目標函數。因此,為了實現「無監督學習」,你需要拋棄計算梯度的能力。

TO 編按:為什麼 Hinton 覺得「不需要所有數據都標籤」,用意何在?

你可以這樣想像,人類每天無時無刻不在接受訊息,遇到的「題目」各式各樣;但是我們的「答案」很少,我們可能看過各種各樣的人,各種各樣的動物。但實際上,可能一生中,別人給你指出「這是貓」的次數屈指可數。

可僅僅是那一兩次的提示(相當於一兩個標籤),你就能在一生中記得這些概念。甚至別人從不曾告訴這是貓,你也知道這應該不是狗或者其他你知道的動物。這種「沒有答案」的學習被稱為「無監督學習」,但目前機器學習在「無監督學習」方面進展很少。

但是,在我們把這一重要能力丟掉之前,先從更通用的角度看一下目標函數的目的。目標函數是對自動化內部模型預測所處環境的準確率的評估。任何智能自動化的目的都是構建準確率高的內部模型。但是,模型和它一直或持續所處的環境之間不需要任何評估。也就是說,自動化不需要執行反向傳播進行學習。自動化可以通過其他途徑改善其內部模型。

無監督學習

其他途徑就是「想像力」(imagination)或「做夢」(dreaming),不用立刻把預測與事實對比然後更新參數。今天最接近的體現就是生成對抗網絡(GAN)。GAN 包括兩個網絡:生成器和鑑別器。你可以把鑑別器當作使用目標函數的神經網絡,即它可以用現實驗證內部生成器網絡。生成器自動化創造近似現實。GAN 網絡使用反向傳播,執行無監督學習。因此,無監督學習可能不需要目標函數,但它或許仍然需要反向傳播。

看待無監督學習的另一種方式是,某種程度上,它是一種元學習。系統不需要監督訓練數據的一種可能原因是學習算法已經開發出自己的最佳內部模型。也就是說,仍然存在一定程度的監督,只不過在學習算法中更加隱晦。學習算法如何具備這種能力尚不可知。

總之,現在判斷我們是否可以拋棄反向傳播還為時尚早。我們當然可以使用沒有那麼嚴格的反向傳播(即合成梯度或其他啟發)。但是,逐步學習(或稱爬山法)仍然是必要的。我當然對找到駁斥逐步學習或爬山法的研究很感興趣。這實際上可以類比為宇宙的運行,具體來說就是熱力學的第二定律。再具體點就是熵一直在提高。訊息引擎將降低熵,以交換所處環境中的熵提高。因此,沒有一種方法可以完全避免梯度,除非存在「永動信息機器」(perpetual motion information machine)。

 Geoffrey Hinton 提出新概念「capsule

Hinton 與他的 Google 同事 Sara Sabour 和Nicholas Frosst 共同完成的論文《Dynamic Routing Between Capsules》已被NIPS 2017 大會接收,他們在研究中提出的 capsule 概念正是 Hinton 對於未來人工智能形態的探索。不可否認的是,在無監督學習的道路上,我們還有很長的一段路要走。

反向傳播的推導過程

神經網絡在權重的變化和目標函數的變化之間不再是線性關係。在特定層級的任何擾動(perturbation)將會在連續層級中進一步變化。那麼,我們該如何計算神經網絡中所有權重的梯度,從而進一步使用梯度下降法(最速下降法)呢?這也就是我們為什麼要使用反向傳播算法的地方。反向傳播算法的核心即對整個網絡所有可能的路徑重複使用鍊式法則。反向傳播算法真正強大的地方在於它是動態規劃的,我們可以重複使用中間結果計算梯度下降。因為它是通過神經網絡由後向前傳播誤差,並優化每一個神經節點之間的權重,所以這種算法就稱之為反向傳播算法(backpropagation algorithm)。實際上神經網絡反向傳播與前向傳播有緊密的聯繫,只不過反向傳播算法不是通過神經網絡由前向後傳播數據,而是由後向前傳播誤差。

大多數反向傳播算法的解釋都是直接從一般理論推導開始,但是如果從手動計算梯度開始,那麼就能很自然地推導出反向傳播算法本身。雖然下面的推導部分較長,但我們認為從數學基本理論開始是最好的方式來了解反向傳播算法。

下文由單路徑神經網絡開始,進而推廣到存在多層和多個神經元的神經網絡,最後再推導出一般的反向傳播算法。

反向傳播算法的基本原則

我們訓練神經網絡的最終目標是尋找損失函數關於每一個權重的梯度:

當我們計算出偏導數時就能進一步使用隨機梯度下降或小批量梯度下降更新每一層神經網絡的權重:

通常在一般神經網絡的每一個單元會存在以下幾種情況:

1. 該神經元有且僅有一個輸入和一個輸出
2. 該神經元有多個輸入
3. 該神經元有多個輸出
4. 該神經元有多個輸入和輸出

因為多輸入與多輸出是獨立的,我們能自由組合輸入與輸出神經元的數量。

這一部分將從相對簡單的結構到多層神經網絡,並在這個過程中推導出用於反向傳播的一般規則。最後,我們會將這些規則組合成可用於任意神經網絡的反向傳播算法。

單一輸入與單一輸出的神經元

在上面的神經網絡中,每一個變量都能夠準確地寫出來。

注意,上面方程式中x 是輸入,w 是權重,Sigamm 是神經元的激活函數。s 是前一個神經元通過權重傳遞到後一個神經元的數據,它等於前一個神經元的輸出乘以兩個神經元的連接強度,即權重w。z 是神經元輸入經過激活函數 Sigamma 計算後得到的輸出。

對於這樣一個簡單的案例來說,我們很容易就找到其偏導數項。現在我們將求導後的一部分標以藍色,然後看看我們是否能推導出可以在迭代算法中使用的模式。首先我們需要了解k層到o層之間的權重(w_k→o),也可以理解成這兩個神經元之間的連接強度。如果我們的輸出是線性單元,那麼():

注意,上面方程式中 x 是輸入,w 是權重,Sigamm 是神經元的激活函數。s 是前一個神經元通過權重傳遞到後一個神經元的數據,它等於前一個神經元的輸出乘以兩個神經元的連接強度,即權重w。z 是神經元輸入經過激活函數 Sigamma 計算後得到的輸出。

對於這樣一個簡單的案例來說,我們很容易就找到其偏導數項。現在我們將求導後的一部分標以藍色,然後看看我們是否能推導出可以在迭代算法中使用的模式。首先我們需要了解k層到o層之間的權重(w_k→o),也可以理解成這兩個神經元之間的連接強度。如果我們的輸出是線性單元,那麼():

E 就相當於系統做出的判斷與正確標註之間的損失。E 對權重 w 求偏導並最小化,即在損失函數E 最小的情況下求得權重 w,上述方程式表明需要求得 k 神經元到 o 神經元之間最優權重w。

那麼從 j 到 k 和從 i 到 j 的權重更新都是相同的步驟了。

上面的推導表達式展示了損失函數對第 j 層和第 k 層之間權重的偏導數,而下面的推導表達式則展示了損失函數對第 i 層和第 j 層之間權重的偏導數:

現在也許我們能總結一個可以使用反向傳播算法的權重更新模式。當我們計算神經網絡前面層級的權重更新時,我們重複使用了多個數值。具體來說,我們觀察到的就是神經網絡損失函數的偏導數,上面三個推導表達式可以總結為:

在上述方程式中由後一個神經元向前推導,最後一層的權重更新梯度最簡單,而前面層級的更新梯度則需要向前推導,這一推導的過程或者方式就是根據求導的鍊式法則。

多個輸入

可以思考一下稍微複雜一點的神經網絡,即一個神經元將有多個輸入:

如果一個神經元有多個輸入端怎麼辦,從 j 到 k 的權重更新規則會不會影響從 i 到 k 的權重更新規則?為了弄清這個問題,我們可以對 i 到 k 的權重手動求導。

我們可以從上面看到從 i 到 k 的權重更新是不依賴於從 j 到 k 權重的導數的,因此第一條準測就是損失函數對權重的導數不依賴於同層級神經網絡上的其他任何權重的導數,所以神經網絡同層級的權重可以獨立地更新。同時該法則還存在更新的自然順序,這種自然順序僅僅只依賴於神經網絡同一層級其他權重的值,這種排序是反向傳播算法的計算基礎。

多個輸出

接下來我們可以思考下有多個輸出的隱藏層神經元。

在前面的基礎上,唯一和前面權重更新有差別的是輸入神經元與 i 神經元之間的求導法則。神經元多輸出端的情況就是其有多個直接後繼神經元,所以我們必須沿著以神經元i 為根結點的所有路徑來計算誤差的總和。接下來我們可以詳細地寫出損失函數對權重求導而更新的過程,並且我們定義 σ(⋅) 就是神經元i 的激活函數:

現在有兩點需要注意,首先就是第二條推導準則:具有多個輸出的神經元權重更新依賴於所有可能路徑上的導數。

但是更重要地是我們需要看到反向傳播算法和正向傳播算法之間的聯繫。在反向傳播的過程中,我們會計算神經網絡輸出端的誤差,我們會把這些誤差反向傳播並且沿著每條路徑加權。當我們傳播到了一個神經元,可以將經權重反向傳播過來的誤差乘以神經元的導數,然後就可以同樣的方式反向傳播誤差,一直追溯到輸入端。反向傳播非常類似於正向傳播,是一種遞歸算法。接下來會介紹誤差信號,然後再改寫我們的表達式。

 

誤差信號

手動求出所有權重的更新是十分棘手的,特別是在有上百神經元和多層神經網絡的情況下。但是我們在最後的幾部分看到一種模式,即誤差是沿著神經網絡向前傳播的。因此我們可以定義誤差信號為每一個神經元的累積誤差,即使用

我們定義神經元j 的迭代誤差信號為:

其衡量了隨著數據輸入到神經元j,神經網絡的誤差改變了多少。使用誤差信號有很好的性能,也就是我們可以用更緊湊的形式來表達反向傳播。為了理解這之間的變化,我們可以展開方程式。

如果神經元j是一個輸出節點,這也就意味著(如果神經元j的激活函數是f_j(⋅)),所以就可以簡單地寫為,因此就可以求出

另外,如果神經元j是一個隱藏神經元,那麼另一層的神經元k屬於j的輸出神經元。我們可以使用鍊式求導法則進一步解釋

注意最後的偏導項∂y^ /∂zj,多神經元取決於z_j,確切的說是所有k∈outs(j)的神經元。我們在多個輸出端的部分中看到,導致具有多個輸出神經元的權重確實對這些輸出神經元有影響。但對於每個神經元k,我們有,每個s_k不取決於任何其它同層的結點。因此,我們可以再次使用鍊式規則並對k∈out(j)的輸出結點求和:

將這個方程式帶入,我們就能得到:

基於我們對誤差信號的定義,我們已經知道,所以如果我們(y^−y)放入求和中,我們就能得到以下遞歸關係:

現在我們能用緊湊的方程式表徵反向傳播誤差。

反向傳播算法的普遍形式

先回憶下第一部分的簡單神經網絡:

我們能使用δ_i 的定義導出整個神經網絡的所有誤差信號:

在這一個神經網絡中,準確的權重更新模式是以下方程式:

如果使用誤差信號代替,我們可以得到以下形式:

還有另外一個複雜一點的神經網絡,即有多個輸出神經元:

同樣我們能得出所有的誤差信號:

然後我們再一次將誤差代入到權重更新方程式中:

現在也許我們就可以推導出權重更新的簡單通用形式:

最後我們需要考慮的是我們要不要使用小批量梯度下降。因為我們將每一個y_i 都看成獨立的,所以我們可以將所有訓練樣本求和來計算完整的權重更新。對每一個獨立的訓練樣本y_i,我們加上一個上標表示(y_i)表示隨每一個訓練樣本而改變的參數值,因此通用的更新形式可以寫為:

最後,反向傳播算法更新權重的一般形式可以表示為以下幾個步驟:

1.將訓練樣本沿整個網絡前向傳播,並且記錄每一個

2.對於所有的神經元 j 和每一個訓練樣本 y_i 計算誤差信號,如果j是輸出神經元,那麼有:

如果 j 不是輸出神經元,那麼有:

3. 通過以下更新法則更新權重:

上面是一般反向傳播算法的推導和建立過程,我們從最簡單與直覺的概念一步步完善並推導出最後的更新規則。雖然反向傳播算法有著很多的侷限性與不足,並且也有學者提出如解耦方法等理論解決反向傳播算法的不足,但反向傳播算法仍然是目前神經網絡中最主流與強大的最優化方法。最後我們同樣期待 Hinton 等人所提出的 capsule能對反向傳播算法有本質上的提升!

TO 編按:Hinton 基本上就是對目前這種結果不是很滿意,因此提出了 Capsule 的概念。Hinton 注意到一個目前大多數神經解剖學研究都支持的理論——大部分哺乳類,特別是靈長類大腦皮層中大量存在稱為 Cortical minicolumn的柱狀結構(皮層微柱),其內部含有上百個神經元,並存在內部分層。這意味著人腦中的一層並不是類似現在 NN 的一層,而是有更深一層的複雜內部結構。

Hinton 提出 Capsule 的核心觀念就透過 coincidence filtering (巧合篩分)來在層與層之間找到最好的(處理)路徑,最好的處理路徑就等同於(正確)的處理圖像、資訊了。Hinton 並不認為一定要「完美」處理路徑才是最好的,有點類似於「人類認得出貓」不是完美的每一個都意識到是貓,能夠(正確)處理圖像才是重點。

(本文經 機器之心  授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈被Geoffrey Hinton拋棄,反向傳播為何飽受質疑?(附BP推導) 〉。)

延伸閱讀

【遊戲工程師要失業了?】人工智慧只「看」2 分鐘超級瑪莉歐,就能完美複製它
終結阿茲海默症!人工智慧提早 10 年「認出」失智症患者,準確率高達 84%
2017 年最完整自學資源懶人包:Python、Google Analytics 到人工智慧想學什麼全都包
IBM、Google、Amazon 人工智慧技術遭質疑!AI 和機器學習、數據分析差別究竟在哪?