最近deep learning大火,不僅僅受到學術界的關注,更在工業界受到大家的追捧。在很多重要的評測中,DL都取得了state of the art的效果。尤其是在語音辨識方面,DL使得錯誤率下降了大約30%,取得了顯著的進步,現在如果哪個做語音辨識的公司沒用DL,都不好意思打招呼了,相信後續這種狀況還會延伸到映像和自然語言處理等其它領域。
deep learning本身算是machine learning的一個分支,簡單可以理解為neural network的發展。大約二三十年前,neural network曾經是ML領域特別火熱的一個方向,但是後來確慢慢淡出了,原因包括以下幾個方面:
1,比較容易過訓練,參數比較難tune;
2,訓練速度比較慢,在層次比較少(小於等於3)的情況下效果並不比其它方法更優;
所以中間有大約20多年的時間,神經網路被關注很少,這段時間基本上是svm和boosting演算法的天下。但是,一個癡心的老先生hinton,他堅持了下來,並最終(和其它人一起bengio、yann.lecun等)提成了一個實際可行的deep learning架構。
deep learning與傳統的神經網路之間有相同的地方也有很多不同。
二者的相同在於deep learning採用了神經網路相似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網路,只有相鄰層節點之間有串連,同一層以及跨層節點之間相互無串連,每一層可以看作是一個logistic regression模型;這種分層結構,是比較接近人類大腦的結構的。
而為了克服神經網路訓練中的問題,DL採用了與神經網路很不同的訓練機制。傳統神經網路中,採用的是back propagation的方式進行,簡單來講就是採用迭代的演算法來訓練整個網路,隨機設定初值,計算當前網路的輸出,然後根據當前輸出和label之間的差去改變前面各層的參數,直到收斂(整體是一個梯度下降法)。而deep learning整體上是一個layer-wise的訓練機制。這樣做的原因是因為,如果採用back propagation的機制,對於一個deep network(7層以上),殘差傳播到最前面的層已經變得太小,出現所謂的gradient
diffusion(梯度擴散)。
deep learning訓練過程具體如下:
1,採用無標定資料(有標定資料也可)分層訓練各層參數,這一步可以看作是一個無監督訓練過程,是和傳統神經網路區別最大的部分(這個過程可以看作是feature learning過程):
具體的,先用無標定資料訓練第一層,訓練時可以採用auto-encoder來學習第一層的參數(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經網路的隱層),由於模型capacity的限制以及稀疏性約束,使得得到的模型能夠學習到資料本身的結構,從而得到比輸入更具有表示能力的特徵;在學習得到第n-1層後,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的參數;
這裡面需要重點理解auto-encoder以及sparse的機制的原理和作用。
2,基於第一步得到的各層參數進一步fine-tune整個多層模型的參數,這一步是一個有監督訓練過程;第一步類似神經網路的隨機初始化初值過程,由於DL的第一步不是隨機初始化,而是通過學習輸入資料的結構得到的,因而這個初值更接近全域最優,從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功於第一步的feature learning過程。
總之,deep learning能夠得到更好地表示資料的feature,同時由於模型的層次、參數很多,capacity足夠,因此,模型有能力表示大規模資料,所以對於映像、語音這種特徵不明顯(需要手工設計且很多沒有直觀物理含義)的問題,能夠在大規模訓練資料上取得更好的效果。此外,從模式識別特徵和分類器的角度,deep learning架構將feature和分類器結合到一個架構中,用資料去學習feature,在使用中減少了手工設計feature的巨大工作量(這是目前工業界工程師付出努力最多的方面),因此,不僅僅效果可以更好,而且,使用起來也有很多方便之處,因此,是十分值得關注的一套架構,每個做ML的人都應該關注瞭解一下。
當然,deep learning本身也不是完美的,也不是解決世間任何ML問題的利器,不應該被放大到一個無所不能的程度。
所以,應該make a deep understanding on deep learning,使其為我所用。
推薦比較好的學習資料:
1,stanford deep learning tutorial: http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial;
2,綜述:Bengio's Learning Deep Architectures for AI,
http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf;
3, andrew ng's talk video:
http://techtalks.tv/talks/machine-learning-and-ai-via-brain-simulations/57862/;
4,cvpr 2012 tutorial:
http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf
比較淺顯的從LR,Neoral network,convolutional neural network介紹到sparse encoder;
原文:http://blog.sina.com.cn/s/blog_6ae183910101dw2z.html