1
| 本文作者: AI研習社 | 2017-08-04 15:39 |
雷鋒網按:本文原作者 YJango,本文原載于其知乎專欄——超智能體。雷鋒網已獲得原作者授權。
為何深層學習
深層學習開啟了人工智能的新時代。不論任何行業都害怕錯過這一時代浪潮,因而大批資金和人才爭相涌入。但深層學習卻以 “黑箱” 而聞名,不僅調參難,訓練難,“新型” 網絡結構的論文又如雨后春筍般地涌現,使得對所有結構的掌握變成了不現實。我們缺少一個對深層學習合理的認識。
神經網絡并不缺少新結構,但缺少一個該領域的
很多人在做神經網絡的實驗時會發現調節某些方式和結構會產生意想不到的結果。但就我個人而言,這些發現并不會讓我感到滿足。我更關心這些新發現到底告訴我們了什么,造成這些現象的背后原因是什么。我會更想要將新的網絡結構歸納到已有的體系當中。這也是我更多思考 “為何深層學習有效” 的原因。下面便是目前 YJango 關于這方面的見解。
深層神經網絡相比一般的統計學習擁有從數學的嚴謹中不會得出的關于物理世界的先驗知識(非貝葉斯先驗)。該內容也在 Bengio 大神的論文和演講中多次強調。大神也在 Bay Area Deep Learning School 2016 的 Founda’ons and Challenges of Deep Learning pdf(這里也有視頻,需翻墻)中提到的 distributed representations 和 compositionality 兩點就是神經網絡和深層神經網絡高效的原因(若有時間,強烈建議看完演講再看該文)。雖然與大神的思考起點可能不同,但結論完全一致(看到 Bengio 大神的視頻時特別興奮)。下面就是結合例子分析:
1. 為什么神經網絡高效
2. 學習的本質是什么
3. 為什么深層神經網絡比淺層神經網絡更高效
4. 神經網絡在什么問題上不具備優勢
其他推薦讀物
Bengio Y. Learning deep architectures for AI[J]. Foundations and trends? in Machine Learning, 2009, 2(1): 1-127.
Brahma P P, Wu D, She Y. Why Deep Learning Works: A Manifold Disentanglement Perspective[J]. 2015.
Lin H W, Tegmark M. Why does deep and cheap learning work so well?[J]. arXiv preprint arXiv:1608.08225, 2016.
Bengio Y, Courville A, Vincent P. Representation learning: A review and new perspectives[J]. IEEE transactions on pattern analysis and machine intelligence, 2013, 35(8): 1798-1828.
Deep Learning textbook by Ian Goodfellow and Yoshua Bengio and Aaron Courville
YJango 的整個思考流程都圍繞減熵二字進行。之前在《熵與生命》和《生物學習》中討論過,生物要做的是降低環境的熵,將不確定狀態變為確定狀態。通常機器學習是優化損失函數,并用概率來衡量模型優劣。然而概率正是由于無法確定狀態才不得不用的衡量手段。生物真正想要的是沒有絲毫不確定性。

深層神經網絡在自然問題上更具優勢,因為它和生物學習一樣,是找回使熵增加的 “物理關系”(知識,并非完全一樣),將變體()轉化回因素(
)附帶物理關系的形式,從源頭消除熵(假設每個因素只有兩種可能狀態)。這樣所有狀態間的關系可以被確定,要么肯定發生,要么絕不發生,也就無需用概率來衡量。因此下面定義的學習目標并非單純降低損失函數,而從確定關系的角度考慮。一個完美訓練好的模型就是兩個狀態空間內所有可能取值間的關系都被確定的模型。
學習目標:是確定(determine)兩個狀態空間內所有可能取值之間的關系,使得熵盡可能最低。
注:對熵不了解的朋友可以簡單記住,事件的狀態越確定,熵越小。如絕不發生(概率 0)或肯定發生(概率為 1)的事件熵小。而 50% 可能性事件的熵反而大。
為舉例說明,下面就一起考慮用神經網絡學習以下兩個集合的不同關聯(OR gate 和 XOR gate)。看看隨著網絡結構和關聯的改變,會產生什么不同情況。尤其是最后網絡變深時與淺層神經網絡的區別。
注:選擇這種 XOR 這種簡單關聯的初衷是輸入和輸出空間狀態的個數有限,易于分析變體個數和熵增的關系。
注:用 “變體(variation)” 是指同一類事物的不同形態,比如 10 張狗的圖片,雖然外貌各異,但都是狗。
問題描述:集合 A 有 4 個狀態,集合 B 有 2 個狀態。0 和 1 只是用于表示不同狀態的符號,也可以用 0,1,2,3 表示。狀態也并不一定表示數字,可以表示任何物理意義。
隨機變量X:可能取值是
隨機變量 Y:可能取值是
注:隨機變量(大寫 X)是將事件投射到實數的函數。用對應的實數表示事件。而小寫字母 x 表示對應該實數的事件發生了,是一個具體實例。
網絡結構:暫且不規定要學習的關聯是 OR 還是 XOR,先建立一個沒有隱藏層,僅有一個輸入節點,一個輸出節點的神經網絡。
表達式:,
表示 sigmoid 函數。(只要是非線性即可,relu 是目前的主流)
說明:下圖右側中的虛線表示的既不是神經網絡的鏈接,也不是函數中的映射,而是兩個空間中,所有可能值之間的關系(relation)。學習的目的是確定這些狀態的關系。比如當輸入 00 時,模型要嘗試告訴我們 00 到 1 的概率為 0,00 到 0 的概率為 1,這樣熵才會為零。
關系圖:左側是網絡結構,右側是狀態關系圖。輸入和輸出空間之間共有 8 個關系 (非箭頭虛線表示關系)。除非這 8 個關系對模型來說都是相同的,否則用表示
時的熵
就會增加。(
無法照顧到 8 個關系,若完美擬合一個關系,其余的關系就不準確)
注:這里 YJango 是用表示
的縮寫。

數據量:極端假設,若用查找表來表示關系:需要用 8 個不同的數據來記住想要擬合的
。
特征:空間 A 的 4 個狀態是由兩個 0 或 1 的狀態共同組成。我們可以觀察出來(計算機并不能),我們利用這種知識把 A 中的狀態分解開(disentangle)。分解成兩個獨立的子隨機變量
和
。也就是用二維向量表示輸入。
網絡結構:由于分成了二維特征,這次網絡結構的輸入需改成兩個節點。下圖中的上半部分是,利用人工知識將隨機變量
無損轉變為
和
的共同表達(representation)。這時
和
一起形成網絡輸入。
注:k() 旁邊的黑線(實線表示確定關系)并非是真正的神經網絡結構,只是方便理解,可以簡單想象成神經網絡轉變的。
表達式:
注:方便起見,寫成了矩陣的表達形式
,其中
是標量,而
,
關系圖:由于固定,只考慮下半部分的關系。因為這時用了兩條線
和
來共同對應關系。原本需要擬合的 8 個關系,現在變成了 4 個(兩個節點平攤)。同樣,除非右圖的 4 條紅色關系線對
來說相同,并且 4 條綠色關系線對
來說也相同,否則用
和
表示時,一定會造成熵
增加。
注:下圖中左側是網絡結構圖。右側關系圖中,接觸的圓圈表示同一個節點的不同變體。分開的、并標注為不同顏色的圓圈表示不同節點,左右兩圖連線的顏色相互對應,如紅色的需要表示右側的 4 條紅色關系線。

關聯 1:下面和 YJango 確定想要學習的關聯(函數)。如果想學習的關聯是只取或者
的值,那么該結構可以輕松用兩條線
和
來表達這 4 個關系 (讓其中一條線的權重為 0,另一條為 1)。
關聯 2 :如果想學習的關聯是或門,真值表和實際訓練完的預測值對照如下。很接近,但有誤差。不過若要是分類的話,可以找到 0.5 這個超平面來分割。大于 0.5 的就是 1,小于 0.5 的就是 0,可以完美分開。

注: 第一列是輸入,第二列是真實想要學習的輸出,第三列是訓練后的網絡預測值。
關聯 3 :如果想學習的關聯是異或門(XOR),真值表和實際訓練完的預測值對照如下。由于 4 條關系線無法用單個表達,該網絡結構連 XOR 關聯的分類都無法分開。

數據量:學習這種關聯至少需 4 個不同的來擬合
。其中每個數據可以用于確定 2 條關系線。
網絡結構 1:現在直接把和
作為輸入(用
,
表示),不考慮
。并且在網絡結構中加入一個擁有 2 個節點(node)隱藏層(用
和
表示)。
表達式:
關系圖 1:乍一看感覺關系更難確定了。原來還是只有 8 條關系線,現在又多了 16 條。但實際上所需要的數據量絲毫沒有改變。因為以下兩條先驗知識的成立。
注:下圖最右側是表示:當一個樣本進入網絡后,能對學習哪些關系線起到作用。

1. 并行:和
的學習完全是獨立并行。這就是神經網絡的兩條固有先驗知識中的:并行:網絡可以同時確定
和
的關聯。也是 Bengio 大神所指的 distributed representation。
注:有效的前提是所要學習的狀態空間的關聯是可以被拆分成并行的因素(factor)。
注:就沒有并行一說,因為
是一個節點擁有兩個變體,而不是兩個獨立的因素。但是也可以把
拆開表示為 one-hot-vector。這就是為什么分類時并非用一維向量表示狀態。更驗證了 YJango 在機器學習中對學習定義:學習是將變體拆成因素附帶關系的過程。
迭代:第二個先驗知識是:在學習的同時,
和
也可以被學習。這就是神經網絡的兩條固有先驗知識中的:迭代:網絡可以在確定上一級的同時確定下一級的所有內容。也是 Bengio 大神所指的 compositionality。
注:有效的前提是所要學習的空間的關聯是由上一級迭代形成的。所幸的是,我們所生活的世界幾乎都符合這個前提(有特殊反例)。
關聯:如果想學習的關聯是異或門(XOR),真值表和實際訓練完的預測值對照如下。
和
:期初若用兩條網絡連接表示
的 16 個關系可能,那么熵會很高。但用兩條線表示
的 8 個關系,模型的熵可以降到很低。下圖中
的輸出值對應紅色數字。
對應輸出值是由藍色數字表達。
: 這時再看
的關系,完全就是線性的。光靠觀察就能得出
的一個表達。

數據量:如關系圖 1 中最右側圖所示,一個輸入 [0,0] 會被關聯到 0。而這個數據可用于學習 2+4 個關系。也就是說網絡變深并不需要更多數據。
模型的熵與用一條
所要擬合的關系數量有關。也就是說,
變體(variation)越少,擬合難度越低,熵越低。
網絡結構 2:既然這樣,有 4 個變體,這次把節點增加到 4。
關系圖 2:與網絡結構 1 不同,增加到 4 個節點后,每個節點都可以完全沒有變體,只取一個值。想法很合理,但實際訓練時,模型不按照該方式工作。
注:太多顏色容易眼花。這里不再用顏色標注不同線之間的對應關系,但對應關系依然存在。

問題:因為會出現右圖的情況:只有兩個節點在工作(線的粗細表示權重大小)。a和c的節點在濫竽充數。這就跟只有兩個節點時沒有太大別。原因是神經網絡的權重的初始化是隨機的,數據的輸入順序也是隨機的。這些隨機性使得權重更新的方向無法確定
討論:網絡既然選擇這種方式來更新權重,是否一定程度上說明,用較少的節點就可以表示該關聯?并不是,原因在于日常生活中的關聯,我們無法獲得所有變體的數據。所得數據往往是很小的一部分。較少的節點可以表示這一小部分數據的關聯,但卻無法涵蓋所有變體情況。造成實際應用時效果不理想。
緩解:緩解的方式有 L2 正則化(L2 regularization):將每層權重矩陣的平方和作為懲罰。
表達式:,
是懲罰的強弱,可以調節。除以 2 是為了求導方便(與后邊的平方抵消)。
意義:當同一層的權重有個別值過高時,平方和就會增加。而模型在訓練中會降低該懲罰。產生的作用是使所有權重平攤任務,讓都有值。以這樣的方式來使每個節點都工作,從而消除變體,可以緩解過擬合(overfitting)。
例如:
具有一個隱藏層的神經網絡可以模擬任何函數,最糟的情況需要
個節點。
也叫 Universal Approximation Theorem。但最糟的情況是輸入空間有多少個變體,就需要多少個節點。k 表示獨立因素的變體個數,n 表示獨立因素的個數。上述的例子中最糟的情況需要個隱藏節點。而代價也是需要
個不同數據才可以完美擬合。
使用條件:淺層神經網絡可以分開幾乎所有自然界的關聯。因為神經網絡最初就是由于可移動的生物需要預測未來事件所進化而來的。所學習的關聯是過去狀態到未來狀態。如下圖,物理中的力也可以分離成兩個獨立的分力來研究。

但有一種不適用的情況:非函數。
實例:函數的定義是:每個輸入值對應唯一輸出值的對應關系。為什么這么定義函數?對應兩個以上的輸出值在數學上完全可以。但是在宏觀的世界發展中卻不常見。如下圖:
時間順流:不管從哪個起點開始,相同的一個狀態(不是維度)可以獨立發展到多個不同狀態(如氧原子可演變成氧分子和臭氧分子)。也就熱力學第二定律的自發性熵增:原始狀態通過物理關系,形成更多變體。

時間倒流:宏觀自然界中難以找到兩個以上的不同狀態共同收回到一個狀態的例子(如氧分子和臭氧分子無法合并成氧原子)。如果這個可以實現,熵就會自發性減少。也就不需要生物來消耗能量減熵。我們的房間會向整齊的狀態發展。但這違背熱力學第二定律。至少在我們的宏觀世界中,這種現象不常見。所以進化而來的神經網絡可以擬合任何函數,但在非函數上就沒有什么優勢。畢竟生物的預測是從過去狀態到未來狀態。也說明神經網絡并不違背無免費午餐定理。

實例:XOR 門的輸入空間和輸出空間若互換位置,則神經網絡擬合出來的可能性就非常低(并非絕對無法擬合)。
淺層神經網絡可以模擬任何函數,但數據量的代價是無法接受的。深層解決了這個問題。相比淺層神經網絡,深層神經網絡可以用更少的數據量來學到更好的擬合。上面的例子很特殊。因為,
,比較不出來。下面 YJango 就換一個例子,并比較深層神經網絡和淺層神經網絡的區別。
問題描述:空間有 8 個可能狀態,空間
有 2 個可能狀態:
網絡結構:
淺層神經網絡:8 節點隱藏層
深層神經網絡:2 節點隱藏層 + 3 節點隱藏層
深淺對比:
淺層神經網絡:假如說輸入 3 和輸出 0 對應。數據只能用于學習一個節點(如
)前后的兩條關系線。完美學習該關聯需要所有 8 個變體。然而當變體數為
時,我們不可能獲得
個不同變體的數據,也失去了學習的意義。畢竟我們是要預測沒見過的數據。所以與其說這是學習,不如說這是強行記憶。好比一個學生做了 100 冊練習題,做過的題會解,遇到新題仍然不會。他不是學會了做題,而是記住了怎么特定的題。

深層神經網絡:如果只觀察輸入和輸出,看起來同樣需要 8 個不同的訓練數據。但不同
之間有共用部分。比如說,在確定 3 和 0 關系時,也同時對所有共用
連接的其他變體進行確定。這樣就使得原本需要 8 個不同數據才能訓練好的關聯變成只需要 3,4 不同數據個就可以訓練好。(下圖關系線的粗細并非表示權重絕對值,而是共用度)

深層的前提:使用淺層神經網絡好比是用解
,需要 2 個不同數據。而深層神經網絡好比用
解
,只需要一個數據。無免費午餐定理告訴我們,優化算法在一個任務上優秀,就一定會在其他任務上有缺陷,深層同樣滿足該定理。如果用
去解實際上有
的
,或者去解實際為
的關聯時,搜索效果只會更差。所以深層的前提是:
空間中的元素可以由
迭代發展而來的。換句話說
中的所有變體,都有共用根源
(root)。
我們的物理世界:幸運的是,我們的物理世界幾乎都滿足迭代的先驗知識。
實例:比如進化。不同動物都是變體,雖然大家現在的狀態各異,但在過去都有共同的祖先。

實例:又如細胞分裂。八卦中的 8 個變體是由四象中 4 個變體的基礎上發展而來,而四象又是由太極的 2 個變體演變而來。很難不回想起 “無極生太極,太極生兩儀,兩儀生四象,四象生八卦”。(向中國古人致敬,雖然不知道他們的原意)

學習的過程是因素間的關系的拆分,關系的拆分是信息的回卷,信息的回卷是變體的消除,變體的消除是不確定性的縮減。
自然界兩個固有的先驗知識:
并行:新狀態是由若干舊狀態并行組合形成。
迭代:新狀態由已形成的狀態再次迭代形成。
為何深層學習:深層學習比淺層學習在解決結構問題上可用更少的數據學習到更好的關聯。
隨后的三篇文章正是用 tensorflow 實現上述討論的內容,以此作為零基礎實現深層學習的起點。
最后總結一下開篇的問題:
1. 為什么神經網絡高效:并行的先驗知識使得模型可用線性級數量的樣本學習指數級數量的變體
2. 學習的本質是什么:將變體拆分成因素和知識(Disentangle Factors of Variation)
稀疏表達:一個矩陣被拆分成了稀疏表達和字典。
one hot vector:將因素用不同維度分開,避免彼此糾纏。
3. 為什么深層神經網絡比淺層神經網絡更高效:迭代組成的先驗知識使得樣本可用于幫助訓練其他共用同樣底層結構的樣本。
4. 神經網絡在什么問題上不具備優勢:不滿足并行與迭代先驗的任務
非函數:需要想辦法將問題轉化。
非迭代(非結構):該層狀態不是由上層狀態構成的任務(如:很深的 CNN 因為有 max pooling,信息會逐漸丟失。而 residual network 再次使得迭代的先驗滿足)
到此我們討論完了神經網絡最基礎的,也是最重要的知識。在實際應用中仍會遇到很多問題(尤其是神經網絡對 noise 的克服更加巧妙)。隨后 YJango 會再和大家一起分析過深后會產生什么效果,并一步步引出設計神經網絡的本質。
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。