Q:什麼是“深度學習”
對于“深度學習”這個術語,一個粗淺的定義是“主要使用深度神經網絡為工具的機器學習算法”。深度學習首先是一類機器學習的方法,因為它和其他機器學習方法一樣允許計算機從樣本中、從執行個體中、從資料中使用統計手段“學習”出規律來,而不用像專家系統和其他符号主義的方法一樣人工定義規則。其次,深度學習不同于其他機器學習方法的地方,在于它主要的工具,或者說使用到的數學模型是深度神經網絡。
雖說深度學習這個詞時近幾年才後起來,但是它在1986年甚至更早就被提出來了。早在19世紀60年代最簡單的人工神經網絡——多層感覺機就已經現世。19世紀八九十年代,聯結主義學術思潮對人工神經網絡的研究進一步加深。在這一時期,許多現在大熱的模型,如卷積神經網絡和循環神經網絡就被提出了;而許多現在的學術大牛,如Hinton,LeCun,Bengio也在那個時期初露鋒芒。由于當時的資料量和算力不足的原因,神經網絡不如SVM等簡單的算法好用,但2006年左右,Hinton 和 Salakhutdinov 發現多層前饋神經網絡可以先通過逐層預訓練,再用反向傳播(Back Propagation)算法進行精調的方式進行有效學習,算法深度學習得以獲得不輸于SVM等算法的實用性。随着移動網際網路的提出和摩爾定律進一步發揮作用,資料量和算力也上來了,深度學習方法也越來越好用。在2012年的ImageNet圖像識别比賽上,深度學習方法方法以優于第二名10個百分點的絕度優勢獲勝,至此一戰成名。2016年,AlphaGo擊敗李世石,從此深度學習天下皆知。更多深度學習的曆史可以參考由Ian Goodfellow、Yoshua Bengio、Aaron Courville合著的《Deep Learning》 第一章,中文世界比較好的資料是複旦大學邱錫鵬 寫的《神經網絡與深度學習》第一章。
Q:人工神經網絡的本質是什麼?
一個函數
人工智能的各種算法都是數學模型,人工神經網絡不例外。從數學角度看,一個人工神經網絡,本質上就是一個函數,一個從輸入到輸出的映射。更具體一點,神經網絡是有多個簡單函數組合而成的符合函數。
我們知道,人工神經網絡的基本單元是人工神經元,任何神經網絡都是神經元堆疊組合而成。神經元也是一個簡單的函數。周志華的《機器學習》第五章中有一個圖[3]很簡潔美觀地描繪了一個神經元的經典結構。

簡單來說,一個神經網絡就是一個線性組合與一個非線性函數的複合函數,就是把線性組合的結果丢進一個非線性函數裡[4]。
一個機率分布函數
一個人工神經網絡是一個機率分布函數。這其實不足為奇,應該說任何機器學習模型,或者說統計學習模型都是機率分布函數。畢竟機器學習的根本目标是預測:預測(判斷)某張圖檔的類别、預測某間房子的房價、預測某日的天氣情況、預測某個時段的車流量、預測某個使用者喜歡的商品、預測某條廣告的點選率······既然是預測,則必然用到機率模型。哪怕是最基本的線性回歸模型:
y = w1 * x1 + w2 * x2 + b
背後也是正态分布機率模型(将y看做x的随機變量,求y的條件機率分布,具體看Stanford的cs229-note-1, 中文看這篇文章)
同樣,每個神經網絡的輸出都是輸入的随機變量,每個神經網絡都是一個參數化條件機率模型,也正是因為如此,基本上所有神經網絡都可以用最大似然評估(MLE)來優化。
多個Logistic回歸模型的組合
有一點機器學習知識的人都知道,如果
圖中的外層函數為sigmoid函數,哪怕外層函數為relu或者tanh,我們也可以将它看做廣義的logistic模型。如此一來,一個神經元其實就是一個logistic回歸模型。那麼多個神經元連接配接起來的神經網絡,本質上就是多個logistic回歸模型的分層組合。
Q:神經網絡背後的設計思想是什麼?
或問:為什麼将多個神經元(Logistic回歸模型)連在一起就能有這麼強大的威力?
關于這個問題有那麼一種解釋:神經網絡是分層的,淺層的神經元可以提純出更有價值的資訊給深層的神經元處理。至于哪些資訊是“更有價值的資訊”,可以通過不斷試錯(最小化損失函數)來确定。一個Logistic模型不給力,我們可以用多幾個。當然不是全部一起上,而是讓這些個Logistic模型分工合作。***上的說法是:
neural networks employ a hierarchy of layered filters in which each layer considers information from a prior layer (or the operating environment), and then passes its output (and possibly the original input), to other layers.
這一種解釋特别适用于圖像識别的卷積神經網絡。比如說淺層的神經元可以學習到圖檔某個區域是否存在曲線/直線/弧線,深層的神經元可以學習到圖檔的某個區域是否存在一隻眼睛/耳朵/鼻子,更深層的神經元可以學習到這張圖檔是否存在一隻貓/狗。就像2009年ICML的一篇論文[2] :
The visual world can be described at many levels: pixel intensities, edges, object parts, objects, and beyond. The prospect of learning hierarchical models which simultaneously represent multiple levels has recently generated much interest. Ideally, such “deep” representations would learn hierarchies of feature detectors, and further be able to combine top-down and bottom-up processing of an image. For instance, lower layers could support object detection by spotting low-level features indicative of object parts. Conversely, information about objects in the higher layers could resolve lower-level ambiguities in the image or infer the locations of hidden object parts.
本圖取自上文提到的論文,将一個卷積網絡的第一、二層的數值輸出以圖檔資料格式檢視後可以看到,這個卷積網絡的第一、二層其實就是一個能夠識别類似“黑線、白線、黑線”這樣的組合的分類器。
我們也可以認為,淺層的神經元是深層神經元的預處理器,淺層的logistic回歸模型做了一些如“這裡有直線,那裡有弧線”,或者“這一點屬于A類,那一點屬于B類”這樣的簡單分類工作,深層的logistic回歸模型做一些“這隻是貓,那隻是狗”這樣的高層次的分類工作。
Q:深度學習作為一門學問,其知識結構是怎樣的?
《Deep Learning》[5]作為目前比較權威的深度學習教科書,其編排是是很能反映目前這一學科的知識體系的。書的第一章介紹了該書的知識結構,這裡截取了第二第三部分(第一部分是基本的數學和機器學習知識)。
由圖可知,作者把目前深度學習的知識體系分為兩部分,一部分是比較成熟的基礎部分,另一部分是仍在發展的前沿部分。作為深度學習這一學科的基礎,深度前饋神經網絡(多層感覺機)展現了深度學習最最基礎的思想,定義了深度神經網絡的基本單元、一般結構,并凝結了一套設計網絡和優化網絡的通用方法。其他所有變種都衍生自深度前饋神經網絡。掌握了前饋網絡,就可以進一步學習正則化和更多優化技巧,前者是一類提高模型泛化能力的方法,後者是提高神經網絡性能和加快訓練效率的方法。除了設計和調優的技巧以外,還要進一步學習前饋神經網絡的一些改良版本,相較于普通的前饋網絡,這些改良版本針對特定問題做了特定的網絡結構改進,在各自的領域有高于普通前饋網絡的效果。最典型的是卷積神經網絡和循環神經網絡。前者在圖像識别領域有奇效,後者主要用于序列模組化,比如自然語言處理。學完這四個子產品的比較理論化的内容,就可以通過一些前輩的經驗掌握一些最佳實踐和應用。
以上就是深度學習的基礎内容。至于更進階的内容,比如自編碼器、表示學習,與蒙特卡洛方法的結合(ALphaGo),推理,以及沒有在《Deep Learning》出現的強化學習,這些研究方向還在蓬勃發展。想要學習這些前沿技術,除了掌握紮實的基礎知識和閱讀《Deep Learning》這類綜述文獻意外,也隻能從會議和期刊的論文中學習了。
Q:“深度學習可解釋性差”是什麼意思?
解釋,就是在觀察的基礎上進行思考,合理地說明事物變化的原因,事物之間的聯系,或者是事物發展的規律。(搜狗百科)
“深度學習可解釋性差”,意思就是我們很難說明一條樣本資料灌進一個神經網絡出來這樣一個預測結果的原因,這造成的直接後果就是很多時候我們不知道怎麼針對一個神經網絡做優化。
考慮一個線性回歸模型,比如我用房屋面積x1和到市中心的距離x2兩個因素來預測房價y:
y = w1 * x1 + w2 * x2 + b
我們知道如果
w1 = 10, w2=1000
就意味着x1增加1,y增加10,x2增加1,y增加1000,亦即我們認為一個房子的房價受房屋大小和到始終細膩距離兩個因素影響,而且到市中心距離這個因素的印象力很大,比房屋面積大100倍。我們還可以針對每個權重w和偏置b做假設檢驗,來看看這三個因素有沒有哪些是無顯著影響的。對于這種隻有兩個因素的線性模型,我們甚至還可以将模型的函數圖像畫出來,直覺地檢查模型與資料拟合程度如何。對于線性模型,我們很清楚每一個參數w和b的含義是什麼——我們很清楚這個模型學習了什麼東西。是以我們可以有很明确的優化方案:“深圳市大城市,裡市中心越近房價越高,我們應該提高到市中心距離這個因素的權重,加大w2”。
然而神經網絡,一來神經元多,參數衆多;而來結構分層,且隐含層衆多;三來神經網絡的參數對應的特征不是人工設計的,是神經網絡在學習過程中自己選擇的。我們根本不知道我們的神經網絡模型到底學習了寫什麼,我們不知道每一個參數的含義是什麼,是以我們無法解釋整個模型的運作機制,自然也無法得出明确而又針對性的優化方案。
可解釋性差也是深度學習目前最大的缺陷之一。這篇文章很詳細地闡釋了可解釋性的概念,推薦閱讀。
本作品首發于簡書 和 部落格園平台,采用知識共享署名 4.0 國際許可協定進行許可。
本文直接或簡介地使用了以下著作的内容:
- 邱錫鵬 《神經網絡與深度學習》
- Honglak Lee, Roger Grosse, Rajesh Ranganath and Andrew Ng "Convolutional deep belief networks for scalable unsupervised learning of hierarchical representations"
- 周志華的《機器學習》
- Wikipedia "Artificial Neuron"
- Ian Goodfellow, Yoshua Bengio, Aaron Courville 《Deep Learning》