深層學習開啟了人工智能的新時代。不論任何行業(yè)都害怕錯過這一時代浪潮,因而大批資金和人才爭相涌入。但深層學習卻以“黑箱”而聞名,不僅調(diào)參難,訓練難,“新型”網(wǎng)絡結構的論文又如雨后春筍般地涌現(xiàn),使得對所有結構的掌握變成了不現(xiàn)實。我們?nèi)鄙僖粋€對深層學習合理的認識。
神經(jīng)網(wǎng)絡并不缺少新結構,但缺少一個該領域的
很多人在做神經(jīng)網(wǎng)絡的實驗時會發(fā)現(xiàn)調(diào)節(jié)某些方式和結構會產(chǎn)生意想不到的結果。但就我個人而言,這些發(fā)現(xiàn)并不會讓我感到滿足。我更關心這些新發(fā)現(xiàn)到底告訴我們了什么,造成這些現(xiàn)象的背后原因是什么。我會更想要將新的網(wǎng)絡結構歸納到已有的體系當中。這也是我更多思考“為何深層學習有效”的原因。下面便是目前YJango關于這方面的見解。
深層神經(jīng)網(wǎng)絡相比一般的統(tǒng)計學習擁有從數(shù)學的嚴謹中不會得出的關于物理世界的先驗知識(非貝葉斯先驗)。該內(nèi)容也在Bengio大神的論文和演講中多次強調(diào)。大神也在Bay Area Deep Learning School 2016的Founda’ons and Challenges of Deep Learning pdf(這里也有視頻,需翻墻)中提到的distributed representations和compositionality兩點就是神經(jīng)網(wǎng)絡和深層神經(jīng)網(wǎng)絡高效的原因(若有時間,強烈建議看完演講再看該文)。雖然與大神的思考起點可能不同,但結論完全一致(看到Bengio大神的視頻時特別興奮)。下面就是結合例子分析:
1. 為什么神經(jīng)網(wǎng)絡高效
2. 學習的本質是什么
3. 為什么深層神經(jīng)網(wǎng)絡比淺層神經(jīng)網(wǎng)絡更高效
4. 神經(jīng)網(wǎng)絡在什么問題上不具備優(yōu)勢
其他推薦讀物
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的整個思考流程都圍繞減熵二字進行。之前在《熵與生命》和《生物學習》中討論過,生物要做的是降低環(huán)境的熵,將不確定狀態(tài)變?yōu)榇_定狀態(tài)。通常機器學習是優(yōu)化損失函數(shù),并用概率來衡量模型優(yōu)劣。然而概率正是由于無法確定狀態(tài)才不得不用的衡量手段。生物真正想要的是沒有絲毫不確定性。
深層神經(jīng)網(wǎng)絡在自然問題上更具優(yōu)勢,因為它和生物學習一樣,是找回使熵增加的“物理關系”(知識,并非完全一樣),將變體()轉化回因素()附帶物理關系的形式,從源頭消除熵(假設每個因素只有兩種可能狀態(tài))。這樣所有狀態(tài)間的關系可以被確定,要么肯定發(fā)生,要么絕不發(fā)生,也就無需用概率來衡量。因此下面定義的學習目標并非單純降低損失函數(shù),而從確定關系的角度考慮。一個完美訓練好的模型就是兩個狀態(tài)空間內(nèi)所有可能取值間的關系都被確定的模型。
學習目標:是確定(determine)兩個狀態(tài)空間內(nèi)所有可能取值之間的關系,使得熵盡可能最低。
注:對熵不了解的朋友可以簡單記住,事件的狀態(tài)越確定,熵越小。如絕不發(fā)生(概率0)或肯定發(fā)生(概率為1)的事件熵小。而50%可能性事件的熵反而大。
為舉例說明,下面就一起考慮用神經(jīng)網(wǎng)絡學習以下兩個集合的不同關聯(lián)(OR gate和 XOR gate)??纯措S著網(wǎng)絡結構和關聯(lián)的改變,會產(chǎn)生什么不同情況。尤其是最后網(wǎng)絡變深時與淺層神經(jīng)網(wǎng)絡的區(qū)別。
注:選擇這種XOR這種簡單關聯(lián)的初衷是輸入和輸出空間狀態(tài)的個數(shù)有限,易于分析變體個數(shù)和熵增的關系。
注:用“變體(variation)”是指同一類事物的不同形態(tài),比如10張狗的圖片,雖然外貌各異,但都是狗。
問題描述:集合有4個狀態(tài),集合有2個狀態(tài)。0和1只是用于表示不同狀態(tài)的符號,也可以用0,1,2,3表示。狀態(tài)也并不一定表示數(shù)字,可以表示任何物理意義。
方式1:記憶
隨機變量:可能取值是
隨機變量:可能取值是
注:隨機變量(大寫)是將事件投射到實數(shù)的函數(shù)。用對應的實數(shù)表示事件。而小寫字母表示對應該實數(shù)的事件發(fā)生了,是一個具體實例。
網(wǎng)絡結構:暫且不規(guī)定要學習的關聯(lián)是OR還是XOR,先建立一個沒有隱藏層,僅有一個輸入節(jié)點,一個輸出節(jié)點的神經(jīng)網(wǎng)絡。
表達式:, 表示sigmoid函數(shù)。
說明:下圖右側中的虛線表示的既不是神經(jīng)網(wǎng)絡的鏈接,也不是函數(shù)中的映射,而是兩個空間中,所有可能值之間的關系(relation)。學習的目的是確定這些狀態(tài)的關系。比如當輸入00時,模型要嘗試告訴我們00到1的概率為0,00到0的概率為1,這樣熵才會為零。
關系圖:左側是網(wǎng)絡結構,右側是狀態(tài)關系圖。輸入和輸出空間之間共有8個關系(非箭頭虛線表示關系)。除非這8個關系對模型來說都是相同的,否則用表示時的熵就會增加。(無法照顧到8個關系,若完美擬合一個關系,其余的關系就不準確)
注:這里YJango是用表示的縮寫。
數(shù)據(jù)量:極端假設,若用查找表來表示關系:需要用8個不同的數(shù)據(jù)來記住想要擬合的。
方式2:手工特征
特征:空間的4個狀態(tài)是由兩個0或1的狀態(tài)共同組成。我們可以觀察出來(計算機并不能),我們利用這種知識把中的狀態(tài)分解開(disentangle)。分解成兩個獨立的子隨機變量和。也就是用二維向量表示輸入。
網(wǎng)絡結構:由于分成了二維特征,這次網(wǎng)絡結構的輸入需改成兩個節(jié)點。下圖中的上半部分是,利用人工知識將隨機變量無損轉變?yōu)楹偷墓餐磉_(representation)。這時和一起形成網(wǎng)絡輸入。
注:旁邊的黑線(實線表示確定關系)并非是真正的神經(jīng)網(wǎng)絡結構,只是方便理解,可以簡單想象成神經(jīng)網(wǎng)絡轉變的。
表達式:
注:方便起見,寫成了矩陣的表達形式,其中是標量,而=,=
關系圖:由于固定,只考慮下半部分的關系。因為這時用了兩條線和來共同對應關系。原本需要擬合的8個關系,現(xiàn)在變成了4個(兩個節(jié)點平攤)。同樣,除非右圖的4條紅色關系線對來說相同,并且4條綠色關系線對來說也相同,否則用和表示時,一定會造成熵增加。
注:下圖中左側是網(wǎng)絡結構圖。右側關系圖中,接觸的圓圈表示同一個節(jié)點的不同變體。分開的、并標注為不同顏色的圓圈表示不同節(jié)點,左右兩圖連線的顏色相互對應,如紅色的需要表示右側的4條紅色關系線。
關聯(lián)1:下面和YJango確定想要學習的關聯(lián)(函數(shù))。如果想學習的關聯(lián)是只取或者的值,那么該結構可以輕松用兩條線和來表達這4個關系(讓其中一條線的權重為0,另一條為1)。
關聯(lián)2:如果想學習的關聯(lián)是或門,真值表和實際訓練完的預測值對照如下。很接近,但有誤差。不過若要是分類的話,可以找到0.5這個超平面來分割。大于0.5的就是1,小于0.5的就是0,可以完美分開。
注:第一列是輸入,第二列是真實想要學習的輸出,第三列是訓練后的網(wǎng)絡預測值。
關聯(lián)3:如果想學習的關聯(lián)是異或門(XOR),真值表和實際訓練完的預測值對照如下。由于4條關系線無法用單個表達,該網(wǎng)絡結構連XOR關聯(lián)的分類都無法分開。
數(shù)據(jù)量:學習這種關聯(lián)至少需4個不同的來擬合。其中每個數(shù)據(jù)可以用于確定2條關系線。
方式3:加入隱藏層
網(wǎng)絡結構1:現(xiàn)在直接把和作為輸入(用表示),不考慮。并且在網(wǎng)絡結構中加入一個擁有2個節(jié)點(node)隱藏層(用表示)。
表達式:
關系圖1:乍一看感覺關系更難確定了。原來還是只有8條關系線,現(xiàn)在又多了16條。但實際上所需要的數(shù)據(jù)量絲毫沒有改變。因為以下兩條先驗知識的成立。
注:下圖最右側是表示:當一個樣本進入網(wǎng)絡后,能對學習哪些關系線起到作用。
1. 并行::和:的學習完全是獨立并行。這就是神經(jīng)網(wǎng)絡的兩條固有先驗知識中的:并行:網(wǎng)絡可以同時確定和的關聯(lián)。也是Bengio大神所指的distributed representation。
注:有效的前提是所要學習的狀態(tài)空間的關聯(lián)是可以被拆分成并行的因素(factor)。
注::就沒有并行一說,因為是一個節(jié)點擁有兩個變體,而不是兩個獨立的因素。但是也可以把拆開表示為one-hot-vector。這就是為什么分類時并非用一維向量表示狀態(tài)。更驗證了YJango在機器學習中對學習定義:學習是將變體拆成因素附帶關系的過程。
迭代:第二個先驗知識是:在學習:的同時,:和:也可以被學習。這就是神經(jīng)網(wǎng)絡的兩條固有先驗知識中的:迭代:網(wǎng)絡可以在確定上一級的同時確定下一級的所有內(nèi)容。也是Bengio大神所指的compositionality。
注:有效的前提是所要學習的空間的關聯(lián)是由上一級迭代形成的。所幸的是,我們所生活的世界幾乎都符合這個前提(有特殊反例)。
關聯(lián):如果想學習的關聯(lián)是異或門(XOR),真值表和實際訓練完的預測值對照如下。
和:期初若用兩條網(wǎng)絡連接表示的16個關系可能,那么熵會很高。但用兩條線表示的8個關系,模型的熵可以降到很低。下圖中的輸出值對應紅色數(shù)字。對應輸出值是由藍色數(shù)字表達。
:這時再看的關系,完全就是線性的。光靠觀察就能得出的一個表達。
數(shù)據(jù)量:如關系圖1中最右側圖所示,一個輸入會被關聯(lián)到。而這個數(shù)據(jù)可用于學習個關系。也就是說網(wǎng)絡變深并不需要更多數(shù)據(jù)。
模型的熵與用一條所要擬合的關系數(shù)量有關。也就是說,
變體(variation)越少,擬合難度越低,熵越低。
網(wǎng)絡結構2:既然這樣,有4個變體,這次把節(jié)點增加到4。
關系圖2:與網(wǎng)絡結構1不同,增加到4個節(jié)點后,每個節(jié)點都可以完全沒有變體,只取一個值。想法很合理,但實際訓練時,模型不按照該方式工作。
注:太多顏色容易眼花。這里不再用顏色標注不同線之間的對應關系,但對應關系依然存在。
問題:因為會出現(xiàn)右圖的情況:只有兩個節(jié)點在工作(線的粗細表示權重大小)。和的節(jié)點在濫竽充數(shù)。這就跟只有兩個節(jié)點時沒有太大別。原因是神經(jīng)網(wǎng)絡的權重的初始化是隨機的,數(shù)據(jù)的輸入順序也是隨機的。這些隨機性使得權重更新的方向無法確定。
討論:網(wǎng)絡既然選擇這種方式來更新權重,是否一定程度上說明,用較少的節(jié)點就可以表示該關聯(lián)?并不是,原因在于日常生活中的關聯(lián),我們無法獲得所有變體的數(shù)據(jù)。所得數(shù)據(jù)往往是很小的一部分。較少的節(jié)點可以表示這一小部分數(shù)據(jù)的關聯(lián),但卻無法涵蓋所有變體情況。造成實際應用時效果不理想。
緩解:緩解的方式有L2正則化(L2 regularization):將每層權重矩陣的平方和作為懲罰。
表達式:,是懲罰的強弱,可以調(diào)節(jié)。除以2是為了求導方便(與后邊的平方抵消)。
意義:當同一層的權重有個別值過高時,平方和就會增加。而模型在訓練中會降低該懲罰。產(chǎn)生的作用是使所有權重平攤任務,讓都有值。以這樣的方式來使每個節(jié)點都工作,從而消除變體,可以緩解過擬合(overfitting)。
例如:
具有一個隱藏層的神經(jīng)網(wǎng)絡可以模擬任何函數(shù),最糟的情況需要個節(jié)點。
也叫Universal Approximation Theorem。但最糟的情況是輸入空間有多少個變體,就需要多少個節(jié)點。表示獨立因素的變體個數(shù),表示獨立因素的個數(shù)。上述的例子中最糟的情況需要個隱藏節(jié)點。而代價也是需要個不同數(shù)據(jù)才可以完美擬合。
使用條件:淺層神經(jīng)網(wǎng)絡可以分開幾乎所有自然界的關聯(lián)。因為神經(jīng)網(wǎng)絡最初就是由于可移動的生物需要預測未來事件所進化而來的。所學習的關聯(lián)是過去狀態(tài)到未來狀態(tài)。如下圖,物理中的力也可以分離成兩個獨立的分力來研究。
但有一種不適用的情況:非函數(shù)。
實例:函數(shù)的定義是:每個輸入值對應唯一輸出值的對應關系。為什么這么定義函數(shù)?對應兩個以上的輸出值在數(shù)學上完全可以。但是在宏觀的世界發(fā)展中卻不常見。如下圖:
時間順流:不管從哪個起點開始,相同的一個狀態(tài)(不是維度)可以獨立發(fā)展到多個不同狀態(tài)(如氧原子可演變成氧分子和臭氧分子)。也就熱力學第二定律的自發(fā)性熵增:原始狀態(tài)通過物理關系,形成更多變體。
時間倒流:宏觀自然界中難以找到兩個以上的不同狀態(tài)共同收回到一個狀態(tài)的例子(如氧分子和臭氧分子無法合并成氧原子)。如果這個可以實現(xiàn),熵就會自發(fā)性減少。也就不需要生物來消耗能量減熵。我們的房間會向整齊的狀態(tài)發(fā)展。但這違背熱力學第二定律。至少在我們的宏觀世界中,這種現(xiàn)象不常見。所以進化而來的神經(jīng)網(wǎng)絡可以擬合任何函數(shù),但在非函數(shù)上就沒有什么優(yōu)勢。畢竟生物的預測是從過去狀態(tài)到未來狀態(tài)。也說明神經(jīng)網(wǎng)絡并不違背無免費午餐定理。
實例:XOR門的輸入空間和輸出空間若互換位置,則神經(jīng)網(wǎng)絡擬合出來的可能性就非常低(并非絕對無法擬合)。
4:繼續(xù)加深
淺層神經(jīng)網(wǎng)絡可以模擬任何函數(shù),但數(shù)據(jù)量的代價是無法接受的。深層解決了這個問題。相比淺層神經(jīng)網(wǎng)絡,深層神經(jīng)網(wǎng)絡可以用更少的數(shù)據(jù)量來學到更好的擬合。上面的例子很特殊。因為,,比較不出來。下面YJango就換一個例子,并比較深層神經(jīng)網(wǎng)絡和淺層神經(jīng)網(wǎng)絡的區(qū)別。
問題描述:空間有8個可能狀態(tài),空間有2個可能狀態(tài):
網(wǎng)絡結構:
淺層神經(jīng)網(wǎng)絡:8節(jié)點隱藏層
深層神經(jīng)網(wǎng)絡:2節(jié)點隱藏層 3節(jié)點隱藏層
深淺對比:
淺層神經(jīng)網(wǎng)絡:假如說輸入3和輸出0對應。數(shù)據(jù)只能用于學習一個節(jié)點(如)前后的兩條關系線。完美學習該關聯(lián)需要所有8個變體。然而當變體數(shù)為10^10時,我們不可能獲得10^10個不同變體的數(shù)據(jù),也失去了學習的意義。畢竟我們是要預測沒見過的數(shù)據(jù)。所以與其說這是學習,不如說這是強行記憶。好比一個學生做了100冊練習題,做過的題會解,遇到新題仍然不會。他不是學會了做題,而是記住了怎么特定的題。
深層神經(jīng)網(wǎng)絡:如果只觀察輸入和輸出,看起來同樣需要8個不同的訓練數(shù)據(jù)。但不同之間有共用部分。比如說,在確定3和0關系時,也同時對所有共用連接的其他變體進行確定。這樣就使得原本需要8個不同數(shù)據(jù)才能訓練好的關聯(lián)變成只需要3,4不同數(shù)據(jù)個就可以訓練好。(下圖關系線的粗細并非表示權重絕對值,而是共用度)
深層的前提:使用淺層神經(jīng)網(wǎng)絡好比是用解,需要2個不同數(shù)據(jù)。而深層神經(jīng)網(wǎng)絡好比用解,只需要一個數(shù)據(jù)。無免費午餐定理告訴我們,優(yōu)化算法在一個任務上優(yōu)秀,就一定會在其他任務上有缺陷,深層同樣滿足該定理。如果用去解實際上有的,或者去解實際為的關聯(lián)時,搜索效果只會更差。所以深層的前提是:空間中的元素可以由迭代發(fā)展而來的。換句話說中的所有變體,都有共用根源(root)。
我們的物理世界:幸運的是,我們的物理世界幾乎都滿足迭代的先驗知識。
實例:比如進化。不同動物都是變體,雖然大家現(xiàn)在的狀態(tài)各異,但在過去都有共同的祖先。
實例:又如細胞分裂。八卦中的8個變體是由四象中4個變體的基礎上發(fā)展而來,而四象又是由太極的2個變體演變而來。很難不回想起“無極生太極,太極生兩儀,兩儀生四象,四象生八卦”。(向中國古人致敬,雖然不知道他們的原意)
學習的過程是因素間的關系的拆分,關系的拆分是信息的回卷,信息的回卷是變體的消除,變體的消除是不確定性的縮減。
自然界兩個固有的先驗知識:
并行:新狀態(tài)是由若干舊狀態(tài)并行組合形成。
迭代:新狀態(tài)由已形成的狀態(tài)再次迭代形成。
為何深層學習:深層學習比淺層學習在解決結構問題上可用更少的數(shù)據(jù)學習到更好的關聯(lián)。
隨后的三篇文章正是用tensorflow實現(xiàn)上述討論的內(nèi)容,以此作為零基礎實現(xiàn)深層學習的起點。
* TensorFlow基本用法
* 代碼演示LV1
* 代碼演示LV2
最后總結一下開篇的問題:
1. 為什么神經(jīng)網(wǎng)絡高效:并行的先驗知識使得模型可用線性級數(shù)量的樣本學習指數(shù)級數(shù)量的變體
2. 學習的本質是什么:將變體拆分成因素和知識(Disentangle Factors of Variation)
* 稀疏表達:一個矩陣被拆分成了稀疏表達和字典。
* one hot vector:將因素用不同維度分開,避免彼此糾纏。
3. 為什么深層神經(jīng)網(wǎng)絡比淺層神經(jīng)網(wǎng)絡更高效:迭代組成的先驗知識使得樣本可用于幫助訓練其他共用同樣底層結構的樣本。
4. 神經(jīng)網(wǎng)絡在什么問題上不具備優(yōu)勢:不滿足并行與迭代先驗的任務
* 非函數(shù):需要想辦法將問題轉化。
* 非迭代:該層狀態(tài)不是由上層狀態(tài)構成的任務(如:很深的CNN因為有max pooling,信息會逐漸丟失。而residual network再次使得迭代的先驗滿足)
到此我們討論完了神經(jīng)網(wǎng)絡最基礎的,也是最重要的知識。在實際應用中仍會遇到很多問題(尤其是神經(jīng)網(wǎng)絡對noise的克服更加巧妙)。隨后YJango會再和大家一起分析過深后會產(chǎn)生什么效果,并一步步引出設計神經(jīng)網(wǎng)絡的本質。
-
人工智能
+關注
關注
1789文章
46670瀏覽量
237106 -
深度學習
+關注
關注
73文章
5466瀏覽量
120891
發(fā)布評論請先 登錄
相關推薦
評論