上一主題《TensorFlow從0到1》介紹人工神經(jīng)網(wǎng)絡(luò)的基本概念與其TensorFlow實(shí)現(xiàn),主要基于淺層網(wǎng)絡(luò)架構(gòu),即只包含一個(gè)隱藏層的全連接(FC,F(xiàn)ull Connected)網(wǎng)絡(luò)。
新主題《TensorFlow從1到2》將探索近5年來(lái)取得巨大成功的深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNN),它已成為機(jī)器學(xué)習(xí)中一個(gè)獨(dú)立的子領(lǐng)域——深度學(xué)習(xí)(Deep Learning)。
本篇將解釋“深度”的含義,并引出在縱向擴(kuò)展神經(jīng)網(wǎng)絡(luò)時(shí)遇到的障礙。
神秘黑盒
神經(jīng)網(wǎng)絡(luò)是一個(gè)“黑盒”(Black Box)。不僅外行人看它如此,即便是對(duì)親手構(gòu)建并訓(xùn)練它的工程師而言,亦是如此。
它的神秘,并不在于打不開、看不到,而是學(xué)習(xí)過(guò)程不可控,識(shí)別原理不可解釋。
當(dāng)預(yù)設(shè)了它的架構(gòu),完成初始化后,剩下的就是喂數(shù)據(jù)給它即可。至于網(wǎng)絡(luò)中數(shù)以萬(wàn)計(jì)的權(quán)重和偏置該如何調(diào)整,將止步何處,整個(gè)動(dòng)態(tài)優(yōu)化的過(guò)程人類完全插不上手。
最終網(wǎng)絡(luò)訓(xùn)練收斂,驚艷的輸出超越人類的判斷。若此時(shí)立即打開黑盒,打印出網(wǎng)絡(luò)中所有的參數(shù)和中間結(jié)果,會(huì)怎樣?呈現(xiàn)在我們眼前的無(wú)非是一堆調(diào)整的恰到好處的數(shù)字,可它們究竟意味著什么概念和邏輯,就像密碼一樣不得而知。
理解隱藏層
機(jī)器學(xué)習(xí)的邏輯形式看上去晦澀難懂,但是并沒(méi)有妨礙它成功的應(yīng)用在諸多領(lǐng)域。所幸研究者在關(guān)注如何進(jìn)一步提升網(wǎng)絡(luò)性能的同時(shí),并沒(méi)有忘記尚未“解碼”機(jī)器學(xué)習(xí)的秘密這件事,通過(guò)積極的嘗試已經(jīng)獲得了很多啟發(fā)性的理解。
神經(jīng)網(wǎng)絡(luò)從輸入“裸數(shù)據(jù)”開始,經(jīng)歷層層前饋(Feedforward),在輸出層獲得一個(gè)高度抽象、人為定義的類別概念,這中間的每一隱藏層其實(shí)都是不同層次的概念表示,離輸入層越近的抽象程度越低,反之離輸出層越近的抽象程度越高。
以一個(gè)識(shí)別汽車圖片的網(wǎng)絡(luò)為例,來(lái)模擬這種理解,如下圖所示。
網(wǎng)絡(luò)中有兩個(gè)隱藏層。第一個(gè)隱藏層,接收?qǐng)D像像素?cái)?shù)據(jù),輸出表示形狀的概念。第二個(gè)隱藏層,接收上一層輸出的幾何形狀信息,輸出表示汽車零部件的概念。最后到網(wǎng)絡(luò)的輸出層,進(jìn)行最終的判斷——是否可以分類為汽車。
這是對(duì)網(wǎng)絡(luò)隱藏層一種理想的解釋。實(shí)際情況中,不同的數(shù)據(jù)和分類目的,會(huì)訓(xùn)練出不同的網(wǎng)絡(luò),而每一層所對(duì)應(yīng)的意義也會(huì)出乎意料。基于這種啟發(fā),研究者已經(jīng)發(fā)展出逐層的可視化分析手段,來(lái)幫助人類理解機(jī)器學(xué)習(xí)的機(jī)理。
“深度”的定義
2006年,Hinton發(fā)表《基于深度置信網(wǎng)絡(luò)的快速學(xué)習(xí)方法》,深度神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)開始被重新關(guān)注。
從形式上,包含兩層或更多隱藏層的網(wǎng)絡(luò)即可稱為深度神經(jīng)網(wǎng)絡(luò)。
Goodfellow的《Deep Learning》從概念層次的角度詮釋了深度學(xué)習(xí):
“(本書所圍繞的)這個(gè)方案讓計(jì)算機(jī)從經(jīng)驗(yàn)中學(xué)習(xí),并根據(jù)層次化的概念體系來(lái)理解世界,其中每個(gè)概念通過(guò)與之關(guān)聯(lián)的更簡(jiǎn)單的概念來(lái)定義。
從經(jīng)驗(yàn)獲取知識(shí),可以避免由人類形式化的制定一切計(jì)算機(jī)所需要的知識(shí)。
運(yùn)用層次化的概念,計(jì)算機(jī)可以通過(guò)較簡(jiǎn)單的概念構(gòu)建復(fù)雜的概念。如果我們能繪制一個(gè)圖形來(lái)表示概念是如何建立在其他概念之上,那這個(gè)圖形將會(huì)很深,具有很多的層。基于這個(gè)原因,我們稱這種方法為AI深度學(xué)習(xí)?!?/strong>
理解機(jī)器視角下的層次化概念意義深遠(yuǎn),一旦可以充分解釋,人類就可以向機(jī)器請(qǐng)教,從而照亮思維的盲區(qū)。遭遇過(guò)Master(即AlphaGo)的柯潔,在正式對(duì)戰(zhàn)AlphaGo之前,就領(lǐng)悟到了這一點(diǎn):
“人類數(shù)千年的實(shí)戰(zhàn)演練進(jìn)化,計(jì)算機(jī)卻告訴我們?nèi)祟惾际清e(cuò)的。我覺(jué)得,甚至沒(méi)有一個(gè)人沾到圍棋真理的邊。但是我想說(shuō),從現(xiàn)在開始,我們棋手將會(huì)結(jié)合計(jì)算機(jī),邁進(jìn)全新的領(lǐng)域達(dá)到全新的境界?!?/em>
為什么不是寬度?
根據(jù)萬(wàn)能近似定理(universal approximation theorem),在一個(gè)隱藏層的情況下,只要夠?qū)挘╳ide)——神經(jīng)元數(shù)量足夠多,則能以任意精度逼近任意的函數(shù)。
然而,該定理并不能指出網(wǎng)絡(luò)具體要多“寬”,也不能保證訓(xùn)練算法能夠?qū)W得這個(gè)函數(shù)。對(duì)于逼近一個(gè)復(fù)雜的函數(shù),有可能需要隱藏層寬到不可實(shí)現(xiàn),也有可能訓(xùn)練產(chǎn)生記憶效果而無(wú)法有效的泛化。
研究表明,深度比寬度在以下兩方面更加有優(yōu)勢(shì):
- 深層網(wǎng)絡(luò)表示的函數(shù)可能需要淺層網(wǎng)絡(luò)指數(shù)級(jí)的神經(jīng)元數(shù)量才能表示;
- 深層的網(wǎng)絡(luò)能夠更好的泛化;
多多益善?
基于以上對(duì)深度的理解,我們似乎獲得了一個(gè)簡(jiǎn)單易行的絕佳方案:增加隱藏層!
可往往事與愿違。
以MNIST識(shí)別為例,使用在上一主題中構(gòu)建好的全連接網(wǎng)絡(luò)進(jìn)行訓(xùn)練,測(cè)試結(jié)果如下表所示:
隱層數(shù)量 | 每隱層神經(jīng)元數(shù) | 迭代次數(shù) | 識(shí)別精度 | 代碼 | |
---|---|---|---|---|---|
1 | 隱層x1 | 100 | 30 | 95.25% | tf_2-1_1_hidden_layers.py |
2 | 隱層x2 | 100 | 30 | 95.87% | tf_2-1_2_hidden_layers.py |
3 | 隱層x3 | 100 | 30 | 96.3% | tf_2-1_3_hidden_layers.py |
4 | 隱層x4 | 100 | 60 | 96.08% | tf_2-1_4_hidden_layers.py |
隨著隱藏層數(shù)量的增加,識(shí)別精度增長(zhǎng)并不顯著,當(dāng)隱藏層數(shù)量增加到4層時(shí),收斂不僅需要更多的迭代次數(shù),識(shí)別精度反而開始下降了。
可說(shuō)好的“深度”呢?
共享協(xié)議:署名-非商業(yè)性使用-禁止演繹(CC BY-NC-ND 3.0 CN)
轉(zhuǎn)載請(qǐng)注明:作者黑猿大叔(簡(jiǎn)書)