《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?

哈工大SCIR發表於2016-12-22

出處: Michael Nielsen的《Neural Network and Deep Learning》,本節譯者:朱小虎 、張廣宇。


1、使用神經網路識別手寫數字

2、反向傳播演算法是如何工作的

3、改進神經網路的學習方法

4、神經網路可以計算任何函式的視覺化證明

5、為什麼深度神經網路的訓練是困難的

  • 梯度消失問題
  • 什麼導致了梯度消失問題?神經網路中的梯度不穩定性
  • 在更加複雜網路中的不穩定性梯度
  • 其他深度學習的障礙

6、深度學習


假設你是一名工程師,接到一項從頭開始設計計算機的任務。某天,你在工作室工作,設計邏輯電路,構建 AND 門,OR 門等等時,老闆帶著壞訊息進來:客戶剛剛新增了一個奇特的設計需求:整個計算機的線路的深度必須只有兩層:


《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?

你驚呆了,跟老闆說道:“這貨瘋掉了吧!”

老闆說:“我也認為他們瘋了,但是客戶的需求比天大,我們要滿足它。”

實際上,在某種程度上看,他們的客戶並沒有太瘋狂。假設你可以使用某種特殊的邏輯閘,它讓你對任意多的輸入做 AND 運算。同樣也能使用多輸入的 NAND 門——可以對多個輸入做 AND 運算並取負的門。有了這類特殊的門,構建出來的兩層深度的電路可以計算任何函式。

但是僅僅因為某件事是理論上可能的,並不代表這是一個好的想法。在實踐中,在解決線路設計問題(或者大多數的其他演算法問題)時,我們通常考慮如何解決子問題,然後逐步地整合這些子問題的解。換句話說,我們透過多層的抽象來獲得最終的解答。

例如,假設我們來設計一個邏輯線路來做兩個數的乘法。我們希望在已經有了計算兩個數加法的子線路基礎上建立這個邏輯線路。計算兩個數和的子線路也是構建在用於兩個位元相加的子子線路上的。粗略地講我們的線路看起來像這個樣子:

《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?

最終的線路包含至少三層線路的基本部分。實際上,這個線路很可能會超過三層,因為我們可以將子任務分解成比上述更小的單元。但是基本思想就是這樣。

因此深度線路讓這樣的設計過程變得更加簡單。但是這對於設計本身幫助並不大。其實,數學證明對於某些函式設計的非常淺的線路可能需要指數級的線路單元來計算。例如,在1980年代早期的一系列著名的論文1已經給出了計算位元的集合的奇偶性透過淺的線路來計算需要指數級的門。另一當面,如果你使用更深的線路,那麼可以使用規模很小的線路來計算奇偶性:僅僅需要計算位元的對的奇偶性,然後使用這些結果來計算位元對的對的奇偶性,以此類推,構建出總共的奇偶性。深度線路這樣就能從本質上獲得超過淺線路的更強的能力。

到現在為止,本書將神經網路看作是那個瘋狂的客戶。幾乎我們遇到的所有的網路就只包括一層隱藏神經元(另外還有輸入輸出層):

《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?

這些簡單的網路已經非常有用了:在前面的章節中,我們使用這樣的網路可以進行準確率高達 98% 的手寫數字的識別!而且,憑直覺地看,我們期望擁有更多隱藏層的神經網路能夠變的更加強大

《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?

這樣的網路可以使用中間層構建出多層的抽象,正如我們在布林線路中做的那樣。例如,如果我們在進行視覺模式識別,那麼在第一層的神經元可能學會識別邊,在第二層的神經元可以在邊的基礎上學會識別出更加複雜的形狀,例如三角形或者矩形。第三層將能夠識別更加複雜的形狀。依此類推。這些多層的抽象看起來能夠賦予深度網路一種學習解決複雜模式識別問題的能力。然後,正如線路的示例中看到的那樣,存在著理論上的研究結果告訴我們深度網路在本質上比淺層網路更加強大2。

那我們如何訓練這樣的深度神經網路呢?在本章中,我們嘗試使用我們猶如苦力般的學習演算法——基於反向傳播隨機梯度下降——來訓練深度網路。但是這會產生問題,因為我們的深度神經網路並不能比淺層網路效能好太多。

這個失敗的結果好像與上面的討論相悖。這就能讓我們退縮麼,不,我們要深入進去試著理解使得深度網路訓練困難的原因。仔細研究一下,就會發現,在深度網路中,不同的層學習的速度差異很大。尤其是,在網路中後面的層學習的情況很好的時候,先前的層次常常會在訓練時停滯不變,基本上學不到東西。這種停滯並不是因為運氣不好。而是,有著更加根本的原因是的學習的速度下降了,這些原因和基於梯度的學習技術相關。

當我們更加深入地理解這個問題時,發現相反的情形同樣會出現:先前的層可能學習的比較好,但是後面的層卻停滯不變。實際上,我們發現在深度神經網路中使用基於梯度下降的學習方法本身存在著內在不穩定性。這種不穩定性使得先前或者後面的層的學習過程阻滯。

這個的確是壞訊息。但是真正理解了這些難點後,我們就能夠獲得高效訓練深度網路的更深洞察力。而且這些發現也是下一章的準備知識,我們到時會介紹如何使用深度學習解決影像識別問題。

1. 其歷史有點複雜,所以我不會給出詳細的參 考。看看 Johan Håstad 的 2012 論文  On the correlation of parity and small-depth circuits (http://eccc.hpi-web.de/report/2012/137/ ) 來了解一些早期的歷史和參考。


2. 對某些問題和網路結構,Razvan Pascanu,Guido Montúfar, and Yoshua Bengio 在2014年的這篇文章 On the number of response regions of deep feed forward networks with piece-wise linear activations (http://arxiv.org/pdf/1312.6098.pdf)  給出了證明。更加詳細的討論在 Yoshua Bengio 2009 年的著作Learning deep architectures for AI (http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf) 的第二部分。


本文來源於哈工大SCIR

原文連結點選即可跳轉

《神經網路和深度學習》系列文章三十八:深度神經網路為何很難訓練?

相關文章