3
本文作者: 陳圳 | 2016-08-03 17:35 |
雷鋒網(wǎng)按:本文由Zouxy責(zé)編,全面介紹了深度學(xué)習(xí)的發(fā)展歷史及其在各個領(lǐng)域的應(yīng)用,并解釋了深度學(xué)習(xí)的基本思想,深度與淺度學(xué)習(xí)的區(qū)別和深度學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)之間的關(guān)系。
深度學(xué)習(xí),即Deep Learning,是一種學(xué)習(xí)算法(Learning algorithm),亦是人工智能領(lǐng)域的一個重要分支。從快速發(fā)展到實際應(yīng)用,短短幾年時間里,深度學(xué)習(xí)顛覆了語音識別、圖像分類、文本理解等眾多領(lǐng)域的算法設(shè)計思路,漸漸形成了一種從訓(xùn)練數(shù)據(jù)出發(fā),經(jīng)過一個端到端(end-to-end)的模型,然后直接輸出得到最終結(jié)果的一種新模式。那么,深度學(xué)習(xí)有多深?學(xué)了究竟有幾分?本文將帶你領(lǐng)略深度學(xué)習(xí)高端范兒背后的方法與過程。
|一、概述
Artificial Intelligence,也就是人 工智能,就像長生不老和星際漫游一樣,是人類最美好的夢想之一。雖然計算機技術(shù)已經(jīng)取得了長足的進步,但是到目前為止,還沒有一臺電腦能產(chǎn)生“自我”的意識。是的,在人類和大量現(xiàn)成數(shù)據(jù)的幫助下,電腦可以表現(xiàn)的十分強大,但是離開了這兩者,它甚至都不能分辨一個喵星人和一個汪星人。
圖靈(圖靈,大家都知道吧。計算機和人工智能的鼻祖,分別對應(yīng)于其著名的“圖靈機”和“圖靈測試”)在 1950 年的論文里,提出圖靈試驗的設(shè)想,即,隔墻對話,你將不知道與你談話的,是人還是電腦。這無疑給計算機,尤其是人工智能,預(yù)設(shè)了一個很高的期望值。但是半個世紀(jì)過去了,人工智能的進展,遠(yuǎn)遠(yuǎn)沒有達到圖靈試驗的標(biāo)準(zhǔn)。這不僅讓多年翹首以待的人們,心灰意冷,認(rèn)為人工智能是忽悠,相關(guān)領(lǐng)域是“偽科學(xué)”。
但是自 2006 年以來,機器學(xué)習(xí)領(lǐng)域,取得了突破性的進展。圖靈試驗,至少不是那么可望而不可及了。至于技術(shù)手段,不僅僅依賴于云計算對大數(shù)據(jù)的并行處理能力,而且依賴于算法。這個算法就是,Deep Learning。借助于 Deep Learning 算法,人類終于找到了如何處理“抽象概念”這個亙古難題的方法。
2012年6月,《紐約時報》披露了Google Brain項目,吸引了公眾的廣泛關(guān)注。這個項目是由著名的斯坦福大學(xué)的機器學(xué)習(xí)教授Andrew Ng和在大規(guī)模計算機系統(tǒng)方面的世界頂尖專家JeffDean共同主導(dǎo),用16000個CPU Core的并行計算平臺訓(xùn)練一種稱為“深度神經(jīng)網(wǎng)絡(luò)”(DNN,Deep Neural Networks)的機器學(xué)習(xí)模型(內(nèi)部共有10億個節(jié)點。這一網(wǎng)絡(luò)自然是不能跟人類的神經(jīng)網(wǎng)絡(luò)相提并論的。要知道,人腦中可是有150多億個神經(jīng)元,互相連接的節(jié)點也就是突觸數(shù)更是如銀河沙數(shù)。曾經(jīng)有人估算過,如果將一個人的大腦中所有神經(jīng)細(xì)胞的軸突和樹突依次連接起來,并拉成一根直線,可從地球連到月亮,再從月亮返回地球),在語音識別和圖像識別等領(lǐng)域獲得了巨大的成功。
項目負(fù)責(zé)人之一Andrew稱:“我們沒有像通常做的那樣自己框定邊界,而是直接把海量數(shù)據(jù)投放到算法中,讓數(shù)據(jù)自己說話,系統(tǒng)會自動從數(shù)據(jù)中學(xué)習(xí)。”另外一名負(fù)責(zé)人Jeff則說:“我們在訓(xùn)練的時候從來不會告訴機器說:‘這是一只貓?!到y(tǒng)其實是自己發(fā)明或者領(lǐng)悟了“貓”的概念。”
2012年11月,微軟在中國天津的一次活動上公開演示了一個全自動的同聲傳譯系統(tǒng),講演者用英文演講,后臺的計算機一氣呵成自動完成語音識別、英中機器翻譯和中文語音合成,效果非常流暢。據(jù)報道,后面支撐的關(guān)鍵技術(shù)也是DNN,或者深度學(xué)習(xí)(DL,DeepLearning)。
2013年1月,在百度年會上,創(chuàng)始人兼CEO李彥宏高調(diào)宣布要成立百度研究院,其中第一個成立的就是“深度學(xué)習(xí)研究所”(IDL,Institue of Deep Learning)。
為什么擁有大數(shù)據(jù)的互聯(lián)網(wǎng)公司爭相投入大量資源研發(fā)深度學(xué)習(xí)技術(shù)。聽起來感覺deeplearning很牛那樣。那什么是deep learning?為什么有deep learning?它是怎么來的?又能干什么呢?目前存在哪些困難呢?這些問題的簡答都需要慢慢來。咱們先來了解下機器學(xué)習(xí)(人工智能的核心)的背景。
|二、背景
機器學(xué)習(xí)(Machine Learning)是一門專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)使之不斷改善自身的性能的學(xué)科。機器能否像人類一樣能具有學(xué)習(xí)能力呢?1959年美國的塞繆爾(Samuel)設(shè)計了一個下棋程序,這個程序具有學(xué)習(xí)能力,它可以在不斷的對弈中改善自己的棋藝。4年后,這個程序戰(zhàn)勝了設(shè)計者本人。又過了3年,這個程序戰(zhàn)勝了美國一個保持8年之久的常勝不敗的冠軍。這個程序向人們展示了機器學(xué)習(xí)的能力,提出了許多令人深思的社會問題與哲學(xué)問題(呵呵,人工智能正常的軌道沒有很大的發(fā)展,這些什么哲學(xué)倫理啊倒發(fā)展的挺快。什么未來機器越來越像人,人越來越像機器啊。什么機器會反人類啊,ATM是開第一槍的啊等等。人類的思維無窮?。?/p>
機器學(xué)習(xí)雖然發(fā)展了幾十年,但還是存在很多沒有良好解決的問題:
例如圖像識別、語音識別、自然語言理解、天氣預(yù)測、基因表達、內(nèi)容推薦等等。目前我們通過機器學(xué)習(xí)去解決這些問題的思路都是這樣的(以視覺感知為例子):
從開始的通過傳感器(例如CMOS)來獲得數(shù)據(jù)。然后經(jīng)過預(yù)處理、特征提取、特征選擇,再到推理、預(yù)測或者識別。最后一個部分,也就是機器學(xué)習(xí)的部分,絕大部分的工作是在這方面做的,也存在很多的paper和研究。
而中間的三部分,概括起來就是特征表達。良好的特征表達,對最終算法的準(zhǔn)確性起了非常關(guān)鍵的作用,而且系統(tǒng)主要的計算和測試工作都耗在這一大部分。但,這塊實際中一般都是人工完成的??咳斯ぬ崛√卣鳌?/p>
截止現(xiàn)在,也出現(xiàn)了不少NB的特征(好的特征應(yīng)具有不變性(大小、尺度和旋轉(zhuǎn)等)和可區(qū)分性):例如Sift的出現(xiàn),是局部圖像特征描述子研究領(lǐng)域一項里程碑式的工作。由于SIFT對尺度、旋轉(zhuǎn)以及一定視角和光照變化等圖像變化都具有不變性,并且SIFT具有很強的可區(qū)分性,的確讓很多問題的解決變?yōu)榭赡?。但它也不是萬能的。
然而,手工地選取特征是一件非常費力、啟發(fā)式(需要專業(yè)知識)的方法,能不能選取好很大程度上靠經(jīng)驗和運氣,而且它的調(diào)節(jié)需要大量的時間。既然手工選取特征不太好,那么能不能自動地學(xué)習(xí)一些特征呢?答案是能!Deep Learning就是用來干這個事情的,看它的一個別名UnsupervisedFeature Learning,就可以顧名思義了,Unsupervised的意思就是不要人參與特征的選取過程。
那它是怎么學(xué)習(xí)的呢?怎么知道哪些特征好哪些不好呢?我們說機器學(xué)習(xí)是一門專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為的學(xué)科。好,那我們?nèi)说囊曈X系統(tǒng)是怎么工作的呢?為什么在茫茫人海,蕓蕓眾生,滾滾紅塵中我們都可以找到另一個她(因為,你存在我深深的腦海里,我的夢里 我的心里 我的歌聲里……)。人腦那么NB,我們能不能參考人腦,模擬人腦呢?(好像和人腦扯上點關(guān)系的特征啊,算法啊,都不錯,但不知道是不是人為強加的,為了使自己的作品變得神圣和高雅。) 近幾十年以來,認(rèn)知神經(jīng)科學(xué)、生物學(xué)等等學(xué)科的發(fā)展,讓我們對自己這個神秘的而又神奇的大腦不再那么的陌生。也給人工智能的發(fā)展推波助瀾。
|三、人腦視覺機理
1981 年的諾貝爾醫(yī)學(xué)獎,頒發(fā)給了 David Hubel(出生于加拿大的美國神經(jīng)生物學(xué)家) 和TorstenWiesel,以及 Roger Sperry。前兩位的主要貢獻,是“發(fā)現(xiàn)了視覺系統(tǒng)的信息處理”:可視皮層是分級的:
我們看看他們做了什么。1958 年,DavidHubel 和Torsten Wiesel 在 JohnHopkins University,研究瞳孔區(qū)域與大腦皮層神經(jīng)元的對應(yīng)關(guān)系。他們在貓的后腦頭骨上,開了一個3 毫米的小洞,向洞里插入電極,測量神經(jīng)元的活躍程度。
然后,他們在小貓的眼前,展現(xiàn)各種形狀、各種亮度的物體。并且,在展現(xiàn)每一件物體時,還改變物體放置的位置和角度。他們期望通過這個辦法,讓小貓瞳孔感受不同類型、不同強弱的刺激。
之所以做這個試驗,目的是去證明一個猜測。位于后腦皮層的不同視覺神經(jīng)元,與瞳孔所受刺激之間,存在某種對應(yīng)關(guān)系。一旦瞳孔受到某一種刺激,后腦皮層的某一部分神經(jīng)元就會活躍。經(jīng)歷了很多天反復(fù)的枯燥的試驗,同時犧牲了若干只可憐的小貓,David Hubel 和Torsten Wiesel 發(fā)現(xiàn)了一種被稱為“方向選擇性細(xì)胞(Orientation Selective Cell)”的神經(jīng)元細(xì)胞。當(dāng)瞳孔發(fā)現(xiàn)了眼前的物體的邊緣,而且這個邊緣指向某個方向時,這種神經(jīng)元細(xì)胞就會活躍。
這個發(fā)現(xiàn)激發(fā)了人們對于神經(jīng)系統(tǒng)的進一步思考。神經(jīng)-中樞-大腦的工作過程,或許是一個不斷迭代、不斷抽象的過程。這里的關(guān)鍵詞有兩個,一個是抽象,一個是迭代。從原始信號,做低級抽象,逐漸向高級抽象迭代。人類的邏輯思維,經(jīng)常使用高度抽象的概念。
例如,從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細(xì)胞發(fā)現(xiàn)邊緣和方向),然后抽象(大腦判定,眼前的物體的形狀,是圓形的),然后進一步抽象(大腦進一步判定該物體是只氣球)。
這個生理學(xué)的發(fā)現(xiàn),促成了計算機人工智能,在四十年后的突破性發(fā)展。
總的來說,人的視覺系統(tǒng)的信息處理是分級的。從低級的V1區(qū)提取邊緣特征,再到V2區(qū)的形狀或者目標(biāo)的部分等,再到更高層,整個目標(biāo)、目標(biāo)的行為等。也就是說高層的特征是低層特征的組合,從低層到高層的特征表示越來越抽象,越來越能表現(xiàn)語義或者意圖。而抽象層面越高,存在的可能猜測就越少,就越利于分類。例如,單詞集合和句子的對應(yīng)是多對一的,句子和語義的對應(yīng)又是多對一的,語義和意圖的對應(yīng)還是多對一的,這是個層級體系。
敏感的人注意到關(guān)鍵詞了:分層。而Deep learning的deep是不是就表示我存在多少層,也就是多深呢?沒錯。那Deep learning是如何借鑒這個過程的呢?畢竟是歸于計算機來處理,面對的一個問題就是怎么對這個過程建模?
因為我們要學(xué)習(xí)的是特征的表達,那么關(guān)于特征,或者說關(guān)于這個層級特征,我們需要了解地更深入點。所以在說Deep Learning之前,我們有必要再啰嗦下特征(呵呵,實際上是看到那么好的對特征的解釋,不放在這里有點可惜,所以就塞到這了)。
|四、關(guān)于特征
特征是機器學(xué)習(xí)系統(tǒng)的原材料,對最終模型的影響是毋庸置疑的。如果數(shù)據(jù)被很好的表達成了特征,通常線性模型就能達到滿意的精度。那對于特征,我們需要考慮什么呢?
4.1、特征表示的粒度
學(xué)習(xí)算法在一個什么粒度上的特征表示,才有能發(fā)揮作用-?就一個圖片來說,像素級的特征根本沒有價值。例如下面的摩托車,從像素級別,根本得不到任何信息,其無法進行摩托車和非摩托車的區(qū)分。而如果特征是一個具有結(jié)構(gòu)性(或者說有含義)的時候,比如是否具有車把手(handle),是否具有車輪(wheel),就很容易把摩托車和非摩托車區(qū)分,學(xué)習(xí)算法才能發(fā)揮作用。
4.2、初級(淺層)特征表示
既然像素級的特征表示方法沒有作用,那怎樣的表示才有用呢?
1995 年前后,Bruno Olshausen和 David Field 兩位學(xué)者任職 Cornell University,他們試圖同時用生理學(xué)和計算機的手段,雙管齊下,研究視覺問題。 他們收集了很多黑白風(fēng)景照片,從這些照片中,提取出400個小碎片,每個照片碎片的尺寸均為 16x16 像素,不妨把這400個碎片標(biāo)記為 S[i], i = 0,.. 399。接下來,再從這些黑白風(fēng)景照片中,隨機提取另一個碎片,尺寸也是 16x16 像素,不妨把這個碎片標(biāo)記為 T。
他們提出的問題是,如何從這400個碎片中,選取一組碎片,S[k], 通過疊加的辦法,合成出一個新的碎片,而這個新的碎片,應(yīng)當(dāng)與隨機選擇的目標(biāo)碎片 T,盡可能相似,同時,S[k] 的數(shù)量盡可能少。用數(shù)學(xué)的語言來描述,就是:
Sum_k (a[k] * S[k]) --> T, 其中 a[k] 是在疊加碎片 S[k] 時的權(quán)重系數(shù)。
為解決這個問題,Bruno Olshausen和 David Field 發(fā)明了一個算法,稀疏編碼(Sparse Coding)。
稀疏編碼是一個重復(fù)迭代的過程,每次迭代分兩步:
1)選擇一組 S[k],然后調(diào)整 a[k],使得Sum_k (a[k] * S[k]) 最接近 T。
2)固定住 a[k],在 400 個碎片中,選擇其它更合適的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。
經(jīng)過幾次迭代后,最佳的 S[k] 組合,被遴選出來了。令人驚奇的是,被選中的 S[k],基本上都是照片上不同物體的邊緣線,這些線段形狀相似,區(qū)別在于方向。
Bruno Olshausen和 David Field 的算法結(jié)果,與 David Hubel 和Torsten Wiesel 的生理發(fā)現(xiàn),不謀而合!
也就是說,復(fù)雜圖形,往往由一些基本結(jié)構(gòu)組成。比如下圖:一個圖可以通過用64種正交的edges(可以理解成正交的基本結(jié)構(gòu))來線性表示。比如樣例的x可以用1-64個edges中的三個按照0.8,0.3,0.5的權(quán)重調(diào)和而成。而其他基本edge沒有貢獻,因此均為0 。
另外,大牛們還發(fā)現(xiàn),不僅圖像存在這個規(guī)律,聲音也存在。他們從未標(biāo)注的聲音中發(fā)現(xiàn)了20種基本的聲音結(jié)構(gòu),其余的聲音可以由這20種基本結(jié)構(gòu)合成。
4.3、結(jié)構(gòu)性特征表示
小塊的圖形可以由基本edge構(gòu)成,更結(jié)構(gòu)化,更復(fù)雜的,具有概念性的圖形如何表示呢?這就需要更高層次的特征表示,比如V2,V4。因此V1看像素級是像素級。V2看V1是像素級,這個是層次遞進的,高層表達由底層表達的組合而成。專業(yè)點說就是基basis。V1取提出的basis是邊緣,然后V2層是V1層這些basis的組合,這時候V2區(qū)得到的又是高一層的basis。即上一層的basis組合的結(jié)果,上上層又是上一層的組合basis……(所以有大牛說Deep learning就是“搞基”,因為難聽,所以美其名曰Deep learning或者Unsupervised Feature Learning)
直觀上說,就是找到make sense的小patch再將其進行combine,就得到了上一層的feature,遞歸地向上learning feature。
在不同object上做training是,所得的edge basis 是非常相似的,但object parts和models 就會completely different了(那咱們分辨car或者face是不是容易多了):
從文本來說,一個doc表示什么意思?我們描述一件事情,用什么來表示比較合適?用一個一個字嘛,我看不是,字就是像素級別了,起碼應(yīng)該是term,換句話說每個doc都由term構(gòu)成,但這樣表示概念的能力就夠了嘛,可能也不夠,需要再上一步,達到topic級,有了topic,再到doc就合理。但每個層次的數(shù)量差距很大,比如doc表示的概念->topic(千-萬量級)->term(10萬量級)->word(百萬量級)。
一個人在看一個doc的時候,眼睛看到的是word,由這些word在大腦里自動切詞形成term,在按照概念組織的方式,先驗的學(xué)習(xí),得到topic,然后再進行高層次的learning。
4.4、需要有多少個特征?
我們知道需要層次的特征構(gòu)建,由淺入深,但每一層該有多少個特征呢?
任何一種方法,特征越多,給出的參考信息就越多,準(zhǔn)確性會得到提升。但特征多意味著計算復(fù)雜,探索的空間大,可以用來訓(xùn)練的數(shù)據(jù)在每個特征上就會稀疏,都會帶來各種問題,并不一定特征越多越好。
好了,到了這一步,終于可以聊到Deep learning了。上面我們聊到為什么會有Deep learning(讓機器自動學(xué)習(xí)良好的特征,而免去人工選取過程。還有參考人的分層視覺處理系統(tǒng)),我們得到一個結(jié)論就是Deep learning需要多層來獲得更抽象的特征表達。那么多少層才合適呢?用什么架構(gòu)來建模呢?怎么進行非監(jiān)督訓(xùn)練呢?
|五、Deep Learning的基本思想
假設(shè)我們有一個系統(tǒng)S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,如果輸出O等于輸入I,即輸入I經(jīng)過這個系統(tǒng)變化之后沒有任何的信息損失(呵呵,大牛說,這是不可能的。信息論中有個“信息逐層丟失”的說法(信息處理不等式),設(shè)處理a信息得到b,再對b處理得到c,那么可以證明:a和c的互信息不會超過a和b的互信息。這表明信息處理不會增加信息,大部分處理會丟失信息。當(dāng)然了,如果丟掉的是沒用的信息那多好啊),保持了不變,這意味著輸入I經(jīng)過每一層Si都沒有任何的信息損失,即在任何一層Si,它都是原有信息(即輸入I)的另外一種表示。現(xiàn)在回到我們的主題Deep Learning,我們需要自動地學(xué)習(xí)特征,假設(shè)我們有一堆輸入I(如一堆圖像或者文本),假設(shè)我們設(shè)計了一個系統(tǒng)S(有n層),我們通過調(diào)整系統(tǒng)中參數(shù),使得它的輸出仍然是輸入I,那么我們就可以自動地獲取得到輸入I的一系列層次特征,即S1,…, Sn。
對于深度學(xué)習(xí)來說,其思想就是對堆疊多個層,也就是說這一層的輸出作為下一層的輸入。通過這種方式,就可以實現(xiàn)對輸入信息進行分級表達了。
另外,前面是假設(shè)輸出嚴(yán)格地等于輸入,這個限制太嚴(yán)格,我們可以略微地放松這個限制,例如我們只要使得輸入與輸出的差別盡可能地小即可,這個放松會導(dǎo)致另外一類不同的Deep Learning方法。上述就是Deep Learning的基本思想。
|六、淺層學(xué)習(xí)(Shallow Learning)和深度學(xué)習(xí)(Deep Learning)
淺層學(xué)習(xí)是機器學(xué)習(xí)的第一次浪潮。
20世紀(jì)80年代末期,用于人工神經(jīng)網(wǎng)絡(luò)的反向傳播算法(也叫Back Propagation算法或者BP算法)的發(fā)明,給機器學(xué)習(xí)帶來了希望,掀起了基于統(tǒng)計模型的機器學(xué)習(xí)熱潮。這個熱潮一直持續(xù)到今天。人們發(fā)現(xiàn),利用BP算法可以讓一個人工神經(jīng)網(wǎng)絡(luò)模型從大量訓(xùn)練樣本中學(xué)習(xí)統(tǒng)計規(guī)律,從而對未知事件做預(yù)測。這種基于統(tǒng)計的機器學(xué)習(xí)方法比起過去基于人工規(guī)則的系統(tǒng),在很多方面顯出優(yōu)越性。這個時候的人工神經(jīng)網(wǎng)絡(luò),雖也被稱作多層感知機(Multi-layer Perceptron),但實際是種只含有一層隱層節(jié)點的淺層模型。
20世紀(jì)90年代,各種各樣的淺層機器學(xué)習(xí)模型相繼被提出,例如支撐向量機(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。這些模型的結(jié)構(gòu)基本上可以看成帶有一層隱層節(jié)點(如SVM、Boosting),或沒有隱層節(jié)點(如LR)。這些模型無論是在理論分析還是應(yīng)用中都獲得了巨大的成功。相比之下,由于理論分析的難度大,訓(xùn)練方法又需要很多經(jīng)驗和技巧,這個時期淺層人工神經(jīng)網(wǎng)絡(luò)反而相對沉寂。
深度學(xué)習(xí)是機器學(xué)習(xí)的第二次浪潮。
2006年,加拿大多倫多大學(xué)教授、機器學(xué)習(xí)領(lǐng)域的泰斗Geoffrey Hinton和他的學(xué)生RuslanSalakhutdinov在《科學(xué)》上發(fā)表了一篇文章,開啟了深度學(xué)習(xí)在學(xué)術(shù)界和工業(yè)界的浪潮。這篇文章有兩個主要觀點:1)多隱層的人工神經(jīng)網(wǎng)絡(luò)具有優(yōu)異的特征學(xué)習(xí)能力,學(xué)習(xí)得到的特征對數(shù)據(jù)有更本質(zhì)的刻畫,從而有利于可視化或分類;2)深度神經(jīng)網(wǎng)絡(luò)在訓(xùn)練上的難度,可以通過“逐層初始化”(layer-wise pre-training)來有效克服,在這篇文章中,逐層初始化是通過無監(jiān)督學(xué)習(xí)實現(xiàn)的。
當(dāng)前多數(shù)分類、回歸等學(xué)習(xí)方法為淺層結(jié)構(gòu)算法,其局限性在于有限樣本和計算單元情況下對復(fù)雜函數(shù)的表示能力有限,針對復(fù)雜分類問題其泛化能力受到一定制約。深度學(xué)習(xí)可通過學(xué)習(xí)一種深層非線性網(wǎng)絡(luò)結(jié)構(gòu),實現(xiàn)復(fù)雜函數(shù)逼近,表征輸入數(shù)據(jù)分布式表示,并展現(xiàn)了強大的從少數(shù)樣本集中學(xué)習(xí)數(shù)據(jù)集本質(zhì)特征的能力。(多層的好處是可以用較少的參數(shù)表示復(fù)雜的函數(shù))
深度學(xué)習(xí)的實質(zhì),是通過構(gòu)建具有很多隱層的機器學(xué)習(xí)模型和海量的訓(xùn)練數(shù)據(jù),來學(xué)習(xí)更有用的特征,從而最終提升分類或預(yù)測的準(zhǔn)確性。因此,“深度模型”是手段,“特征學(xué)習(xí)”是目的。區(qū)別于傳統(tǒng)的淺層學(xué)習(xí),深度學(xué)習(xí)的不同在于:1)強調(diào)了模型結(jié)構(gòu)的深度,通常有5層、6層,甚至10多層的隱層節(jié)點;2)明確突出了特征學(xué)習(xí)的重要性,也就是說,通過逐層特征變換,將樣本在原空間的特征表示變換到一個新特征空間,從而使分類或預(yù)測更加容易。與人工規(guī)則構(gòu)造特征的方法相比,利用大數(shù)據(jù)來學(xué)習(xí)特征,更能夠刻畫數(shù)據(jù)的豐富內(nèi)在信息。
|七、Deep learning與Neural Network
深度學(xué)習(xí)是機器學(xué)習(xí)研究中的一個新的領(lǐng)域,其動機在于建立、模擬人腦進行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模仿人腦的機制來解釋數(shù)據(jù),例如圖像,聲音和文本。深度學(xué)習(xí)是無監(jiān)督學(xué)習(xí)的一種。
深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究。含多隱層的多層感知器就是一種深度學(xué)習(xí)結(jié)構(gòu)。深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。
Deep learning本身算是machine learning的一個分支,簡單可以理解為neural network的發(fā)展。大約二三十年前,neural network曾經(jīng)是ML領(lǐng)域特別火熱的一個方向,但是后來確慢慢淡出了,原因包括以下幾個方面:
1)比較容易過擬合,參數(shù)比較難tune,而且需要不少trick;
2)訓(xùn)練速度比較慢,在層次比較少(小于等于3)的情況下效果并不比其它方法更優(yōu);
所以中間有大約20多年的時間,神經(jīng)網(wǎng)絡(luò)被關(guān)注很少,這段時間基本上是SVM和boosting算法的天下。但是,一個癡心的老先生Hinton,他堅持了下來,并最終(和其它人一起B(yǎng)engio、Yann.lecun等)提成了一個實際可行的deep learning框架。
Deep learning與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)之間有相同的地方也有很多不同。
二者的相同在于deep learning采用了神經(jīng)網(wǎng)絡(luò)相似的分層結(jié)構(gòu),系統(tǒng)由包括輸入層、隱層(多層)、輸出層組成的多層網(wǎng)絡(luò),只有相鄰層節(jié)點之間有連接,同一層以及跨層節(jié)點之間相互無連接,每一層可以看作是一個logistic regression模型;這種分層結(jié)構(gòu),是比較接近人類大腦的結(jié)構(gòu)的。
而為了克服神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的問題,DL采用了與神經(jīng)網(wǎng)絡(luò)很不同的訓(xùn)練機制。傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,采用的是back propagation的方式進行,簡單來講就是采用迭代的算法來訓(xùn)練整個網(wǎng)絡(luò),隨機設(shè)定初值,計算當(dāng)前網(wǎng)絡(luò)的輸出,然后根據(jù)當(dāng)前輸出和label之間的差去改變前面各層的參數(shù),直到收斂(整體是一個梯度下降法)。而deep learning整體上是一個layer-wise的訓(xùn)練機制。這樣做的原因是因為,如果采用back propagation的機制,對于一個deep network(7層以上),殘差傳播到最前面的層已經(jīng)變得太小,出現(xiàn)所謂的gradient diffusion(梯度擴散)。這個問題我們接下來討論。
|八、Deep learning訓(xùn)練過程
8.1、傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法為什么不能用在深度神經(jīng)網(wǎng)絡(luò)
BP算法作為傳統(tǒng)訓(xùn)練多層網(wǎng)絡(luò)的典型算法,實際上對僅含幾層網(wǎng)絡(luò),該訓(xùn)練方法就已經(jīng)很不理想。深度結(jié)構(gòu)(涉及多個非線性處理單元層)非凸目標(biāo)代價函數(shù)中普遍存在的局部最小是訓(xùn)練困難的主要來源。
BP算法存在的問題:
(1)梯度越來越稀疏:從頂層越往下,誤差校正信號越來越小;
(2)收斂到局部最小值:尤其是從遠(yuǎn)離最優(yōu)區(qū)域開始的時候(隨機值初始化會導(dǎo)致這種情況的發(fā)生);
(3)一般,我們只能用有標(biāo)簽的數(shù)據(jù)來訓(xùn)練:但大部分的數(shù)據(jù)是沒標(biāo)簽的,而大腦可以從沒有標(biāo)簽的的數(shù)據(jù)中學(xué)習(xí);
8.2、deep learning訓(xùn)練過程
如果對所有層同時訓(xùn)練,時間復(fù)雜度會太高;如果每次訓(xùn)練一層,偏差就會逐層傳遞。這會面臨跟上面監(jiān)督學(xué)習(xí)中相反的問題,會嚴(yán)重欠擬合(因為深度網(wǎng)絡(luò)的神經(jīng)元和參數(shù)太多了)。
2006年,hinton提出了在非監(jiān)督數(shù)據(jù)上建立多層神經(jīng)網(wǎng)絡(luò)的一個有效方法,簡單的說,分為兩步,一是每次訓(xùn)練一層網(wǎng)絡(luò),二是調(diào)優(yōu),使原始表示x向上生成的高級表示r和該高級表示r向下生成的x'盡可能一致。方法是:
1)首先逐層構(gòu)建單層神經(jīng)元,這樣每次都是訓(xùn)練一個單層網(wǎng)絡(luò)。
2)當(dāng)所有層訓(xùn)練完后,Hinton使用wake-sleep算法進行調(diào)優(yōu)。
將除最頂層的其它層間的權(quán)重變?yōu)殡p向的,這樣最頂層仍然是一個單層神經(jīng)網(wǎng)絡(luò),而其它層則變?yōu)榱藞D模型。向上的權(quán)重用于“認(rèn)知”,向下的權(quán)重用于“生成”。然后使用Wake-Sleep算法調(diào)整所有的權(quán)重。讓認(rèn)知和生成達成一致,也就是保證生成的最頂層表示能夠盡可能正確的復(fù)原底層的結(jié)點。比如頂層的一個結(jié)點表示人臉,那么所有人臉的圖像應(yīng)該激活這個結(jié)點,并且這個結(jié)果向下生成的圖像應(yīng)該能夠表現(xiàn)為一個大概的人臉圖像。Wake-Sleep算法分為醒(wake)和睡(sleep)兩個部分。
1)wake階段:認(rèn)知過程,通過外界的特征和向上的權(quán)重(認(rèn)知權(quán)重)產(chǎn)生每一層的抽象表示(結(jié)點狀態(tài)),并且使用梯度下降修改層間的下行權(quán)重(生成權(quán)重)。也就是“如果現(xiàn)實跟我想象的不一樣,改變我的權(quán)重使得我想象的東西就是這樣的”。
2)sleep階段:生成過程,通過頂層表示(醒時學(xué)得的概念)和向下權(quán)重,生成底層的狀態(tài),同時修改層間向上的權(quán)重。也就是“如果夢中的景象不是我腦中的相應(yīng)概念,改變我的認(rèn)知權(quán)重使得這種景象在我看來就是這個概念”。
deep learning訓(xùn)練過程具體如下:
1)使用自下上升非監(jiān)督學(xué)習(xí)(就是從底層開始,一層一層的往頂層訓(xùn)練):
采用無標(biāo)定數(shù)據(jù)(有標(biāo)定數(shù)據(jù)也可)分層訓(xùn)練各層參數(shù),這一步可以看作是一個無監(jiān)督訓(xùn)練過程,是和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)區(qū)別最大的部分(這個過程可以看作是feature learning過程)
具體的,先用無標(biāo)定數(shù)據(jù)訓(xùn)練第一層,訓(xùn)練時先學(xué)習(xí)第一層的參數(shù)(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經(jīng)網(wǎng)絡(luò)的隱層),由于模型capacity的限制以及稀疏性約束,使得得到的模型能夠?qū)W習(xí)到數(shù)據(jù)本身的結(jié)構(gòu),從而得到比輸入更具有表示能力的特征;在學(xué)習(xí)得到第n-1層后,將n-1層的輸出作為第n層的輸入,訓(xùn)練第n層,由此分別得到各層的參數(shù);
2)自頂向下的監(jiān)督學(xué)習(xí)(就是通過帶標(biāo)簽的數(shù)據(jù)去訓(xùn)練,誤差自頂向下傳輸,對網(wǎng)絡(luò)進行微調(diào)):
基于第一步得到的各層參數(shù)進一步fine-tune整個多層模型的參數(shù),這一步是一個有監(jiān)督訓(xùn)練過程;第一步類似神經(jīng)網(wǎng)絡(luò)的隨機初始化初值過程,由于DL的第一步不是隨機初始化,而是通過學(xué)習(xí)輸入數(shù)據(jù)的結(jié)構(gòu)得到的,因而這個初值更接近全局最優(yōu),從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功于第一步的feature learning過程。
|九、Deep Learning的常用模型或者方法
9.1、AutoEncoder自動編碼器
Deep Learning最簡單的一種方法是利用人工神經(jīng)網(wǎng)絡(luò)的特點,人工神經(jīng)網(wǎng)絡(luò)(ANN)本身就是具有層次結(jié)構(gòu)的系統(tǒng),如果給定一個神經(jīng)網(wǎng)絡(luò),我們假設(shè)其輸出與輸入是相同的,然后訓(xùn)練調(diào)整其參數(shù),得到每一層中的權(quán)重。自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復(fù)現(xiàn)輸入信號的神經(jīng)網(wǎng)絡(luò)。為了實現(xiàn)這種復(fù)現(xiàn),自動編碼器就必須捕捉可以代表輸入數(shù)據(jù)的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。
具體過程簡單的說明如下:
1)給定無標(biāo)簽數(shù)據(jù),用非監(jiān)督學(xué)習(xí)學(xué)習(xí)特征:
在我們之前的神經(jīng)網(wǎng)絡(luò)中,如第一個圖,我們輸入的樣本是有標(biāo)簽的,即(input, target),這樣我們根據(jù)當(dāng)前輸出和target(label)之間的差去改變前面各層的參數(shù),直到收斂。但現(xiàn)在我們只有無標(biāo)簽數(shù)據(jù),也就是右邊的圖。那么這個誤差怎么得到呢?
如上圖,我們將input輸入一個encoder編碼器,就會得到一個code,這個code也就是輸入的一個表示,那么我們怎么知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個信息,那么如果輸出的這個信息和一開始的輸入信號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調(diào)整encoder和decoder的參數(shù),使得重構(gòu)誤差最小,這時候我們就得到了輸入input信號的第一個表示了,也就是編碼code了。因為是無標(biāo)簽數(shù)據(jù),所以誤差的來源就是直接重構(gòu)后與原輸入相比得到。
2)通過編碼器產(chǎn)生特征,然后訓(xùn)練下一層。這樣逐層訓(xùn)練:
那上面我們就得到第一層的code,我們的重構(gòu)誤差最小讓我們相信這個code就是原輸入信號的良好表達了,或者牽強點說,它和原信號是一模一樣的(表達不一樣,反映的是一個東西)。那第二層和第一層的訓(xùn)練方式就沒有差別了,我們將第一層輸出的code當(dāng)成第二層的輸入信號,同樣最小化重構(gòu)誤差,就會得到第二層的參數(shù),并且得到第二層輸入的code,也就是原輸入信息的第二個表達了。其他層就同樣的方法炮制就行了(訓(xùn)練這一層,前面層的參數(shù)都是固定的,并且他們的decoder已經(jīng)沒用了,都不需要了)。
3)有監(jiān)督微調(diào):
經(jīng)過上面的方法,我們就可以得到很多層了。至于需要多少層(或者深度需要多少,這個目前本身就沒有一個科學(xué)的評價方法)需要自己試驗調(diào)了。每一層都會得到原始輸入的不同的表達。當(dāng)然了,我們覺得它是越抽象越好了,就像人的視覺系統(tǒng)一樣。
到這里,這個AutoEncoder還不能用來分類數(shù)據(jù),因為它還沒有學(xué)習(xí)如何去連結(jié)一個輸入和一個類。它只是學(xué)會了如何去重構(gòu)或者復(fù)現(xiàn)它的輸入而已。或者說,它只是學(xué)習(xí)獲得了一個可以良好代表輸入的特征,這個特征可以最大程度上代表原輸入信號。那么,為了實現(xiàn)分類,我們就可以在AutoEncoder的最頂?shù)木幋a層添加一個分類器(例如羅杰斯特回歸、SVM等),然后通過標(biāo)準(zhǔn)的多層神經(jīng)網(wǎng)絡(luò)的監(jiān)督訓(xùn)練方法(梯度下降法)去訓(xùn)練。
也就是說,這時候,我們需要將最后層的特征code輸入到最后的分類器,通過有標(biāo)簽樣本,通過監(jiān)督學(xué)習(xí)進行微調(diào),這也分兩種,一個是只調(diào)整分類器(黑色部分):
另一種:通過有標(biāo)簽樣本,微調(diào)整個系統(tǒng):(如果有足夠多的數(shù)據(jù),這個是最好的。end-to-end learning端對端學(xué)習(xí))
一旦監(jiān)督訓(xùn)練完成,這個網(wǎng)絡(luò)就可以用來分類了。神經(jīng)網(wǎng)絡(luò)的最頂層可以作為一個線性分類器,然后我們可以用一個更好性能的分類器去取代它。在研究中可以發(fā)現(xiàn),如果在原有的特征中加入這些自動學(xué)習(xí)得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還要好!
AutoEncoder存在一些變體,這里簡要介紹下兩個:
Sparse AutoEncoder稀疏自動編碼器:
當(dāng)然,我們還可以繼續(xù)加上一些約束條件得到新的Deep Learning方法,如:如果在AutoEncoder的基礎(chǔ)上加上L1的Regularity限制(L1主要是約束每一層中的節(jié)點中大部分都要為0,只有少數(shù)不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder法。
如上圖,其實就是限制每次得到的表達code盡量稀疏。因為稀疏的表達往往比其他的表達要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經(jīng)元,其他的大部分的神經(jīng)元是受到抑制的)。
Denoising AutoEncoders降噪自動編碼器:
降噪自動編碼器DA是在自動編碼器的基礎(chǔ)上,訓(xùn)練數(shù)據(jù)加入噪聲,所以自動編碼器必須學(xué)習(xí)去去除這種噪聲而獲得真正的沒有被噪聲污染過的輸入。因此,這就迫使編碼器去學(xué)習(xí)輸入信號的更加魯棒的表達,這也是它的泛化能力比一般編碼器強的原因。DA可以通過梯度下降算法去訓(xùn)練。
9.2、Sparse Coding稀疏編碼
如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數(shù)中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是系數(shù),我們可以得到這樣一個優(yōu)化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
通過求解這個最優(yōu)化式子,我們可以求得系數(shù)ai和基Φi,這些系數(shù)和基就是輸入的另外一種近似表達。
因此,它們可以用來表達輸入I,這個過程也是自動學(xué)習(xí)得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|a1| + |a2| + … + |an |)
這種方法被稱為Sparse Coding。通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來?!跋∈栊浴倍x為:只有很少的幾個非零元素或只有很少的幾個遠(yuǎn)大于零的元素。要求系數(shù) ai 是稀疏的意思就是說:對于一組輸入向量,我們只想有盡可能少的幾個系數(shù)遠(yuǎn)大于零。選擇使用具有稀疏性的分量來表示我們的輸入數(shù)據(jù)是有原因的,因為絕大多數(shù)的感官數(shù)據(jù),比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經(jīng)元,但對于某些圖像或者邊緣只有很少的神經(jīng)元興奮,其他都處于抑制狀態(tài))。
稀疏編碼算法是一種無監(jiān)督學(xué)習(xí)方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數(shù)據(jù)。雖然形如主成分分析技術(shù)(PCA)能使我們方便地找到一組“完備”基向量,但是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數(shù)比輸入向量的維數(shù)要大)。超完備基的好處是它們能更有效地找出隱含在輸入數(shù)據(jù)內(nèi)部的結(jié)構(gòu)與模式。然而,對于超完備基來說,系數(shù)ai不再由輸入向量唯一確定。因此,在稀疏編碼算法中,我們另加了一個評判標(biāo)準(zhǔn)“稀疏性”來解決因超完備而導(dǎo)致的退化(degeneracy)問題。
比如在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然后給定一個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱“sparse”。
這里可能大家會有疑問,為什么把底層作為Edge Detector呢?上層又是什么呢?這里做個簡單解釋大家就會明白,之所以是Edge Detector是因為不同方向的Edge就能夠描述出整幅圖像,所以不同方向的Edge自然就是圖像的basis了……而上一層的basis組合的結(jié)果,上上層又是上一層的組合basis……(就是上面第四部分的時候咱們說的那樣)
Sparse coding分為兩個部分:
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學(xué)習(xí)得到一組基[Φ1, Φ2, …],也就是字典。
稀疏編碼是k-means算法的變體,其訓(xùn)練過程也差不多(EM算法的思想:如果要優(yōu)化的目標(biāo)函數(shù)包含兩個變量,如L(W, B),那么我們可以先固定W,調(diào)整B使得L最小,然后再固定B,調(diào)整W使L最小,這樣迭代交替,不斷將L推向最小值。
訓(xùn)練過程就是一個重復(fù)迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標(biāo)函數(shù)最小。
每次迭代分兩步:
a)固定字典Φ[k],然后調(diào)整a[k],使得上式,即目標(biāo)函數(shù)最?。唇釲ASSO問題)。
b)然后固定住a [k],調(diào)整Φ [k],使得上式,即目標(biāo)函數(shù)最?。唇馔筈P問題)。
不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。
2)Coding階段:給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。
例如:
9.3、Restricted Boltzmann Machine (RBM)限制波爾茲曼機
假設(shè)有一個二部圖,每一層的節(jié)點之間沒有鏈接,一層是可視層,即輸入數(shù)據(jù)層(v),一層是隱藏層(h),如果假設(shè)所有的節(jié)點都是隨機二值變量節(jié)點(只能取0或者1值),同時假設(shè)全概率分布p(v,h)滿足Boltzmann 分布,我們稱這個模型是Restricted BoltzmannMachine (RBM)。
下面我們來看看為什么它是Deep Learning方法。首先,這個模型因為是二部圖,所以在已知v的情況下,所有的隱藏節(jié)點之間是條件獨立的(因為節(jié)點之間不存在連接),即p(h|v)=p(h1|v)…p(hn|v)。同理,在已知隱藏層h的情況下,所有的可視節(jié)點都是條件獨立的。同時又由于所有的v和h滿足Boltzmann 分布,因此,當(dāng)輸入v的時候,通過p(h|v) 可以得到隱藏層h,而得到隱藏層h之后,通過p(v|h)又能得到可視層,通過調(diào)整參數(shù),我們就是要使得從隱藏層得到的可視層v1與原來的可視層v如果一樣,那么得到的隱藏層就是可視層另外一種表達,因此隱藏層可以作為可視層輸入數(shù)據(jù)的特征,所以它就是一種Deep Learning方法。
如何訓(xùn)練呢?也就是可視層節(jié)點和隱節(jié)點間的權(quán)值怎么確定呢?我們需要做一些數(shù)學(xué)分析。也就是模型了。
聯(lián)合組態(tài)(jointconfiguration)的能量可以表示為:
而某個組態(tài)的聯(lián)合概率分布可以通過Boltzmann 分布(和這個組態(tài)的能量)來確定:
因為隱藏節(jié)點之間是條件獨立的(因為節(jié)點之間不存在連接),即:
然后我們可以比較容易(對上式進行因子分解Factorizes)得到在給定可視層v的基礎(chǔ)上,隱層第j個節(jié)點為1或者為0的概率:
同理,在給定隱層h的基礎(chǔ)上,可視層第i個節(jié)點為1或者為0的概率也可以容易得到:
給定一個滿足獨立同分布的樣本集:D={v(1), v(2),…, v(N)},我們需要學(xué)習(xí)參數(shù)θ={W,a,b}。
我們最大化以下對數(shù)似然函數(shù)(最大似然估計:對于某個概率模型,我們需要選擇一個參數(shù),讓我們當(dāng)前的觀測樣本的概率最大):
也就是對最大對數(shù)似然函數(shù)求導(dǎo),就可以得到L最大時對應(yīng)的參數(shù)W了。
如果,我們把隱藏層的層數(shù)增加,我們可以得到Deep Boltzmann Machine(DBM);如果我們在靠近可視層的部分使用貝葉斯信念網(wǎng)絡(luò)(即有向圖模型,當(dāng)然這里依然限制層中節(jié)點之間沒有鏈接),而在最遠(yuǎn)離可視層的部分使用Restricted Boltzmann Machine,我們可以得到DeepBelief Net(DBN)。
9.4、Deep Belief Networks深信度網(wǎng)絡(luò)
DBNs是一個概率生成模型,與傳統(tǒng)的判別模型的神經(jīng)網(wǎng)絡(luò)相對,生成模型是建立一個觀察數(shù)據(jù)和標(biāo)簽之間的聯(lián)合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了后者,也就是P(Label|Observation)。對于在深度神經(jīng)網(wǎng)絡(luò)應(yīng)用傳統(tǒng)的BP算法的時候,DBNs遇到了以下問題:
(1)需要為訓(xùn)練提供一個有標(biāo)簽的樣本集;
(2)學(xué)習(xí)過程較慢;
(3)不適當(dāng)?shù)膮?shù)選擇會導(dǎo)致學(xué)習(xí)收斂于局部最優(yōu)解。
DBNs由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經(jīng)網(wǎng)絡(luò)類型如圖三所示。這些網(wǎng)絡(luò)被“限制”為一個可視層和一個隱層,層間存在連接,但層內(nèi)的單元間不存在連接。隱層單元被訓(xùn)練去捕捉在可視層表現(xiàn)出來的高階數(shù)據(jù)的相關(guān)性。
首先,先不考慮最頂構(gòu)成一個聯(lián)想記憶(associative memory)的兩層,一個DBN的連接是通過自頂向下的生成權(quán)值來指導(dǎo)確定的,RBMs就像一個建筑塊一樣,相比傳統(tǒng)和深度分層的sigmoid信念網(wǎng)絡(luò),它能易于連接權(quán)值的學(xué)習(xí)。
最開始的時候,通過一個非監(jiān)督貪婪逐層方法去預(yù)訓(xùn)練獲得生成模型的權(quán)值,非監(jiān)督貪婪逐層方法被Hinton證明是有效的,并被其稱為對比分歧(contrastive divergence)。
在這個訓(xùn)練階段,在可視層會產(chǎn)生一個向量v,通過它將值傳遞到隱層。反過來,可視層的輸入會被隨機的選擇,以嘗試去重構(gòu)原始的輸入信號。最后,這些新的可視的神經(jīng)元激活單元將前向傳遞重構(gòu)隱層激活單元,獲得h(在訓(xùn)練過程中,首先將可視向量值映射給隱單元;然后可視單元由隱層單元重建;這些新可視單元再次映射給隱單元,這樣就獲取新的隱單元。執(zhí)行這種反復(fù)步驟叫做吉布斯采樣)。這些后退和前進的步驟就是我們熟悉的Gibbs采樣,而隱層激活單元和可視層輸入之間的相關(guān)性差別就作為權(quán)值更新的主要依據(jù)。
訓(xùn)練時間會顯著的減少,因為只需要單個步驟就可以接近最大似然學(xué)習(xí)。增加進網(wǎng)絡(luò)的每一層都會改進訓(xùn)練數(shù)據(jù)的對數(shù)概率,我們可以理解為越來越接近能量的真實表達。這個有意義的拓展,和無標(biāo)簽數(shù)據(jù)的使用,是任何一個深度學(xué)習(xí)應(yīng)用的決定性的因素。
在最高兩層,權(quán)值被連接到一起,這樣更低層的輸出將會提供一個參考的線索或者關(guān)聯(lián)給頂層,這樣頂層就會將其聯(lián)系到它的記憶內(nèi)容。而我們最關(guān)心的,最后想得到的就是判別性能,例如分類任務(wù)里面。
在預(yù)訓(xùn)練后,DBN可以通過利用帶標(biāo)簽數(shù)據(jù)用BP算法去對判別性能做調(diào)整。在這里,一個標(biāo)簽集將被附加到頂層(推廣聯(lián)想記憶),通過一個自下向上的,學(xué)習(xí)到的識別權(quán)值獲得一個網(wǎng)絡(luò)的分類面。這個性能會比單純的BP算法訓(xùn)練的網(wǎng)絡(luò)好。這可以很直觀的解釋,DBNs的BP算法只需要對權(quán)值參數(shù)空間進行一個局部的搜索,這相比前向神經(jīng)網(wǎng)絡(luò)來說,訓(xùn)練是要快的,而且收斂的時間也少。
DBNs的靈活性使得它的拓展比較容易。一個拓展就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs并沒有考慮到圖像的2維結(jié)構(gòu)信息,因為輸入是簡單的從一個圖像矩陣一維向量化的。而CDBNs就是考慮到了這個問題,它利用鄰域像素的空域關(guān)系,通過一個稱為卷積RBMs的模型區(qū)達到生成模型的變換不變性,而且可以容易得變換到高維圖像。DBNs并沒有明確地處理對觀察變量的時間聯(lián)系的學(xué)習(xí)上,雖然目前已經(jīng)有這方面的研究,例如堆疊時間RBMs,以此為推廣,有序列學(xué)習(xí)的dubbed temporal convolutionmachines,這種序列學(xué)習(xí)的應(yīng)用,給語音信號處理問題帶來了一個讓人激動的未來研究方向。
目前,和DBNs有關(guān)的研究包括堆疊自動編碼器,它是通過用堆疊自動編碼器來替換傳統(tǒng)DBNs里面的RBMs。這就使得可以通過同樣的規(guī)則來訓(xùn)練產(chǎn)生深度多層神經(jīng)網(wǎng)絡(luò)架構(gòu),但它缺少層的參數(shù)化的嚴(yán)格要求。與DBNs不同,自動編碼器使用判別模型,這樣這個結(jié)構(gòu)就很難采樣輸入采樣空間,這就使得網(wǎng)絡(luò)更難捕捉它的內(nèi)部表達。但是,降噪自動編碼器卻能很好的避免這個問題,并且比傳統(tǒng)的DBNs更優(yōu)。它通過在訓(xùn)練過程添加隨機的污染并堆疊產(chǎn)生場泛化性能。訓(xùn)練單一的降噪自動編碼器的過程和RBMs訓(xùn)練生成模型的過程一樣。
|十、總結(jié)與展望
1)Deep learning總結(jié)
深度學(xué)習(xí)是關(guān)于自動學(xué)習(xí)要建模的數(shù)據(jù)的潛在(隱含)分布的多層(復(fù)雜)表達的算法。換句話來說,深度學(xué)習(xí)算法自動的提取分類需要的低層次或者高層次特征。高層次特征,一是指該特征可以分級(層次)地依賴其他特征,例如:對于機器視覺,深度學(xué)習(xí)算法從原始圖像去學(xué)習(xí)得到它的一個低層次表達,例如邊緣檢測器,小波濾波器等,然后在這些低層次表達的基礎(chǔ)上再建立表達,例如這些低層次表達的線性或者非線性組合,然后重復(fù)這個過程,最后得到一個高層次的表達。
Deep learning能夠得到更好地表示數(shù)據(jù)的feature,同時由于模型的層次、參數(shù)很多,capacity足夠,因此,模型有能力表示大規(guī)模數(shù)據(jù),所以對于圖像、語音這種特征不明顯(需要手工設(shè)計且很多沒有直觀物理含義)的問題,能夠在大規(guī)模訓(xùn)練數(shù)據(jù)上取得更好的效果。此外,從模式識別特征和分類器的角度,deep learning框架將feature和分類器結(jié)合到一個框架中,用數(shù)據(jù)去學(xué)習(xí)feature,在使用中減少了手工設(shè)計feature的巨大工作量(這是目前工業(yè)界工程師付出努力最多的方面),因此,不僅僅效果可以更好,而且,使用起來也有很多方便之處,因此,是十分值得關(guān)注的一套框架,每個做ML的人都應(yīng)該關(guān)注了解一下。
當(dāng)然,deep learning本身也不是完美的,也不是解決世間任何ML問題的利器,不應(yīng)該被放大到一個無所不能的程度。
2)Deep learning未來
深度學(xué)習(xí)目前仍有大量工作需要研究。目前的關(guān)注點還是從機器學(xué)習(xí)的領(lǐng)域借鑒一些可以在深度學(xué)習(xí)使用的方法特別是降維領(lǐng)域。例如:目前一個工作就是稀疏編碼,通過壓縮感知理論對高維數(shù)據(jù)進行降維,使得非常少的元素的向量就可以精確的代表原來的高維信號。另一個例子就是半監(jiān)督流行學(xué)習(xí),通過測量訓(xùn)練樣本的相似性,將高維數(shù)據(jù)的這種相似性投影到低維空間。另外一個比較鼓舞人心的方向就是evolutionary programming approaches(遺傳編程方法),它可以通過最小化工程能量去進行概念性自適應(yīng)學(xué)習(xí)和改變核心架構(gòu)。
Deep learning還有很多核心的問題需要解決:
(1)對于一個特定的框架,對于多少維的輸入它可以表現(xiàn)得較優(yōu)(如果是圖像,可能是上百萬維)?
(2)對捕捉短時或者長時間的時間依賴,哪種架構(gòu)才是有效的?
(3)如何對于一個給定的深度學(xué)習(xí)架構(gòu),融合多種感知的信息?
(4)有什么正確的機理可以去增強一個給定的深度學(xué)習(xí)架構(gòu),以改進其魯棒性和對扭曲和數(shù)據(jù)丟失的不變性?
(5)模型方面是否有其他更為有效且有理論依據(jù)的深度模型學(xué)習(xí)算法?
探索新的特征提取模型是值得深入研究的內(nèi)容。此外有效的可并行訓(xùn)練算法也是值得研究的一個方向。當(dāng)前基于最小批處理的隨機梯度優(yōu)化算法很難在多計算機中進行并行訓(xùn)練。通常辦法是利用圖形處理單元加速學(xué)習(xí)過程。然而單個機器GPU對大規(guī)模數(shù)據(jù)識別或相似任務(wù)數(shù)據(jù)集并不適用。在深度學(xué)習(xí)應(yīng)用拓展方面,如何合理充分利用深度學(xué)習(xí)在增強傳統(tǒng)學(xué)習(xí)算法的性能仍是目前各領(lǐng)域的研究重點。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。