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