有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)的定義:
有監(jiān)督學(xué)習(xí):對(duì)具有概念標(biāo)記(分類(lèi))的訓(xùn)練樣本進(jìn)行學(xué)習(xí),以盡可能對(duì)訓(xùn)練樣本集外的數(shù)據(jù)進(jìn)行標(biāo)記(分類(lèi))預(yù)測(cè)。這里,所有的標(biāo)記(分類(lèi))是已知的。因此,訓(xùn)練樣本的岐義性低。
無(wú)監(jiān)督學(xué)習(xí):對(duì)沒(méi)有概念標(biāo)記(分類(lèi))的訓(xùn)練樣本進(jìn)行學(xué)習(xí),以發(fā)現(xiàn)訓(xùn)練樣本集中的結(jié)構(gòu)性知識(shí)。這里,所有的標(biāo)記(分類(lèi))是未知的。因此,訓(xùn)練樣本的岐義性高。聚類(lèi)就是典型的無(wú)監(jiān)督學(xué)習(xí)
四、關(guān)于特征
特征是機(jī)器學(xué)習(xí)系統(tǒng)的原材料,對(duì)最終模型的影響是毋庸置疑的。如果數(shù)據(jù)被很好的表達(dá)成了特征,通常線性模型就能達(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],基本上都是照片上不同物體的邊緣線,這些線段形狀相似,區(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)線性表示。比如樣例的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,換句話說(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)練呢?
五、Deep Learning的基本思想
假設(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)用的信息那多好?。3至瞬蛔?,這意味著輸入I經(jīng)過(guò)每一層Si都沒(méi)有任何的信息損失,即在任何一層Si,它都是原有信息(即輸入I)的另外一種表示。現(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í)(Shallow Learning)和深度學(xué)習(xí)(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í)一種深層非線性網(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ù),從而能夠訓(xùn)練大量的數(shù)據(jù)樣本)
深度學(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)在信息。
七、Deep learning與Neural Network
深度學(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ò)之間有相同的地方也有很多不同。
Similarity between deep learning and neural network:
二者的相同在于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)的。
Dissimilarity:
而為了克服神經(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的缺陷:如果采用back propagation的機(jī)制,對(duì)于一個(gè)deep network(7層以上),殘差傳播到最前面的層已經(jīng)變得太小,出現(xiàn)所謂的gradient diffusion(梯度擴(kuò)散)。這個(gè)問(wèn)題我們接下來(lái)討論。
八、Deep learning訓(xùn)練過(guò)程
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è)非線性處理單元層)非凸目標(biāo)代價(jià)函數(shù)中普遍存在的局部最小是訓(xùn)練困難的主要來(lái)源。
BP算法存在的問(wèn)題:
(1)梯度越來(lái)越稀疏:從頂層越往下,誤差校正信號(hào)越來(lái)越?。?/span>
(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ò)程。
九、Deep Learning的常用模型或者方法
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)它的輸入而已。或者說(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è)線性分類(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í)利用線性代數(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)表示為一組基的線性組合,而且要求只需要較少的幾個(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ù),比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時(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)題。(詳細(xì)過(guò)程請(qǐng)參考:UFLDL Tutorial稀疏編碼)
比如在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過(guò)這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個(gè)basis組成的basis,然后給定一個(gè)test patch, 我們可以按照上面的式子通過(guò)basis的線性組合得到,而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推向最小值。EM算法可以見(jiàn)我的博客:“從最大似然到EM算法淺解”)。
訓(xùn)練過(guò)程就是一個(gè)重復(fù)迭代的過(guò)程,按上面所說(shuō),我們交替的更改a和Φ使得下面這個(gè)目標(biāo)函數(shù)最小。
每次迭代分兩步:
a)固定字典Φ[k],然后調(diào)整a[k],使得上式,即目標(biāo)函數(shù)最小(即解LASSO問(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)限制波爾曼茲?rùn)C(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 Boltzmann Machine (RBM)。
曼機(jī)下面我們來(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é)分析。也就是模型了。(訓(xùn)練模型得到可視層節(jié)點(diǎn)和隱層節(jié)點(diǎn)的權(quán)重值)
聯(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è)概率生成模型(generative model),與傳統(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ù)步驟叫做吉布斯采樣)(反復(fù)的重構(gòu),最后得到最理想的特征)。這些后退和前進(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á)。(訓(xùn)練的層數(shù)越多,越接近能量真實(shí)值)這個(gè)有意義的拓展,和無(wú)標(biāo)簽數(shù)據(jù)的使用,是任何一個(gè)深度學(xué)習(xí)應(yīng)用的決定性的因素。
在最高兩層,權(quán)值被連接到一起,這樣更低層的輸出將會(huì)提供一個(gè)參考的線索或者關(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)?span style="background-color:rgb(255,255,0)">DBNs的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á)到生成模型的變換不變性,而且可以容易得變換到高維圖像。(CDBNs考慮到像素之間的結(jié)構(gòu)信息) 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ò)程一樣。
9.5、Convolutional Neural Networks卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)的一種,已成為當(dāng)前語(yǔ)音分析和圖像識(shí)別領(lǐng)域的研究熱點(diǎn)。它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類(lèi)似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了權(quán)值的數(shù)量。該優(yōu)點(diǎn)在網(wǎng)絡(luò)的輸入是多維圖像時(shí)表現(xiàn)的更為明顯,使圖像可以直接作為網(wǎng)絡(luò)的輸入,避免了傳統(tǒng)識(shí)別算法中復(fù)雜的特征提取和數(shù)據(jù)重建過(guò)程。卷積網(wǎng)絡(luò)是為識(shí)別二維形狀而特殊設(shè)計(jì)的一個(gè)多層感知器,這種網(wǎng)絡(luò)結(jié)構(gòu)對(duì)平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。
CNNs是受早期的延時(shí)神經(jīng)網(wǎng)絡(luò)(TDNN)的影響。延時(shí)神經(jīng)網(wǎng)絡(luò)通過(guò)在時(shí)間維度上共享權(quán)值降低學(xué)習(xí)復(fù)雜度,適用于語(yǔ)音和時(shí)間序列信號(hào)的處理。
CNNs是第一個(gè)真正成功訓(xùn)練多層網(wǎng)絡(luò)結(jié)構(gòu)的學(xué)習(xí)算法。它利用空間關(guān)系減少需要學(xué)習(xí)的參數(shù)數(shù)目以提高一般前向BP算法的訓(xùn)練性能。CNNs作為一個(gè)深度學(xué)習(xí)架構(gòu)提出是為了最小化數(shù)據(jù)的預(yù)處理要求。在CNN中,圖像的一小部分(局部感受區(qū)域)作為層級(jí)結(jié)構(gòu)的最低層的輸入,信息再依次傳輸?shù)讲煌膶?,每層通過(guò)一個(gè)數(shù)字濾波器去獲得觀測(cè)數(shù)據(jù)的最顯著的特征。這個(gè)方法能夠獲取對(duì)平移、縮放和旋轉(zhuǎn)不變的觀測(cè)數(shù)據(jù)的顯著特征,因?yàn)閳D像的局部感受區(qū)域允許神經(jīng)元或者處理單元可以訪問(wèn)到最基礎(chǔ)的特征,例如定向邊緣或者角點(diǎn)。
1)卷積神經(jīng)網(wǎng)絡(luò)的歷史
1962年Hubel和Wiesel通過(guò)對(duì)貓視覺(jué)皮層細(xì)胞的研究,提出了感受野(receptive field)的概念,1984年日本學(xué)者Fukushima基于感受野概念提出的神經(jīng)認(rèn)知機(jī)(neocognitron)可以看作是卷積神經(jīng)網(wǎng)絡(luò)的第一個(gè)實(shí)現(xiàn)網(wǎng)絡(luò),也是感受野概念在人工神經(jīng)網(wǎng)絡(luò)領(lǐng)域的首次應(yīng)用。神經(jīng)認(rèn)知機(jī)將一個(gè)視覺(jué)模式分解成許多子模式(特征),然后進(jìn)入分層遞階式相連的特征平面進(jìn)行處理,它試圖將視覺(jué)系統(tǒng)模型化,使其能夠在即使物體有位移或輕微變形的時(shí)候,也能完成識(shí)別。
通常神經(jīng)認(rèn)知機(jī)包含兩類(lèi)神經(jīng)元,即承擔(dān)特征抽取的S-元和抗變形的C-元。S-元中涉及兩個(gè)重要參數(shù),即感受野與閾值參數(shù),前者確定輸入連接的數(shù)目,后者則控制對(duì)特征子模式的反應(yīng)程度。許多學(xué)者一直致力于提高神經(jīng)認(rèn)知機(jī)的性能的研究:在傳統(tǒng)的神經(jīng)認(rèn)知機(jī)中,每個(gè)S-元的感光區(qū)中由C-元帶來(lái)的視覺(jué)模糊量呈正態(tài)分布。如果感光區(qū)的邊緣所產(chǎn)生的模糊效果要比中央來(lái)得大,S-元將會(huì)接受這種非正態(tài)模糊所導(dǎo)致的更大的變形容忍性。我們希望得到的是,訓(xùn)練模式與變形刺激模式在感受野的邊緣與其中心所產(chǎn)生的效果之間的差異變得越來(lái)越大。為了有效地形成這種非正態(tài)模糊,F(xiàn)ukushima提出了帶雙C-元層的改進(jìn)型神經(jīng)認(rèn)知機(jī)。
Van Ooyen和Niehuis為提高神經(jīng)認(rèn)知機(jī)的區(qū)別能力引入了一個(gè)新的參數(shù)。事實(shí)上,該參數(shù)作為一種抑制信號(hào),抑制了神經(jīng)元對(duì)重復(fù)激勵(lì)特征的激勵(lì)。多數(shù)神經(jīng)網(wǎng)絡(luò)在權(quán)值中記憶訓(xùn)練信息。根據(jù)Hebb學(xué)習(xí)規(guī)則,某種特征訓(xùn)練的次數(shù)越多,在以后的識(shí)別過(guò)程中就越容易被檢測(cè)。也有學(xué)者將進(jìn)化計(jì)算理論與神經(jīng)認(rèn)知機(jī)結(jié)合,通過(guò)減弱對(duì)重復(fù)性激勵(lì)特征的訓(xùn)練學(xué)習(xí),而使得網(wǎng)絡(luò)注意那些不同的特征以助于提高區(qū)分能力。上述都是神經(jīng)認(rèn)知機(jī)的發(fā)展過(guò)程,而卷積神經(jīng)網(wǎng)絡(luò)可看作是神經(jīng)認(rèn)知機(jī)的推廣形式,神經(jīng)認(rèn)知機(jī)是卷積神經(jīng)網(wǎng)絡(luò)的一種特例。
2)卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)多層的神經(jīng)網(wǎng)絡(luò),每層由多個(gè)二維平面組成,而每個(gè)平面由多個(gè)獨(dú)立神經(jīng)元組成。
圖:卷積神經(jīng)網(wǎng)絡(luò)的概念示范:輸入圖像通過(guò)和三個(gè)可訓(xùn)練的濾波器和可加偏置進(jìn)行卷積,濾波過(guò)程如圖一,卷積后在C1層產(chǎn)生三個(gè)特征映射圖,然后特征映射圖中每組的四個(gè)像素再進(jìn)行求和,加權(quán)值,加偏置,通過(guò)一個(gè)Sigmoid函數(shù)得到三個(gè)S2層的特征映射圖。這些映射圖再進(jìn)過(guò)濾波得到C3層。這個(gè)層級(jí)結(jié)構(gòu)再和S2一樣產(chǎn)生S4。最終,這些像素值被光柵化,并連接成一個(gè)向量輸入到傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),得到輸出。
一般地,C層為特征提取層,每個(gè)神經(jīng)元的輸入與前一層的局部感受野相連,并提取該局部的特征,一旦該局部特征被提取后,它與其他特征間的位置關(guān)系也隨之確定下來(lái);S層是特征映射層,網(wǎng)絡(luò)的每個(gè)計(jì)算層由多個(gè)特征映射組成,每個(gè)特征映射為一個(gè)平面,平面上所有神經(jīng)元的權(quán)值相等。特征映射結(jié)構(gòu)采用影響函數(shù)核小的sigmoid函數(shù)作為卷積網(wǎng)絡(luò)的激活函數(shù),使得特征映射具有位移不變性。
此外,由于一個(gè)映射面上的神經(jīng)元共享權(quán)值,因而減少了網(wǎng)絡(luò)自由參數(shù)的個(gè)數(shù),降低了網(wǎng)絡(luò)參數(shù)選擇的復(fù)雜度。卷積神經(jīng)網(wǎng)絡(luò)中的每一個(gè)特征提取層(C-層)都緊跟著一個(gè)用來(lái)求局部平均與二次提取的計(jì)算層(S-層),這種特有的兩次特征提取結(jié)構(gòu)使網(wǎng)絡(luò)在識(shí)別時(shí)對(duì)輸入樣本有較高的畸變?nèi)萑棠芰?/span>。
3)關(guān)于參數(shù)減少與權(quán)值共享
上面聊到,好像CNN一個(gè)牛逼的地方就在于通過(guò)感受野和權(quán)值共享減少了神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的參數(shù)的個(gè)數(shù)。那究竟是啥的呢?
下圖左:如果我們有1000x1000像素的圖像,有1百萬(wàn)個(gè)隱層神經(jīng)元,那么他們?nèi)B接的話(每個(gè)隱層神經(jīng)元都連接圖像的每一個(gè)像素點(diǎn)),就有1000x1000x1000000=10^12個(gè)連接,也就是10^12個(gè)權(quán)值參數(shù)。然而圖像的空間聯(lián)系是局部的,就像人是通過(guò)一個(gè)局部的感受野去感受外界圖像一樣,每一個(gè)神經(jīng)元都不需要對(duì)全局圖像做感受,每個(gè)神經(jīng)元只感受局部的圖像區(qū)域,然后在更高層,將這些感受不同局部的神經(jīng)元綜合起來(lái)就可以得到全局的信息了。這樣,我們就可以減少連接的數(shù)目,也就是減少神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的權(quán)值參數(shù)的個(gè)數(shù)了。如下圖右:假如局部感受野是10x10,隱層每個(gè)感受野只需要和這10x10的局部圖像相連接,所以1百萬(wàn)個(gè)隱層神經(jīng)元就只有一億個(gè)連接,即10^8個(gè)參數(shù)。比原來(lái)減少了四個(gè)0(數(shù)量級(jí)),這樣訓(xùn)練起來(lái)就沒(méi)那么費(fèi)力了,但還是感覺(jué)很多的啊,那還有啥辦法沒(méi)?
我們知道,隱含層的每一個(gè)神經(jīng)元都連接10x10個(gè)圖像區(qū)域,也就是說(shuō)每一個(gè)神經(jīng)元存在10x10=100個(gè)連接權(quán)值參數(shù)。那如果我們每個(gè)神經(jīng)元這100個(gè)參數(shù)是相同的呢?也就是說(shuō)每個(gè)神經(jīng)元用的是同一個(gè)卷積核去卷積圖像。這樣我們就只有多少個(gè)參數(shù)??只有100個(gè)參數(shù)?。。?!親!不管你隱層的神經(jīng)元個(gè)數(shù)有多少,兩層間的連接只有100個(gè)參數(shù)??!親!這就是權(quán)值共享??!親!這就是卷積神經(jīng)網(wǎng)絡(luò)的主打賣(mài)點(diǎn)??!親?。ㄓ悬c(diǎn)煩了,呵呵)也許你會(huì)問(wèn),這樣做靠譜嗎?為什么可行呢?這個(gè)……共同學(xué)習(xí)。
好了,你就會(huì)想,這樣提取特征也忒不靠譜吧,這樣你只提取了一種特征啊?對(duì)了,真聰明,我們需要提取多種特征對(duì)不?假如一種濾波器,也就是一種卷積核就是提出圖像的一種特征,例如某個(gè)方向的邊緣。那么我們需要提取不同的特征,怎么辦,加多幾種濾波器不就行了嗎?對(duì)了。所以假設(shè)我們加到100種濾波器,每種濾波器的參數(shù)不一樣,表示它提出輸入圖像的不同特征,例如不同的邊緣。這樣每種濾波器去卷積圖像就得到對(duì)圖像的不同特征的放映,我們稱(chēng)之為Feature Map。所以100種卷積核就有100個(gè)Feature Map。這100個(gè)Feature Map就組成了一層神經(jīng)元。到這個(gè)時(shí)候明了了吧。我們這一層有多少個(gè)參數(shù)了?100種卷積核x每種卷積核共享100個(gè)參數(shù)=100x100=10K,也就是1萬(wàn)個(gè)參數(shù)。才1萬(wàn)個(gè)參數(shù)??!親!(又來(lái)了,受不了了!)見(jiàn)下圖右:不同的顏色表達(dá)不同的濾波器。
嘿喲,遺漏一個(gè)問(wèn)題了。剛才說(shuō)隱層的參數(shù)個(gè)數(shù)和隱層的神經(jīng)元個(gè)數(shù)無(wú)關(guān),只和濾波器的大小和濾波器種類(lèi)的多少有關(guān)。那么隱層的神經(jīng)元個(gè)數(shù)怎么確定呢?它和原圖像,也就是輸入的大?。ㄉ窠?jīng)元個(gè)數(shù))、濾波器的大小和濾波器在圖像中的滑動(dòng)步長(zhǎng)都有關(guān)!例如,我的圖像是1000x1000像素,而濾波器大小是10x10,假設(shè)濾波器沒(méi)有重疊,也就是步長(zhǎng)為10,這樣隱層的神經(jīng)元個(gè)數(shù)就是(1000x1000 )/ (10x10)=100x100個(gè)神經(jīng)元了,假設(shè)步長(zhǎng)是8,也就是卷積核會(huì)重疊兩個(gè)像素,那么……我就不算了,思想懂了就好。注意了,這只是一種濾波器,也就是一個(gè)Feature Map的神經(jīng)元個(gè)數(shù)哦,如果100個(gè)Feature Map就是100倍了。由此可見(jiàn),圖像越大,神經(jīng)元個(gè)數(shù)和需要訓(xùn)練的權(quán)值參數(shù)個(gè)數(shù)的貧富差距就越大。
需要注意的一點(diǎn)是,上面的討論都沒(méi)有考慮每個(gè)神經(jīng)元的偏置部分。所以權(quán)值個(gè)數(shù)需要加1 。這個(gè)也是同一種濾波器共享的。
總之,卷積網(wǎng)絡(luò)的核心思想是將:局部感受野、權(quán)值共享(或者權(quán)值復(fù)制)以及時(shí)間或空間亞采樣這三種結(jié)構(gòu)思想結(jié)合起來(lái)獲得了某種程度的位移、尺度、形變不變性。
4)一個(gè)典型的例子說(shuō)明
一種典型的用來(lái)識(shí)別數(shù)字的卷積網(wǎng)絡(luò)是LeNet-5(效果和paper等見(jiàn)這)。當(dāng)年美國(guó)大多數(shù)銀行就是用它來(lái)識(shí)別支票上面的手寫(xiě)數(shù)字的。能夠達(dá)到這種商用的地步,它的準(zhǔn)確性可想而知。畢竟目前學(xué)術(shù)界和工業(yè)界的結(jié)合是最受爭(zhēng)議的。
那下面咱們也用這個(gè)例子來(lái)說(shuō)明下。
LeNet-5共有7層,不包含輸入,每層都包含可訓(xùn)練參數(shù)(連接權(quán)重)。輸入圖像為32*32大小。這要比Mnist數(shù)據(jù)庫(kù)(一個(gè)公認(rèn)的手寫(xiě)數(shù)據(jù)庫(kù))中最大的字母還大。這樣做的原因是希望潛在的明顯特征如筆畫(huà)斷電或角點(diǎn)能夠出現(xiàn)在最高層特征監(jiān)測(cè)子感受野的中心。
我們先要明確一點(diǎn):每個(gè)層有多個(gè)Feature Map,每個(gè)Feature Map通過(guò)一種卷積濾波器提取輸入的一種特征,然后每個(gè)Feature Map有多個(gè)神經(jīng)元。
C1層是一個(gè)卷積層(為什么是卷積?卷積運(yùn)算一個(gè)重要的特點(diǎn)就是,通過(guò)卷積運(yùn)算,可以使原信號(hào)特征增強(qiáng),并且降低噪音),由6個(gè)特征圖Feature Map構(gòu)成。特征圖中每個(gè)神經(jīng)元與輸入中5*5的鄰域相連。特征圖的大小為28*28,這樣能防止輸入的連接掉到邊界之外(是為了BP反饋時(shí)的計(jì)算,不致梯度損失,個(gè)人見(jiàn)解)。C1有156個(gè)可訓(xùn)練參數(shù)(每個(gè)濾波器5*5=25個(gè)unit參數(shù)和一個(gè)bias參數(shù),一共6個(gè)濾波器,共(5*5+1)*6=156個(gè)參數(shù)),共156*(28*28)=122,304個(gè)連接。
S2層是一個(gè)下采樣層(為什么是下采樣?利用圖像局部相關(guān)性的原理,對(duì)圖像進(jìn)行子抽樣,可以減少數(shù)據(jù)處理量同時(shí)保留有用信息),有6個(gè)14*14的特征圖。特征圖中的每個(gè)單元與C1中相對(duì)應(yīng)特征圖的2*2鄰域相連接。S2層每個(gè)單元的4個(gè)輸入相加,乘以一個(gè)可訓(xùn)練參數(shù),再加上一個(gè)可訓(xùn)練偏置(相當(dāng)于兩個(gè)可訓(xùn)練參數(shù))。結(jié)果通過(guò)sigmoid函數(shù)計(jì)算??捎?xùn)練系數(shù)和偏置控制著sigmoid函數(shù)的非線性程度。如果系數(shù)比較小,那么運(yùn)算近似于線性運(yùn)算,亞采樣相當(dāng)于模糊圖像。如果系數(shù)比較大,根據(jù)偏置的大小亞采樣可以被看成是有噪聲的“或”運(yùn)算或者有噪聲的“與”運(yùn)算。每個(gè)單元的2*2感受野并不重疊,因此S2中每個(gè)特征圖的大小是C1中特征圖大小的1/4(行和列各1/2)。S2層有12個(gè)可訓(xùn)練參數(shù)和5880個(gè)連接。12=2*6
圖:卷積和子采樣過(guò)程:卷積過(guò)程包括:用一個(gè)可訓(xùn)練的濾波器fx去卷積一個(gè)輸入的圖像(第一階段是輸入的圖像,后面的階段就是卷積特征map了),然后加一個(gè)偏置bx,得到卷積層Cx。子采樣過(guò)程包括:每鄰域四個(gè)像素求和變?yōu)橐粋€(gè)像素,然后通過(guò)標(biāo)量Wx+1加權(quán),再增加偏置bx+1,然后通過(guò)一個(gè)sigmoid激活函數(shù),產(chǎn)生一個(gè)大概縮小四倍的特征映射圖Sx+1。
所以從一個(gè)平面到下一個(gè)平面的映射可以看作是作卷積運(yùn)算,S-層可看作是模糊濾波器,起到二次特征提取的作用。隱層與隱層之間空間分辨率遞減,而每層所含的平面數(shù)遞增,這樣可用于檢測(cè)更多的特征信息。
C3層也是一個(gè)卷積層,它同樣通過(guò)5x5的卷積核去卷積層S2(14*14),然后得到的特征map就只有10x10個(gè)神經(jīng)元,但是它有16種不同的卷積核,所以就存在16個(gè)特征map了。這里需要注意的一點(diǎn)是:C3中的每個(gè)特征map是連接到S2中的所有6個(gè)或者幾個(gè)特征map的,表示本層的特征map是上一層提取到的特征map的不同組合(這個(gè)做法也并不是唯一的)。(看到?jīng)]有,這里是組合,就像之前聊到的人的視覺(jué)系統(tǒng)一樣,底層的結(jié)構(gòu)構(gòu)成上層更抽象的結(jié)構(gòu),例如邊緣構(gòu)成形狀或者目標(biāo)的部分)。
剛才說(shuō)C3中每個(gè)特征圖由S2中所有6個(gè)或者幾個(gè)特征map組合而成。為什么不把S2中的每個(gè)特征圖連接到每個(gè)C3的特征圖呢?原因有2點(diǎn)。第一,不完全的連接機(jī)制將連接的數(shù)量保持在合理的范圍內(nèi)。第二,也是最重要的,其破壞了網(wǎng)絡(luò)的對(duì)稱(chēng)性。由于不同的特征圖有不同的輸入,所以迫使他們抽取不同的特征(希望是互補(bǔ)的)。
例如,存在的一個(gè)方式是:C3的前6個(gè)特征圖以S2中3個(gè)相鄰的特征圖子集為輸入。接下來(lái)6個(gè)特征圖以S2中4個(gè)相鄰特征圖子集為輸入。然后的3個(gè)以不相鄰的4個(gè)特征圖子集為輸入。最后一個(gè)將S2中所有特征圖為輸入。這樣C3層有1516個(gè)可訓(xùn)練參數(shù)和151600個(gè)連接。 (151600=1516*100)
S4層是一個(gè)下采樣層,由16個(gè)5*5大小的特征圖構(gòu)成。特征圖中的每個(gè)單元與C3中相應(yīng)特征圖的2*2鄰域相連接,跟C1和S2之間的連接一樣。S4層有32個(gè)可訓(xùn)練參數(shù)(每個(gè)特征圖1個(gè)因子和一個(gè)偏置)和2000個(gè)連接。 32=16*2
C5層是一個(gè)卷積層,有120個(gè)特征圖。每個(gè)單元與S4層的全部16個(gè)單元的5*5鄰域相連。由于S4層特征圖的大小也為5*5(同濾波器一樣),故C5特征圖的大小為1*1:這構(gòu)成了S4和C5之間的全連接。之所以仍將C5標(biāo)示為卷積層而非全相聯(lián)層,是因?yàn)槿绻鸏eNet-5的輸入變大,而其他的保持不變,那么此時(shí)特征圖的維數(shù)就會(huì)比1*1大。C5層有48120個(gè)可訓(xùn)練連接。[(16*25+1)*120=48120]
F6層有84個(gè)單元(之所以選這個(gè)數(shù)字的原因來(lái)自于輸出層的設(shè)計(jì)),與C5層全相連。有10164個(gè)可訓(xùn)練參數(shù)。如同經(jīng)典神經(jīng)網(wǎng)絡(luò),F(xiàn)6層計(jì)算輸入向量和權(quán)重向量之間的點(diǎn)積,再加上一個(gè)偏置。然后將其傳遞給sigmoid函數(shù)產(chǎn)生單元i的一個(gè)狀態(tài)。[ 84*(120+1)=10184]
最后,輸出層由歐式徑向基函數(shù)(Euclidean Radial Basis Function)單元組成,每類(lèi)一個(gè)單元,每個(gè)有84個(gè)輸入。換句話說(shuō),每個(gè)輸出RBF單元計(jì)算輸入向量和參數(shù)向量之間的歐式距離。輸入離參數(shù)向量越遠(yuǎn),RBF輸出的越大。一個(gè)RBF輸出可以被理解為衡量輸入模式和與RBF相關(guān)聯(lián)類(lèi)的一個(gè)模型的匹配程度的懲罰項(xiàng)。用概率術(shù)語(yǔ)來(lái)說(shuō),RBF輸出可以被理解為F6層配置空間的高斯分布的負(fù)log-likelihood。給定一個(gè)輸入模式,損失函數(shù)應(yīng)能使得F6的配置與RBF參數(shù)向量(即模式的期望分類(lèi))足夠接近。這些單元的參數(shù)是人工選取并保持固定的(至少初始時(shí)候如此)。這些參數(shù)向量的成分被設(shè)為-1或1。雖然這些參數(shù)可以以-1和1等概率的方式任選,或者構(gòu)成一個(gè)糾錯(cuò)碼,但是被設(shè)計(jì)成一個(gè)相應(yīng)字符類(lèi)的7*12大?。?4)的格式化圖片。這種表示對(duì)識(shí)別單獨(dú)的數(shù)字不是很有用,但是對(duì)識(shí)別可打印ASCII集中的字符串很有用。
使用這種分布編碼而非更常用的“1 of N”編碼用于產(chǎn)生輸出的另一個(gè)原因是,當(dāng)類(lèi)別比較大的時(shí)候,非分布編碼的效果比較差。原因是大多數(shù)時(shí)間非分布編碼的輸出必須為0。這使得用sigmoid單元很難實(shí)現(xiàn)。另一個(gè)原因是分類(lèi)器不僅用于識(shí)別字母,也用于拒絕非字母。使用分布編碼的RBF更適合該目標(biāo)。因?yàn)榕csigmoid不同,他們?cè)谳斎肟臻g的較好限制的區(qū)域內(nèi)興奮,而非典型模式更容易落到外邊。
RBF參數(shù)向量起著F6層目標(biāo)向量的角色。需要指出這些向量的成分是+1或-1,這正好在F6 sigmoid的范圍內(nèi),因此可以防止sigmoid函數(shù)飽和。實(shí)際上,+1和-1是sigmoid函數(shù)的最大彎曲的點(diǎn)處。這使得F6單元運(yùn)行在最大非線性范圍內(nèi)。必須避免sigmoid函數(shù)的飽和,因?yàn)檫@將會(huì)導(dǎo)致?lián)p失函數(shù)較慢的收斂和病態(tài)問(wèn)題。
5)訓(xùn)練過(guò)程
神經(jīng)網(wǎng)絡(luò)用于模式識(shí)別的主流是有指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò),無(wú)指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò)更多的是用于聚類(lèi)分析。對(duì)于有指導(dǎo)的模式識(shí)別,由于任一樣本的類(lèi)別是已知的,樣本在空間的分布不再是依據(jù)其自然分布傾向來(lái)劃分,而是要根據(jù)同類(lèi)樣本在空間的分布及不同類(lèi)樣本之間的分離程度找一種適當(dāng)?shù)目臻g劃分方法,或者找到一個(gè)分類(lèi)邊界,使得不同類(lèi)樣本分別位于不同的區(qū)域內(nèi)。這就需要一個(gè)長(zhǎng)時(shí)間且復(fù)雜的學(xué)習(xí)過(guò)程,不斷調(diào)整用以劃分樣本空間的分類(lèi)邊界的位置,使盡可能少的樣本被劃分到非同類(lèi)區(qū)域中。
卷積網(wǎng)絡(luò)在本質(zhì)上是一種輸入到輸出的映射,它能夠?qū)W習(xí)大量的輸入與輸出之間的映射關(guān)系,而不需要任何輸入和輸出之間的精確的數(shù)學(xué)表達(dá)式,只要用已知的模式對(duì)卷積網(wǎng)絡(luò)加以訓(xùn)練,網(wǎng)絡(luò)就具有輸入輸出對(duì)之間的映射能力。卷積網(wǎng)絡(luò)執(zhí)行的是有導(dǎo)師訓(xùn)練,所以其樣本集是由形如:(輸入向量,理想輸出向量)的向量對(duì)構(gòu)成的。所有這些向量對(duì),都應(yīng)該是來(lái)源于網(wǎng)絡(luò)即將模擬的系統(tǒng)的實(shí)際“運(yùn)行”結(jié)果。它們可以是從實(shí)際運(yùn)行系統(tǒng)中采集來(lái)的。在開(kāi)始訓(xùn)練前,所有的權(quán)都應(yīng)該用一些不同的小隨機(jī)數(shù)進(jìn)行初始化?!靶‰S機(jī)數(shù)”用來(lái)保證網(wǎng)絡(luò)不會(huì)因權(quán)值過(guò)大而進(jìn)入飽和狀態(tài),從而導(dǎo)致訓(xùn)練失敗;“不同”用來(lái)保證網(wǎng)絡(luò)可以正常地學(xué)習(xí)。實(shí)際上,如果用相同的數(shù)去初始化權(quán)矩陣,則網(wǎng)絡(luò)無(wú)能力學(xué)習(xí)。
訓(xùn)練算法與傳統(tǒng)的BP算法差不多。主要包括4步,這4步被分為兩個(gè)階段:
第一階段,向前傳播階段:
a)從樣本集中取一個(gè)樣本(X,Yp),將X輸入網(wǎng)絡(luò);
b)計(jì)算相應(yīng)的實(shí)際輸出Op。
在此階段,信息從輸入層經(jīng)過(guò)逐級(jí)的變換,傳送到輸出層。這個(gè)過(guò)程也是網(wǎng)絡(luò)在完成訓(xùn)練后正常運(yùn)行時(shí)執(zhí)行的過(guò)程。在此過(guò)程中,網(wǎng)絡(luò)執(zhí)行的是計(jì)算(實(shí)際上就是輸入與每層的權(quán)值矩陣相點(diǎn)乘,得到最后的輸出結(jié)果):
Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二階段,向后傳播階段
a)算實(shí)際輸出Op與相應(yīng)的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調(diào)整權(quán)矩陣。
6)卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn)
卷積神經(jīng)網(wǎng)絡(luò)CNN主要用來(lái)識(shí)別位移、縮放及其他形式扭曲不變性的二維圖形。由于CNN的特征檢測(cè)層通過(guò)訓(xùn)練數(shù)據(jù)進(jìn)行學(xué)習(xí),所以在使用CNN時(shí),避免了顯式的特征抽取,而隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí);再者由于同一特征映射面上的神經(jīng)元權(quán)值相同,所以網(wǎng)絡(luò)可以并行學(xué)習(xí),這也是卷積網(wǎng)絡(luò)相對(duì)于神經(jīng)元彼此相連網(wǎng)絡(luò)的一大優(yōu)勢(shì)。卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在語(yǔ)音識(shí)別和圖像處理方面有著獨(dú)特的優(yōu)越性,其布局更接近于實(shí)際的生物神經(jīng)網(wǎng)絡(luò),權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡(luò)這一特點(diǎn)避免了特征提取和分類(lèi)過(guò)程中數(shù)據(jù)重建的復(fù)雜度。
流的分類(lèi)方式幾乎都是基于統(tǒng)計(jì)特征的,這就意味著在進(jìn)行分辨前必須提取某些特征。然而,顯式的特征提取并不容易,在一些應(yīng)用問(wèn)題中也并非總是可靠的。卷積神經(jīng)網(wǎng)絡(luò),它避免了顯式的特征取樣,隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí)。這使得卷積神經(jīng)網(wǎng)絡(luò)明顯有別于其他基于神經(jīng)網(wǎng)絡(luò)的分類(lèi)器,通過(guò)結(jié)構(gòu)重組和減少權(quán)值將特征提取功能融合進(jìn)多層感知器。它可以直接處理灰度圖片,能夠直接用于處理基于圖像的分類(lèi)。
卷積網(wǎng)絡(luò)較一般神經(jīng)網(wǎng)絡(luò)在圖像處理方面有如下優(yōu)點(diǎn): a)輸入圖像和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)能很好的吻合;b)特征提取和模式分類(lèi)同時(shí)進(jìn)行,并同時(shí)在訓(xùn)練中產(chǎn)生;c)權(quán)重共享可以減少網(wǎng)絡(luò)的訓(xùn)練參數(shù),使神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)變得更簡(jiǎn)單,適應(yīng)性更強(qiáng)。
7)小結(jié)
CNNs中這種層間聯(lián)系和空域信息的緊密關(guān)系,使其適于圖像處理和理解。而且,其在自動(dòng)提取圖像的顯著特征方面還表現(xiàn)出了比較優(yōu)的性能。在一些例子當(dāng)中,Gabor濾波器已經(jīng)被使用在一個(gè)初始化預(yù)處理的步驟中,以達(dá)到模擬人類(lèi)視覺(jué)系統(tǒng)對(duì)視覺(jué)刺激的響應(yīng)。在目前大部分的工作中,研究者將CNNs應(yīng)用到了多種機(jī)器學(xué)習(xí)問(wèn)題中,包括人臉識(shí)別,文檔分析和語(yǔ)言檢測(cè)等。為了達(dá)到尋找視頻中幀與幀之間的相干性的目的,目前CNNs通過(guò)一個(gè)時(shí)間相干性去訓(xùn)練,但這個(gè)不是CNNs特有的。
呵呵,這部分講得太啰嗦了,又沒(méi)講到點(diǎn)上。沒(méi)辦法了,先這樣的,這樣這個(gè)過(guò)程我還沒(méi)有走過(guò),所以自己水平有限啊,望各位明察。需要后面再改了,呵呵。
十、總結(jié)與展望
1)Deep learning總結(jié)
深度學(xué)習(xí)是關(guān)于自動(dòng)學(xué)習(xí)要建模的數(shù)據(jù)的潛在(隱含)分布的多層(復(fù)雜)表達(dá)的算法。換句話來(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á)的線性或者非線性組合,然后重復(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)。
十一、參考文獻(xiàn)和Deep Learning學(xué)習(xí)資源(持續(xù)更新……)
先是機(jī)器學(xué)習(xí)領(lǐng)域大牛的微博:@余凱_西二旗民工;@老師木;@梁斌penny;@張棟_機(jī)器學(xué)習(xí);@鄧侃;@大數(shù)據(jù)皮東;@djvu9……
(1)Deep Learning
(2)Deep Learning Methods for Vision
http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/
(3)Neural Network for Recognition of Handwritten Digits[Project]
http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi
(4)Training a deep autoencoder or a classifier on MNIST digits
http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html
(5)Ersatz:deep neural networks in the cloud
(6)Deep Learning
http://www.cs.nyu.edu/~yann/research/deep/
(7)Invited talk "A Tutorial on Deep Learning" by Dr. Kai Yu (余凱)
http://vipl.ict.ac.cn/News/academic-report-tutorial-deep-learning-dr-kai-yu
(8)CNN - Convolutional neural network class
http://www.mathworks.cn/matlabcentral/fileexchange/24291
(9)Yann LeCun's Publications
http://yann.lecun.com/exdb/publis/index.html#lecun-98
(10) LeNet-5, convolutional neural networks
http://yann.lecun.com/exdb/lenet/index.html
(11) Deep Learning 大牛Geoffrey E. Hinton's HomePage
http://www.cs.toronto.edu/~hinton/
(12)Sparse coding simulation software[Project]
http://redwood.berkeley.edu/bruno/sparsenet/
(13)Andrew Ng's homepage
http://robotics.stanford.edu/~ang/
(14)stanford deep learning tutorial
http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
(15)「深度神經(jīng)網(wǎng)絡(luò)」(deep neural network)具體是怎樣工作的
http://www.zhihu.com/question/19833708?group_id=15019075#1657279
(16)A shallow understanding on deep learning
http://blog.sina.com.cn/s/blog_6ae183910101dw2z.html
(17)Bengio's Learning Deep Architectures for AI
http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf
(18)andrew ng's talk video:
http://techtalks.tv/talks/machine-learning-and-ai-via-brain-simulations/57862/
(19)cvpr 2012 tutorial:
http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf
(20)Andrew ng清華報(bào)告聽(tīng)后感
http://blog.sina.com.cn/s/blog_593af2a70101bqyo.html
(21)Kai Yu:CVPR12 Tutorial on Deep Learning Sparse Coding
(22)Honglak Lee:Deep Learning Methods for Vision
(23)Andrew Ng :Machine Learning and AI via Brain simulations
(24)Deep Learning 【2,3】
http://blog.sina.com.cn/s/blog_46d0a3930101gs5h.html
(25)deep learning這件小事……
http://blog.sina.com.cn/s/blog_67fcf49e0101etab.html
(26)Yoshua Bengio, U. Montreal:Learning Deep Architectures
(27)Kai Yu:A Tutorial on Deep Learning
(28)Marc'Aurelio Ranzato:NEURAL NETS FOR VISION
(29)Unsupervised feature learning and deep learning
http://blog.csdn.net/abcjennifer/article/details/7804962
(30)機(jī)器學(xué)習(xí)前沿?zé)狳c(diǎn)–Deep Learning
http://elevencitys.com/?p=1854
(31)機(jī)器學(xué)習(xí)——深度學(xué)習(xí)(Deep Learning)
http://blog.csdn.net/abcjennifer/article/details/7826917
(32)卷積神經(jīng)網(wǎng)絡(luò)
http://wenku.baidu.com/view/cd16fb8302d276a200292e22.html
(33)淺談Deep Learning的基本思想和方法
http://blog.csdn.net/xianlingmao/article/details/8478562
(34)深度神經(jīng)網(wǎng)絡(luò)
http://blog.csdn.net/txdb/article/details/6766373
(35)Google的貓臉識(shí)別:人工智能的新突破
http://www.36kr.com/p/122132.html
(36)余凱,深度學(xué)習(xí)-機(jī)器學(xué)習(xí)的新浪潮,Technical News程序天下事
http://blog.csdn.net/datoubo/article/details/8577366
(37)Geoffrey Hinton:UCLTutorial on: Deep Belief Nets
(38)Learning Deep Boltzmann Machines
http://web.mit.edu/~rsalakhu/www/DBM.html
(39)Efficient Sparse Coding Algorithm
http://blog.sina.com.cn/s/blog_62af19190100gux1.html
(40)Itamar Arel, Derek C. Rose, and Thomas P. Karnowski: Deep Machine Learning—A New Frontier in Artificial Intelligence Research
(41)Francis Quintal Lauzon:An introduction to deep learning
(42)Tutorial on Deep Learning and Applications
(43)Boltzmann神經(jīng)網(wǎng)絡(luò)模型與學(xué)習(xí)算法
http://wenku.baidu.com/view/490dcf748e9951e79b892785.html
(44)Deep Learning 和 Knowledge Graph 引爆大數(shù)據(jù)革命
http://blog.sina.com.cn/s/blog_46d0a3930101fswl.html
聯(lián)系客服