人人都要學一點深度學習(1)- 為什么我們需要它
版權聲明
本文由@leftnoteasy發布於 http://leftnoteasy.cnblogs.com, 如需全文轉載或有其他問題請聯系wheeleast (at) gmail.com。
1.開篇
1.1 為什么我開始寫這個系列博客
說五年前我還在某A雲公司的時候,身在一個機器學習算法組,對機器學習懷有濃厚的興趣。花了好多的時間來試圖搞清楚各種流行的機器學習算法,經常周末也跟同事探討公式的推倒和背后的意義。寫博客的主要動力是讓自己能夠更好的理解機器學習。
后來堅持了沒有太久的時間就換到大數據方向了,最主要的原因是覺得自己數學天賦太差,尤其是數學。當初學習的時候主要參考的PRML,Andrew Moore的PPT,Andrew Ng的公開課,plukids博客,另外加上淘寶斌強哥的各種悉心指導。但是學了好久,公式能大概看懂是怎么回事,不過自己徒手推出來實在是太艱難了。PRML的習題,甚至是具體數學的習題,都很難做得出來。
后面的發生的事情就理所當然了,既然很難在這個領域做到核心(我的理解是具有及其好的數學天賦作為后盾才能做到機器學習的核心),那么為什么不換一個更適合自己的方向呢?恩好吧,基礎數據架構(Infra)看起來是個不錯的方向,不需要理解太多的數學(除了真的需要去實現Paxos)。做Infra如果有架構設計的基礎,另外加上勤奮,多多少少還是能做出一些東西的。
為什么我又要重新開始寫機器學習相關的文章了?最主要的原因是現在的機器學習和五年前、十年前區別很大。最大的不同是,自從深度學習成為了機器學習舞台上最重要的一個角色起,機器學習變得更加真實了,利用深度學習可以做出很多很有意思的真實世界的應用,而這些東西在幾年前的門檻要高得多。我在本文之后會更詳細的展開此點。
此外這幾年的工具發展神速,利用TensorFlow、MXNet或者其他類似的工具可以很容易的開始自己的pet project,也不用理解太多背后的細節。而在幾年前能用的現成工具寥寥無幾,而且十分的碎片化,比如說如果想要做分類器吧,需要用libsvm,需要搞跨語言調用。如果要換個算法的話,那可是要命的事情了。當然這些東西對於大公司來說都不是事兒,但是對於個人學習者來說需要投入的經歷太多了,遠不是業余時間可以承擔的。
1.2 What to expect?
差不多關注了幾個月的深度學習,雖然沒有花太多時間來寫代碼,但是各種各樣的博客、視頻、公開課還是看了一些。這個系列和幾個我看過的主要內容的差異:
- 首先這個不是一個科普雜文,現在已經有很多旁征博引豐富多彩老少皆宜的雜文,比如說王川的深度學習到底有多深系列,我准備少些一些歷史和背景花絮,多寫一些技術。
- 其次這個不是一個系統的深度學習教程,現在已經有非常多非常好的相關公開課,比如說Stanford的CS231N\CS224D,Hilton的,Udacity的等等。我不准備寫得面面俱到。
- 另外我會盡量少的涉及數學,因為我不可能把數學推導過程寫得比Ian Goodfellow的Deep Learning書寫得更清楚。但是我會盡量把最重要的部分寫出來。
所以我希望寫出的是,當看過網上的博客、公開課和書后,什么地方是最難理解的。
2. 深度學習為什么是革命性的
啰里啰嗦了這么多,開始正文了。此篇博客嚴重參考了來自[1]第一章Introduction的內容,包括圖片和內容。
2.1 前深度學習的世界
深度學習不是一個新概念,它已經存在好幾十年了,具體可以參考[1]/[2],這里所說的深度學習世界大抵是在最近幾年深度學習刷新各個機器學習領域之后了。
前深度學習世界的特征就是:在人類強的地方很弱,在人類弱的地方可能很強。人類強的地方比如說圖像識別(貓還是狗);圖片語義分割(參考[3])比如看出一個圖片中哪部分是樹、哪部分是房子。人類弱的地方比如說下棋、語法標記(一個句子里面哪些是助詞哪些是動詞)。
這個最主要的原因是,那種對於人類來說簡單的東西(在萬千世界中識別出一只貓)沒辦法用一個正式的數學公式去描述[1]。
比如說你無法用數學公式去定義一個貓的形狀。因為不同的角度、顏色、距離、光線的組合讓這個基本上沒有辦法做到。
所以在這個基礎上談智能實在是鏡中月水中花:你連一個貓都不認識,怎么能夠取代人類?因為人類的世界遠遠比圍棋要復雜得多。
[1] 里面還有一個有趣的例子,關於1989年時候著名的專家系統Cyc:
Its inference engine detected an inconsistency in the story: it knew that people do not have electrical parts, but because Fred was holding an electric razor, it believed the entity “FredWhileShaving” contained electrical parts. It therefore asked whether Fred was still a person while he was shaving.
... 它的推論引擎發現了一個前后矛盾的地方:它知道人是沒有電驅動的模塊,但是因為Fred拿起了一個電動剃須刀,所以這個引擎認為"一個正在剃胡子的Fred"有了一個電驅動的模塊。然后這個系統就問起這個Fred到底還是不是一個人啊。
此外,前機器學習時代一個重要的特征是要設計特征,比如說如果要做一個淘寶的商品自動分類器,特征可能有商品的題目、描述、圖片等等;特征還需要進行嚴格的預處理,比如說要過濾掉描述里面親包郵啊這種無意義的話,而且對正文里面的描述也要進行重點抽取才能夠符合訓練的標准。等到特征選擇、清理好了之后才能夠運行出有意義的結果。而且如果需要重新選擇特征,或者更改特征,那就需要重新重頭來過。
曾經有些公司甚至有"特征抽取工程師"這樣的職位,以前阿里同事做分類器的時候,就要特別注意不要把成人玩具分到兒童玩具的類目里面,萬一被抓到把柄了那可就要丟工作了。
2.2 深度學習帶來了什么
深度學習最重要的東西就是自帶了特征學習(representation learning,有時候也被翻譯為表征學習),簡單來說就是,不需要進行特別的特征抽取。從這個來說,深度學習相對傳統機器學習來說就有了太多的優勢,因為一個設計好的系統能夠被相對容易地移植到新的任務上去。
參考最近DeepMind發布的一個深度增強學習的無監督系統玩復雜任務游戲游戲的例子[4]。系統從游戲的屏幕像素開始自我學習,到學會玩一個復雜游戲並超過人類的專業玩家,並沒有進行特別的人工特征抽取,這個在傳統的機器學習方式上看起來是很難想象的。
此外深度學習另外的一個優勢是,可以表述相對與淺度學習更復雜的東西,這里不准備展開描述,不然就要提到XOR,維度詛咒(The Curse of Dimensionality)等等相對枯燥而且很難說清楚的理論知識了。簡單來說,提升維度當然是一個很厲害人人都想的東西,參考三體中的降維打擊。但是與此同時也帶來了很多計算上的挑戰,得益於這幾年神經科學,算法研究和硬件(特別是GPU)提升,我們可以嘗試越來越深的模型。
3. 現在(2016)的深度學習究竟在什么位置
同樣,主要參考了[1]的綜述部分:
首先衡量深度網絡的復雜程度主要有兩個方面:1. 網絡中一共有多少個神經元,2. 每個神經元平均與多少個其他的神經元連接。
首先是連接的數量:
每個藍色的小點表示一些里程碑級別的系統公布的結果,比如說10. 就是GoogLeNet (Szegedy et al., 2014a)
從這點看來,似乎還是挺樂觀的,比如說10. 已經很接近人類了,但是看看下面。。。
神經元的數量:
可以看到,目前最先進的系統所模擬的神經元的數量處於蜜蜂和青蛙之間。藍色的線表示預估的增長曲線,如果在沒有革命性的進步前,系統差不多可以到2050年的時候模擬人類同樣的神經元的數目,所以革命之路還很漫長。
但是從另一方面來說,神經元的數目也不是唯一的衡量標准,就像是玩星際一樣,APM 150的意識派也可以完虐500的抽經流選手。我們可以教一個神經元如此少的系統玩復雜的電子游戲,但是我們沒有辦法教一個青蛙玩這種游戲。所以也不用悲觀,也許西部世界似的人工智能會到來得比想象中更早。
引用
[1] Deep Learning: Ian Goodfellow, Yoshua Bengio, Aaron Courville
[2] 王川的深度學習到底有多深系列
[4] https://deepmind.com/blog/reinforcement-learning-unsupervised-auxiliary-tasks/