Deep Learning——機器學習前沿熱點【zz】


原文轉自:http://elevencitys.com/?p=1854 
 
深度學習是 機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。深度學習是 無監督學習的一種。
深度學習的概念源於 人工神經網絡的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發現數據的分布式特征表示。
深度學習的概念由Hinton等人於2006年提出。基於深信度網(DBN)提出非監督貪心逐層訓練算法,為解決深層結構相關的優化難題帶來希望,隨后提出多層自動編碼器深層結構。此外Lecun等人提出的卷積神經網絡是第一個真正多層結構學習算法,它利用空間相對關系減少參數數目以提高訓練性能。

 

一、Deep Learning的前世今生

圖靈在 1950 年的論文里,提出圖靈試驗的設想,即,隔牆對話,你將不知道與你談話的,是人還是電腦 [1]。

這無疑給計算機,尤其是人工智能,預設了一個很高的期望值。但是半個世紀過去了,人工智能的進展,遠遠沒有達到圖靈試驗的標准。這不僅讓多年翹首以待的人們,心灰意冷,認為人工智能是忽悠,相關領域是“偽科學”。

2008 年 6 月,“連線”雜志主編,Chris Anderson 發表文章,題目是 “理論的終極,數據的泛濫將讓科學方法過時”。並且文中還引述經典著作 “人工智能的現代方法”的合著者,時任 Google 研究總監的 Peter Norvig 的言論,說 “一切模型都是錯的。進而言之,拋棄它們,你就會成功”[2]。

言下之意,精巧的算法是無意義的。面對海量數據,即便只用簡單的算法,也能得到出色的結果。與其鑽研算法,不如研究雲計算,處理大數據。

如果這番言論,發生在 2006 年以前,可能我不會強力反駁。但是自 2006 年以來,機器學習領域,取得了突破性的進展。

圖靈試驗,至少不是那么可望而不可即了。至於技術手段,不僅僅依賴於雲計算對大數據的並行處理能力,而且依賴於算法。這個算法就是,Deep Learning。

借助於 Deep Learning 算法,人類終於找到了如何處理 “抽象概念”這個亘古難題的方法。

於是學界忙着延攬相關領域的大師。Alex Smola 加盟 CMU,就是這個背景下的插曲。懸念是 Geoffrey Hinton 和 Yoshua Bengio 這兩位牛人,最后會加盟哪所大學。

Geoffrey Hinton 曾經轉戰 Cambridge、CMU,目前任教University of Toronto。相信挖他的名校一定不少。

Yoshua Bengio 經歷比較簡單,McGill University 獲得博士后,去 MIT 追隨 Mike Jordan 做博士后。目前任教 University of Montreal。

Deep Learning 引爆的這場革命,不僅學術意義巨大,而且離錢很近,實在太近了。如果把相關技術難題比喻成一座山,那么翻過這座山,山后就是特大露天金礦。技術難題解決以后,剩下的事情,就是動用資本和商業的強力手段,跑馬圈地了。

於是各大公司重兵集結,虎視眈眈。Google 兵分兩路,左路以 Jeff Dean 和 Andrew Ng 為首,重點突破 Deep Learning 等等算法和應用 [3]。

Jeff Dean 在 Google 諸位 Fellows 中,名列榜首,GFS 就是他的傑作。Andrew Ng 本科時,就讀 CMU,后來去 MIT 追隨 Mike Jordan。Mike Jordan 在 MIT 人緣不好,后來憤然出走 UC Berkeley。Andrew Ng 毫不猶豫追隨導師,也去了 Berkeley。拿到博士后,任教 Stanford,是 Stanford 新生代教授中的佼佼者,同時兼職 Google。

Google 右路軍由 Amit Singhal 領軍,目標是構建 Knowledge Graph 基礎設施。

1996 年 Amit Singhal 從 Cornell University 拿到博士學位后,去 Bell Lab 工作,2000 年加盟 Google。據說他去 Google 面試時,對 Google 創始人 Sergey Brian 說,“Your engine is excellent, but let me rewirte it!”[4]

換了別人,說不定一個大巴掌就扇過去了。但是 Sergey Brian 大人大量,不僅不怪罪小伙子的輕狂,反而真的讓他從事新一代排名系統的研發。Amit Singhal 目前任職 Google 高級副總裁,掌管 Google 最核心的業務,搜索引擎。

Google 把王牌中之王牌,押寶在 Deep Learning 和 Knowledge Graph 上,目的是更快更大地奪取大數據革命的勝利果實。

Reference

[1] Turing Test.

http://en.wikipedia.org/wiki/Turing_test

[2] The End of Theory: The Data Deluge Makes the Scientific Method Obsolete

http://www.wired.com/science/discoveries/magazine/16-07/pb_theory

[3] Introduction to Deep Learning.

http://en.wikipedia.org/wiki/Deep_learning

[4] Interview with Amit Singhal, Google Fellow.

http://searchengineland.com/interview-with-amit-singhal-google-fellow-121342

二、Deep Learning的基本思想和方法

實際生活中,人們為了解決一個問題,如對象的分類(對象可是是文檔、圖像等),首先必須做的事情是如何來表達一個對象,即必須抽取一些特征來表示一個對象,如文本的處理中,常常用詞集合來表示一個文檔,或把文檔表示在向量空間中(稱為VSM模型),然后才能提出不同的分類算法來進行分類;又如在圖像處理中,我們可以用像素集合來表示一個圖像,后來人們提出了新的特征表示,如SIFT,這種特征在很多圖像處理的應用中表現非常良好,特征選取得好壞對最終結果的影響非常巨大。因此,選取什么特征對於解決一個實際問題非常的重要。

然而,手工地選取特征是一件非常費力、啟發式的方法,能不能選取好很大程度上靠經驗和運氣;既然手工選取特征不太好,那么能不能自動地學習一些特征呢?答案是能!Deep Learning就是用來干這個事情的,看它的一個別名Unsupervised Feature Learning,就可以顧名思義了,Unsupervised的意思就是不要人參與特征的選取過程。因此,自動地學習特征的方法,統稱為Deep Learning。

1)Deep Learning的基本思想

假設我們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,如果輸出O等於輸入I,即輸入I經過這個系統變化之后沒有任何的信息損失,保持了不變,這意味着輸入I經過每一層Si都沒有任何的信息損失,即在任何一層Si,它都是原有信息(即輸入I)的另外一種表示。現在回到我們的主題Deep Learning,我們需要自動地學習特征,假設我們有一堆輸入I(如一堆圖像或者文本),假設我們設計了一個系統S(有n層),我們通過調整系統中參數,使得它的輸出仍然是輸入I,那么我們就可以自動地獲取得到輸入I的一系列層次特征,即S1,…, Sn。

另外,前面是假設輸出嚴格地等於輸入,這個限制太嚴格,我們可以略微地放松這個限制,例如我們只要使得輸入與輸出的差別盡可能地小即可,這個放松會導致另外一類不同的Deep Learning方法。上述就是Deep Learning的基本思想。

2)Deep Learning的常用方法

a). AutoEncoder

最簡單的一種方法是利用人工神經網絡的特點,人工神經網絡(ANN)本身就是具有層次結構的系統,如果給定一個神經網絡,我們假設其輸出與輸入是相同的,然后訓練調整其參數,得到每一層中的權重,自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征,在研究中可以發現,如果在原有的特征中加入這些自動學習得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還要好!這種方法稱為AutoEncoder。當然,我們還可以繼續加上一些約束條件得到新的Deep Learning方法,如如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder方法。

b). Sparse Coding

如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數中基的概念,即O = w1*B1 + W2*B2+….+ Wn*Bn, Bi是基,Wi是系數,我們可以得到這樣一個優化問題:

Min |I – O|

通過求解這個最優化式子,我們可以求得系數Wi和基Bi,這些系數和基礎就是輸入的另外一種近似表達,因此,它們可以特征來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:

Min |I – O| + u*(|W1| + |W2| + … + |Wn|)

這種方法被稱為Sparse Coding。

c) Restrict  Boltzmann Machine (RBM)

假設有一個二部圖,每一層的節點之間沒有鏈接,一層是可視層,即輸入數據層(v),一層是隱藏層(h),如果假設所有的節點都是二值變量節點(只能取0或者1值),同時假設全概率分布p(v, h)滿足Boltzmann 分布,我們稱這個模型是Restrict  Boltzmann Machine (RBM)。下面我們來看看為什么它是Deep Learning方法。首先,這個模型因為是二部圖,所以在已知v的情況下,所有的隱藏節點之間是條件獨立的,即p(h|v) =p(h1|v)…..p(hn|v)。同理,在已知隱藏層h的情況下,所有的可視節點都是條件獨立的,同時又由於所有的v和h滿足Boltzmann 分布,因此,當輸入v的時候,通過p(h|v) 可以得到隱藏層h,而得到隱藏層h之后,通過p(v|h) 又能得到可視層,通過調整參數,我們就是要使得從隱藏層得到的可視層v1與原來的可視層v如果一樣,那么得到的隱藏層就是可視層另外一種表達,因此隱藏層可以作為可視層輸入數據的特征,所以它就是一種Deep Learning方法。

如果,我們把隱藏層的層數增加,我們可以得到Deep Boltzmann Machine (DBM);如果我們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,當然這里依然限制層中節點之間沒有鏈接),而在最遠離可視層的部分使用Restrict  Boltzmann Machine,我們可以得到Deep Belief Net (DBN) 。

當然,還有其它的一些Deep Learning 方法,在這里就不敘述了。總之,Deep Learning能夠自動地學習出數據的另外一種表示方法,這種表示可以作為特征加入原有問題的特征集合中,從而可以提高學習方法的效果,是目前業界的研究熱點。

三、深度學習(Deep Learning)算法簡介

查看最新論文

Yoshua Bengio, Learning Deep Architectures for AI, Foundations and Trends in Machine Learning, 2(1), 2009

深度(Depth)

從一個輸入中產生一個輸出所涉及的計算可以通過一個流向圖(flow graph)來表示:流向圖是一種能夠表示計算的圖,在這種圖中每一個節點表示一個基本的計算並且一個計算的值(計算的結果被應用到這個節點的孩子節點的值)。考慮這樣一個計算集合,它可以被允許在每一個節點和可能的圖結構中,並定義了一個函數族。輸入節點沒有孩子,輸出節點沒有父親。

對於表達1 的流向圖,可以通過一個有兩個輸入節點2 和3 的圖表示,其中一個節點通過使用23 作為輸入(例如作為孩子)來表示4 ;一個節點僅使用2作為輸入來表示平方;一個節點使用6 和7 作為輸入來表示加法項(其值為5 );最后一個輸出節點利用一個單獨的來自於加法節點的輸入計算SIN。

這種流向圖的一個特別屬性是深度(depth):從一個輸入到一個輸出的最長路徑的長度。

傳統的前饋神經網絡能夠被看做擁有等於層數的深度(比如對於輸出層為隱層數加1)。SVMs有深度2(一個對應於核輸出或者特征空間,另一個對應於所產生輸出的線性混合)。

深度架構的動機

學習基於深度架構的學習算法的主要動機是:

不充分的深度是有害的;

大腦有一個深度架構;

認知過程是深度的;

不充分的深度是有害的

在許多情形中深度2就足夠(比如logical gates, formal [threshold] neurons, sigmoid-neurons, Radial Basis Function [RBF] units like in SVMs)表示任何一個帶有給定目標精度的函數。但是其代價是:圖中所需要的節點數(比如計算和參數數量)可能變的非常大。理論結果證實那些事實上所需要的節點數隨着輸入的大小指數增長的函數族是存在的。這一點已經在logical gates, formal [threshold] neurons 和rbf單元中得到證實。在后者中Hastad說明了但深度是d時,函數族可以被有效地(緊地)使用O(n)個節點(對於n個輸入)來表示,但是如果深度被限制為d-1,則需要指數數量的節點數O(2^n)。

我們可以將深度架構看做一種因子分解。大部分隨機選擇的函數不能被有效地表示,無論是用深地或者淺的架構。但是許多能夠有效地被深度架構表示的卻不能被用淺的架構高效表示(see the polynomials example in the Bengio survey paper)。一個緊的和深度的表示的存在意味着在潛在的可被表示的函數中存在某種結構。如果不存在任何結構,那將不可能很好地泛化。

大腦有一個深度架構

例如,視覺皮質得到了很好的研究,並顯示出一系列的區域,在每一個這種區域中包含一個輸入的表示和從一個到另一個的信號流(這里忽略了在一些層次並行路徑上的關聯,因此更復雜)。這個特征層次的每一層表示在一個不同的抽象層上的輸入,並在層次的更上層有着更多的抽象特征,他們根據低層特征定義。

需要注意的是大腦中的表示是在中間緊密分布並且純局部:他們是稀疏的:1%的神經元是同時活動的。給定大量的神經元,任然有一個非常高效地(指數級高效)表示。

認知過程看起來是深度的
  • 人類層次化地組織思想和概念;
  • 人類首先學習簡單的概念,然后用他們去表示更抽象的;
  • 工程師將任務分解成多個抽象層次去處理;

學習/發現這些概念(知識工程由於沒有反省而失敗?)是很美好的。對語言可表達的概念的反省也建議我們一個稀疏的表示:僅所有可能單詞/概念中的一個小的部分是可被應用到一個特別的輸入(一個視覺場景)。

學習深度架構的突破

2006年前,嘗試訓練深度架構都失敗了:訓練一個深度有監督前饋神經網絡趨向於產生壞的結果(同時在訓練和測試誤差中),然后將其變淺為1(1或者2個隱層)。

2006年的3篇論文改變了這種狀況,由Hinton的革命性的在深度信念網(Deep Belief Networks, DBNs)上的工作所引領:

在這三篇論文中以下主要原理被發現:

  • 表示的無監督學習被用於(預)訓練每一層;
  • 在一個時間里的一個層次的無監督訓練,接着之前訓練的層次。在每一層學習到的表示作為下一層的輸入;
  • 用無監督訓練來調整所有層(加上一個或者更多的用於產生預測的附加層);

DBNs在每一層中利用用於表示的無監督學習RBMs。Bengio et al paper 探討和對比了RBMs和auto-encoders(通過一個表示的瓶頸內在層預測輸入的神經網絡)。Ranzato et al paper在一個convolutional架構的上下文中使用稀疏auto-encoders(類似於稀疏編碼)。Auto-encoders和convolutional架構將在以后的課程中講解。

從2006年以來,大量的關於深度學習的論文被發表,一些探討了其他原理來引導中間表示的訓練,查看Learning Deep Architectures for AI

四、拓展學習推薦

Deep Learning 經典閱讀材料:

Deep Learning工具—— Theano

Theano是deep learning的Python庫,要求首先熟悉Python語言和numpy,建議讀者先看Theano basic tutorial,然后按照Getting Started 下載相關數據並用gradient descent的方法進行學習。

學習了Theano的基本方法后,可以練習寫以下幾個算法:

有監督學習:

  1. Logistic Regression - using Theano for something simple
  2. Multilayer perceptron - introduction to layers
  3. Deep Convolutional Network - a simplified version of LeNet5

無監督學習:

最后呢,推薦給大家基本ML的書籍:

五、應用實例

1、計算機視覺。
  • ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton, NIPS 2012.
  • Learning Hierarchical Features for Scene Labeling, Clement Farabet, Camille Couprie, Laurent Najman and Yann LeCun, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013.
  • Learning Convolutional Feature Hierachies for Visual Recognition, Koray Kavukcuoglu, Pierre Sermanet, Y-Lan Boureau, Karol Gregor, Michaël Mathieu and Yann LeCun, Advances in Neural Information Processing Systems (NIPS 2010), 23, 2010.
2、語音識別。
微軟研究人員通過與hintion合作,首先將RBM和DBN引入到語音識別聲學模型訓練中,並且在大詞匯量語音識別系統中獲得巨大成功,使得語音識別的錯誤率相對減低30%。但是,DNN還沒有有效的並行快速算法,目前,很多研究機構都是在利用大規模數據語料通過GPU平台提高DNN聲學模型的訓練效率。
在國際上,IBM、google等公司都快速進行了DNN語音識別的研究,並且速度飛快。
國內方面,科大訊飛、百度、中科院自動化所等公司或研究單位,也在進行深度學習在語音識別上的研究。
3、自然語言處理等其他領域
很多機構在開展研究,但目前深度學習在自然語言處理方面還沒有產生系統性的突破。

六、參考鏈接:

1.http://baike.baidu.com/view/9964678.htm?subLemmaId=10105430&fromenter=deep+learning
2.http://www.cnblogs.com/ysjxw/archive/2011/10/08/2201819.html
3.http://blog.csdn.net/abcjennifer/article/details/7826917


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM