深度學習概述與發展歷史-花書第一章解讀(上)

前言

簡單介紹下背景,EE/物理出身,做過幾年後台開發,近兩三年在做數據挖掘。從讀研寫蒙特卡羅開始到現在,接觸深度學習也有一段時間了,曲折經歷參見 你為什麼從EE轉到CS。

我的背景與經歷比較複雜,不太具備參考價值,對於想入門機器學習,或進階深度學習的,參考 @阿薩姆 的這篇專欄文章 如何用3個月零基礎入門機器學習 。然後就是最重要的,操練起來。除了聽網課,閱讀一些書的對應章節,寫些demo驗證下理解也是很必要的。 開這個專欄的目的,主要是花時間整理下自己的理解,也剛好有個地方與大家交流,以免太過孤單而放棄。

我的整理/學習計劃,主要以NG的DL課程為藍本,以DL花書為主要閱讀材料,以其他網課與BLOG相關內容為參考。NG的DL課程與花書有如下對應關係:課程一《神經網路與深度學習》對應花書第六章,課程二《改善深層神經網路》對應花書第七、八兩章,課程三《結構化機器學習項目》對應花書第十一章,課程四《卷積神經網路》對應花書第九、十二章,課程五《序列模型》對應花書第十、十二章。我們將按此計劃依次進行,爭取每周更新一次。

今天第一次分享,主要以花書DL第一章為藍本,包括深度學習簡單概述與發展歷史。但寫完之後發現太長了,尤其是發展歷史部分,故分為上下兩部分。當然,這裡所有描述都假設讀者了解機器學習的基本知識。

既然是解讀花書第一章,那就簡略介紹下這本書的內容:這本DL聖經分為三部分,第一部分是必要的數學基礎與機器學習基礎,對有機器學習基礎的同學,可以用於查漏補缺。第二部分是監督學習模型,利用各種網路結構來做函數擬合/近似,也是工業界主要使用的各種模型。第三部分是無監督學習,主要涉及直接擬合概率分布或生成樣本(間接地表示概率分布),如大名鼎鼎的GAN/WGAN,但這屬於前沿研究的範疇。

1. 機器智能中的挑戰

如果一個問題可以形式化地用數學描述,那麼對計算機來說,是相對簡單的,比如求階乘123456!,但對人來說卻是非常挑戰的。相反,有些任務對人來說是非常簡單且自然的,比如認人臉、與人對話等,但對計算機來說卻是非常挑戰的。原因在於這些問題不易被形式化地有效地表示,比如怎麼用像素來表示人眼呢。故挑戰之一是,如何將這些非形式化的知識,以計算機能理解的方式傳遞給它。在歷史上,大致經歷了知識庫、機器學習、表示學習、深度學習幾個階段。

2. 知識庫方法 - 將知識硬編碼(hand coded knowledge)

一種最直接的方法就是,把系統需要的知識直接用形式化的語言來表達,再定義一些邏輯進行推演/預測。但對於複雜的情形,總會有這樣那樣的意外情況。如此這般,規則會越來越多,甚至無法全部列舉出來。我們常用的語言就是這樣,詞在不同的上下文中有不同的意義。若想用規則把這些表達出來,會非常挑戰,甚至無法完成。後來,人們想,是否可以讓機器從眾多具體例子中發現知識/規則?這就是機器學習。

3. 機器學習 - 特徵工程(feature engineering, representation really matters)

在機器學習系統中,除了模型(特徵與預測值的關係),我們還需要根據業務設計出合適的特徵變數,這就是特徵工程。給定特徵組,在特徵空間中,樣本就有了具體的表示。同一個樣本,在不同的特徵組構成的特徵空間中,它的表示是不同的。對於給定的問題,選擇合適的特徵,會得到更好的表示。這樣,簡單的線性模型也能解決問題。

在左圖的笛卡爾坐標系中,需要非線性模型(曲線)才能將兩個類別分開;而在右圖的極坐標系中,線性模型(直線)就能分開。這也就意味著,不同的表示,直接影響模型的複雜程度。好的表示,簡單模型就可以解決問題;不好的表示,需要用複雜模型,甚至複雜模型都無法解決。 在這裡,坐標軸 xyr	heta代表不同的特徵組,它們構成了不同的特徵空間。樣本的表示對應特徵空間中點的坐標。同一個樣本,在不同的特徵空間中表示不同,即坐標不同,如 (1, 1)(sqrt2, fracpi 4)

表示的重要性對程序員來講是非常熟悉的。例如從無序列表中查找元素,時間複雜度是線性的,而在有序列表中查找的話,時間複雜度是對數的,查找速度獲得了指數級別地加速。在這裡,數據結構對應問題的表示,查找演算法對應機器學習里的模型。

既然表示這麼重要,那除了通過特徵工程得到好的表示,還有沒有更好的辦法呢?讓我們再來回顧下上圖例子,這裡的特徵工程即發現新坐標系與坐標系間的變換。新特徵組 (r, 	heta) 是舊特徵組 (x, y) 經過變換得到的。注意,新特徵組和特徵組間的變換是人肉發現並執行的,所以這種能力更多是經驗的積累。那有沒有可能,只給定先驗結構/模型,新特徵與新舊特徵間變換的細節也由數據來一起訓練確定呢?有,這個過程稱之為表示學習/特徵學習。基於樣本在原始特徵空間中的表示,經過(訓練得到的)特徵變換,就得到了樣本在新特徵空間中的新表示。

4. 表示學習(representation learning) - 淺層模型

在深度學習被廣泛應用之前,我們的機器學習工具箱里也有幾款表示學習相關的模型,如PCA、GBDT、淺層神經網路等。PCA是一種基於線性變換的特徵轉換器。在新特徵空間中,由於丟掉了部分不重要的特徵分量,新的表示得到了很大程度的壓縮。淺層神經網路是包含少數幾個隱藏層的神經網路。隱藏層可以理解為非線性特徵變換器,樣本經過隱藏層的變換後,得到了新的表示。輸出層通常是基於新表示的線性分類器。

PCA是一種無監督模型,主要目的是得到更有效的表示。而淺層神經網路通常是監督模型,在解決監督問題的同時,得到了非線性特徵轉換器與更好的表示。由此看來,無論監督學習還是無監督學習,表示學習都是它們的基礎。這也是將來遇到的遷移學習、多任務模型、fine-tuning、pre-training的基礎。原因是相似問題的更好表示可以通過相似的特徵轉換得到,即特徵變換器是可以共享的,至少部分共享。

表示學習就是尋找特徵變換,樣本經過這樣的變換後得到的新表示是更好的表示。在下面的分析中,我們重點關注變換的性質(線性變換/非線性變換)與變換前後新舊特徵的特點與它們之間的關係。在PCA中,變換是線性的,對應原特徵空間中的轉動。變換後的特徵空間維度變小,新特徵間是線性無關的。新特徵是原特徵的線性組合。如下圖,變換後捨棄 z_2 維度,特徵空間的維度由2減少為1。顯然,在未丟失太多信息的前提下,表示變得更簡單了。

4.1 淺層神經網路

通常,有監督的神經網路模型會被分解為兩部分來理解,一部分是隱藏層,另一部分是輸出層。隱藏層作為一個特徵轉換器,意義在於得到更合適的表示,使得輸出層僅需要使用簡單模型就能達到很好的效果。以NG的DL課程一 1.2節為例,使用淺層神經網路來預測房屋的價格。如下圖所示,在輸入層如房屋大小、卧室數量、郵編、富裕程度等原特徵的基礎上,隱藏層構建了一組新特徵,如家庭成員數量、交通便利程度、學校質量。對預測房屋價格,這三個新特徵明顯更合適。每個隱藏層的特徵,都是在輸入層特徵線性組合的基礎上,再經過非線性函數(如ReLU)作用得到的。

在上面兩個例子中,新特徵是由原特徵組合而成,如可容納家庭成員數量是由卧室數量與房屋大小組合而成的。這種組合(composition)特性,無論在軟體開發還是在生活中都是很常見的。在軟體開發的重用思想中,除了繼承多態,就屬組合最靈活,常常又是多層組合。在生活中,汽車是由車架、發動機、輪胎等組合,而發動機又是由眾多零件組合而成。

但對於有些任務,如識別圖片中是否有車,即便使用淺層神經網路,得到的效果也並不理想。其原因在於,在輸入層特徵為像素的基礎上,經過簡單組合無法直接得到像車輪這樣抽象的特徵。而只有基於這類高度抽象的特徵,輸出層使用簡單模型才會奏效。那麼,會不會加多幾層會好些呢?下面舉兩個例子來說明深度/層數的重要性。

4.2 程序開發的啟示

編寫程序時,在main函數中只允許調用函數subroutine1、subroutine2等。 在subroutineX中只允許使用語言提供的基礎功能,不允許調用第三方庫。可想而知,即使開發一個簡單功能,如寫一條數據到資料庫,也需要開發大量subroutineX,且代碼幾乎沒有被重用。這段程序質量差且開發效率低的原因是,只允許一層調用或嵌套。若這樣,代碼的表達能力被大大地削弱。

而在通常的程序開發中,人們會不停地嵌套/調用各種函數模塊,這樣就大大地提升了程序的表達能力。碼農們可以高效地構建起複雜的變換,使得輸入經過變換後得到希望的輸出。這也是程序員習以為常而不自覺的,就如同人們能輕鬆地辨識出圖片中是貓還是狗一樣,而不自知。

4.3 大自然的啟示

在自然界中,質子和中子組成原子核,他們又是由更基本的各種夸克粒子組成。原子核與電子組成原子。多個的原子組成分子。更多的分子組成氣體、液體、固體等等。顯而易見,自然界的物質組成是有著非常深的層級結構。 同時,對於同一物體,如空氣,在不同層級(尺度)上有不同的表示。面對不同的問題時,人們會選擇更合適的層級表示(抽象表示)。如研究壓強等屬性時,空氣被看成均勻的氣體較合適;而研究空氣的成分時,使用分子層面的表示更為合適。

這兩個例子是人類在面對複雜的軟體工程與神秘的大自然時,所採取的表示方法與思考邏輯。其中不斷重複出現了兩個重要特性:組合(composition)與多層(multiple levels),這正是深度學習的最基本假設。

5. 深度學習 - 深層模型(multiple levels of composition)

深度學習是表示學習中的一種深層模型。它的基本假設是,問題的原始特徵通過多層組合(multiple levels of composition)能逐步得到更好的特徵表示。從目前的實踐效果來看,機器智能中很多挑戰問題都符合這個假設,如物體識別。接下來,我們以識別圖片中的物體是人、車、還是動物,來解釋下其中的關鍵概念。

輸入層是像素級的RGB三通道特徵,基於這些原始特徵,需要經過非常複雜的變換才能得到高級抽象特徵,如人臉、車輪等。雖然這個複雜的變換無法直接得到,但它可以通過多步簡單的非線性變換得到。在第一個隱藏層中,特徵是邊(edges)。由於邊有不同角度,如水平/垂直等,所以該隱藏層包含多個分解(disentangle)得到的邊特徵 。而這層中的邊(edges)特徵是由輸入層局部多個明暗相間的像素經過組合變換得到。依次類推,兩條邊交叉後組成了角(corner),多條邊交叉後組成了contour,而多個corner或contour又組成了物體輪廓,如輪子、身體等。每一層中的特徵都是由前一層局部多個特徵組合而成。圖片經過隱藏層的變換後,在每個隱藏層的特徵空間中都得到了新表示。基於圖片在第三個隱藏層中的抽象表示,簡單線性分類器就能準確地預測出圖片中的物體類別。

注意,上圖只是示意圖,並不是每層只有三個神經元,也不是僅需要三層就能提取出合適的表示。實際應用中數量會非常大,如隱藏層有幾十上百、單層神經元的數量幾十萬也很常見。 所以,在實際中,第一層的特徵不一定為邊,第二層也不一定為角。但每一層的特徵都是由前一層局部多個特徵組合而成,且新特徵更加抽象。

深度學習除了可以學習輸入層的多層抽象表示,還可以學習序列輸入中不同輸入間的依賴關係, 這就是循環神經網路RNN,在NG的DL課程五中會詳細介紹。

6. 總結

在解決機器智能問題的過程中,大致經歷了知識庫、機器學習、表示學習、深度學習幾個階段。見下圖,圖中灰色框代表利用數據訓練實現的,而不是人肉完成的。由此可見,一個顯著的發展趨勢是,系統中越來越多步驟轉換為由訓練學習實現。

上述只是今天回頭看,對相關知識的梳理與理解。而在知識發現的歷史過程中,其實是非常曲折的。在下節中,我們將分享神經網路的發展歷史。(下)已發布,請點擊下面的鏈接。

a88i99:深度學習概述與發展歷史-花書第一章解讀(下)zhuanlan.zhihu.com圖標

參考資料

Deep learning 第一章,第五章5.8節

Foundations and Challenges of Deep Learning (Yoshua Bengio) 視頻 與 PPT


推薦閱讀:

「2017 知乎 · 看山杯機器學習挑戰賽」結束,誰獲獎了?知乎還會做什麼?
為什麼LR要使用sigmod函數
Teaching Machines to Read and Comprehend

TAG:机器学习 | 深度学习DeepLearning | 人工智能 |