Deep Learning(深度學習)最近火爆的不行,不論是以NIPS,ICML,CVPR這些top conference為代表的學術界,還是以Google,Microsoft,IBM為代表的工業界,都加入到了轟轟烈烈的深度學習行列中。在可以預見的相當長一段時間內,Deep Learning依然會持續這種熱點狀態。下面的工作和Deep Learning的內容很相關,希望能夠比較深入詳細的研究一下其相關的內容。后面會堅持記錄下學習過程,既是對自己的鼓勵,也希望能夠和更多的朋友進行交流。
應該如何開頭呢?這個話題千頭萬緒的,自己也沒有仔細整理過,都是東拼西湊零零散散的東西。記得以前一個教育家說過,人類的學習過程應該遵循認知的過程,而不是理論的邏輯過程。大概是這個意思吧,具體記不清楚了,下面就從自己接觸到了解Deep Learning的過程來說一下。
最初知道Deep Learning還是從Neural Network大本營 NIPS的Paper List上偶然看到的,是一篇關於Sparse Coding的文章。當時不懂的問題很多,只是知道這種non-linear變化是很NB的,后來再沒有過多接觸。后來是從新浪微博上一干大牛(@余凱_西二旗民工,@張棟_機器學習,@老師木,@鄧侃等等)討論中有一個比較入門的了解。前一段時間自己在做關於Transfer Learning和Metric Learning的東西,對Features Learning方面的有了一些認識,才對Deep Learning有一些體會。
我們知道在信號處理中,無論是圖像還是語音,基本的處理流程是(以圖像為例):
(1) 對原始輸入進行預處理,如resize圖像大小,去除噪音,背景差分等;
(2) 在預處理過程輸出的數據上提取特征,進行features extraction及feature selection的操作,比如進行HOG計算,之后進行特征降維等;
(3) 在獲得的features vectors(instances)之上,使用各種model進行學習,訓練,最終完成具體任務,如Classification,Recognition等
這里面通常把通常把(1)和(2)統稱起來叫做Feature Learning。需要說明一下,在上圖中,把(2)過程分成兩個Feature Extraction和Feature Learning兩個部分。很多文獻中,把關於feature的linear transformation稱為Feature Extraction,關於non-linear transformation稱為Feature Selection。為了便於區分,這里將計算、提取特征稱為Feature Extraction,將對特征(feature)的linear 和non-linear transformation 統稱為Feature Selection。
從上面的這個流程圖中,我們可以看出,后面的操作是建立在前面輸出結果的基礎之上的。這樣越靠近前部的處理就愈加重要,不考慮“預處理”部分,Feature Extraction是其中最為重要的部分。有很多文獻中都提及到,Feature Extraction決定了要解決問題的能力上限,而在其后流程中的模型\方法等只是為了更好的或更有效的接近這個上限。
我們知道,雖然研究設計features的工作很多,但是特別有效的feature還是很少,在眼前張口就來的可能就SIFT,HOG這么幾種。這里要說明的是,我們不是否定關於設計feature的工作,而是說這部分工作是很難的,特別是具體到一個特殊領域工作中,這些Features是否依然適合解決我們的問題都是未知。並且在實際工作,這部分工作需要更多的人工操作參入其中,由於人的因素這一方面增加了feature的不確定性,另一方面使得工程投入十分昂貴。
眾多牛人其實很早以前就意識到這個問題了,也進行了很多嘗試,比如類似Metric Learning,Kernel Learning等,這些linear或是non-linear的transformation都希望可以獲取更有效的feature representation。然而,就像我們前面談論到的,這些方法還是已有的features基礎之上的。根據features決定上限的理論,這個東西還不是我們最想要的東西。於是牛人也繼續發展這個問題,既然這個問題還是不行,大家干脆直接從原始底層數據上學習feature吧(features learning/representation learning),於是乎傳說中的Deep Learning在這種需求背景下橫空出世了。
深度學習(Deep Learning)的概念大概是2006年左右由Geoffrey Hinton等人提出來的,主要通過神經網絡(Neural Network, NN)來模擬人的大腦的學習過程,希望通過模仿人的大腦的多層抽象機制來實現對數據(畫像、語音及文本等)的抽象表達,將features learning和classifier整合到了一個學習框架中,減少了人工/人為在設計features中的工作。“深度學習”里面的深度(Deep)指的就是神經網絡多層結構。深度學習的基本思想就是,在一個n層的NN中,對每一層的輸出(Output)與這一層的輸入(Input)“相等”。這個地方“相等”有兩個含義在里面:第一個是說Output和Input不是在絕對形式上的相等,而是在抽象意義上的相等,舉個不太恰當的例子,比如說對“交通工具”這個概念上,Input是“可以駕駛的,四個輪子”,Output是“車”,這樣雖然對兩者的描述不一致,但是我們都可以理解為“交通工具”了;關於“相等”的另外一點指的是限制的約束的程度,比如說是不會造成歧義的完全“相等”還是有適當寬松條件的“相等”。 其實上面的最后一點中的這兩個思想,也是對應了Deep Learning中兩種方法:AutoEncoder和Sparse Coding,除去這兩者外,還有一個很常用的方法就是Restrict Boltzmann Machine (RBM)。具體的細節問題,在這里面暫時不討論,在后面學習的時候會單獨討論到這個問題。
Deep Learning技術已經有些年頭了(2006),真正震撼大家的可能是兩件事。一個是在2012年的ImageNet畫像識別大賽上,Geoffrey Hinton帶領學生利用Deep Learning取得了極好的成績(2012,85%;2011,74%;2010,72%)。另外一件事是Microsoft通過與Geoffrey Hinton合作,利用Deep Learning在語音識別系統中取得了巨大的成功。無論研究人員還是工程師,在這兩件事上除去驚喜外,更看到了巨大的經濟利益。從2012年Google透漏出來的技術路線圖,我們也可以看到,Google下一階段的技術重點也放到了Deep Learning(另一個是Knowledge Graph)。鄧侃在他的文章中說:“借助於 Deep Learning 算法,人類終於找到了如何處理‘抽象概念’這個亘古難題的方法。”,“Deep Learning 引爆的這場革命,不僅學術意義巨大,而且離錢很近,實在太近了。如果把相關技術難題比喻成一座山,那么翻過這座山,山后就是特大露天金礦。技術難題解決以后,剩下的事情,就是動用資本和商業的強力手段,跑馬圈地了。”也就是因為這些原因,讓大家極度興奮。
雖然Deep Learning看起來很完美,但是我們也得認識到這東西也是有不足的。比如老師木認為這個東西只是大家新炒作起來的技術,本質上與其他的Machine Learning的方法沒有區別,Deep Learning可以做到的,其他方法也是可以做到的。所以學習的時候也不要迷信DL,要有一個清醒的認識。
還有一些關於Deep Learning的一些趣聞,主要是關於Geoffrey Hinton。這位老先生可以說是Deep Learning的開山鼻祖了。Hinton老先生很是了不起,是NN的終極Fans,專注NN四十年之久,即是大家都不看好NN的時候,老先生對NN也是不離不棄。余凱的在中科院計算所的talk里,也聊過關於SVM和NN之間一些“恩怨”,聽着也很是有趣。覺得這些大師之間有時候也是很有趣的,參考文獻中有一些關於些故事的,感興趣的可以看一看。不管怎么說,對於這些事情我們這些小人物就是聽一個樂子吧,最應該學習的是大師們的優點,踏踏實實的做好自己的研究和工作。
下面的學習計算從兩方面走,一個是從理論上仔細學習一下相關方法,多讀一些文獻,看看其他人是都是從哪些方面入手的,這個還要看一些文章再做決定,這個主要是從[1]中給出的reading list入手了,主要集中在關於Computer Vision的部分。
另一個是從應用上走,主要是研究一些Deep Learning工具的使用(主要是Theano),實現一些示例。在這個過程中有不理解的地方在做適當的調整、學習。主要是按照[9]中給出的路線走:先了解一下Theano basic tutorial,然后按照[1]中的Getting StartedGuide學習。
之后呢嘗試幾個算法,關於Supervise Learning的
(1) Logistic Regression - using Theano for something simple
(2)Multilayer perceptron - introduction to layers
(3) Deep Convolutional Network - a simplified version of LeNet5
Unsupervise Learning的
(1) Auto Encoders, Denoising Autoencoders - description of autoencoders
(2)Stacked Denoising Auto-Encoders - easy steps into unsupervised pre-training for deep nets
(3) Restricted Boltzmann Machines - single layer generative RBM model
(4) Deep Belief Networks - unsupervised generative pre-training of stacked RBMs followed by supervised fine-tuning
下面給出一些參考文獻:
[1] Website: http://deeplearning.net/
[2] Introduction to Deep Learning: http://en.wikipedia.org/wiki/Deep_learning
[3] Bengio’s Survey: http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf
[4] Standord Deep Learning tutorial: http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
[5] cvpr 2012 tutorial:http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf, from LR, NN, CNN to Sparse Encoder
[6] 李航博士: http://blog.sina.com.cn/s/blog_7ad48fee0100vz2f.html
[7] 八卦: http://www.cnblogs.com/nicejs/archive/2012/12/07/2807766.html
[8] 鄧亞峰: http://blog.sina.com.cn/s/blog_6ae183910101dw2z.html
[9] elevencity : http://elevencitys.com/?p=1854
[10] 鄧侃:http://blog.sina.com.cn/s/blog_46d0a3930101fswl.html