淺層學(xué)習(xí)是機(jī)器學(xué)習(xí)的第一次浪潮
20世紀(jì)80年代末期,用于人工神經(jīng)網(wǎng)絡(luò)的反向傳播算法(也叫Back Propagation算法或者BP算法)的發(fā)明,給機(jī)器學(xué)習(xí)帶來了希望,
這種基于統(tǒng)計(jì)的機(jī)器學(xué)習(xí)方法比起過去基于人工規(guī)則的系統(tǒng),在很多方面顯出優(yōu)越性。這個(gè)時(shí)候的人工神經(jīng)網(wǎng)絡(luò),雖也被稱作多層感知機(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),或沒有隱層節(jié)點(diǎn)(如LR)。
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的第二次浪潮。
Geoffrey Hinton:1)多隱層的人工神經(jīng)網(wǎng)絡(luò)具有優(yōu)異的特征學(xué)習(xí)能力,學(xué)習(xí)得到的特征對(duì)數(shù)據(jù)有更本質(zhì)的刻畫,從而有利于可視化或分類;2)深度神經(jīng)網(wǎng)絡(luò)在訓(xùn)練上的難度,可以通過“逐層初始化”(layer-wise pre-training)來有效克服,在這篇文章中,逐層初始化是通過無監(jiān)督學(xué)習(xí)實(shí)現(xiàn)的。
Deep learning本身算是machine learning的一個(gè)分支,簡(jiǎn)單可以理解為neural network的發(fā)展。
而為了克服神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的問題,DL采用了與神經(jīng)網(wǎng)絡(luò)很不同的訓(xùn)練機(jī)制。傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,采用的是back propagation的方式進(jìn)行,簡(jiǎn)單來講就是采用迭代的算法來訓(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)椋绻捎胋ack propagation的機(jī)制,對(duì)于一個(gè)deep network(7層以上),殘差傳播到最前面的層已經(jīng)變得太小,出現(xiàn)所謂的gradient diffusion(梯度擴(kuò)散)。
BP算法存在的問題:
(1)梯度越來越稀疏:從頂層越往下,誤差校正信號(hào)越來越小;
(2)收斂到局部最小值:尤其是從遠(yuǎn)離最優(yōu)區(qū)域開始的時(shí)候(隨機(jī)值初始化會(huì)導(dǎo)致這種情況的發(fā)生);
(3)一般,我們只能用有標(biāo)簽的數(shù)據(jù)來訓(xùn)練:但大部分的數(shù)據(jù)是沒標(biāo)簽的,而大腦可以從沒有標(biāo)簽的的數(shù)據(jù)中學(xué)習(xí);
2006年,hinton提出了在非監(jiān)督數(shù)據(jù)上建立多層神經(jīng)網(wǎng)絡(luò)的一個(gè)有效方法,簡(jiǎn)單的說,分為兩步,一是每次訓(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)。
deep learning訓(xùn)練過程具體如下:
1)使用自下上升非監(jiān)督學(xué)習(xí)(就是從底層開始,一層一層的往頂層訓(xùn)練):
采用無標(biāo)定數(shù)據(jù)(有標(biāo)定數(shù)據(jù)也可)分層訓(xùn)練各層參數(shù),這一步可以看作是一個(gè)無監(jiān)督訓(xùn)練過程,是和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)區(qū)別最大的部分(這個(gè)過程可以看作是feature learning過程)
2)自頂向下的監(jiān)督學(xué)習(xí)(就是通過帶標(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)練過程;第一步類似神經(jīng)網(wǎng)絡(luò)的隨機(jī)初始化初值過程,由于DL的第一步不是隨機(jī)初始化,而是通過學(xué)習(xí)輸入數(shù)據(jù)的結(jié)構(gòu)得到的,因而這個(gè)初值更接近全局最優(yōu),從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功于第一步的feature learning過程。
Deep Learning Algorithm 的核心思想:
把learning hierarchy 看做一個(gè)network,則
①無監(jiān)督學(xué)習(xí)用于每一層網(wǎng)絡(luò)的pre-train;
②每次用無監(jiān)督學(xué)習(xí)只訓(xùn)練一層,將其訓(xùn)練結(jié)果作為其higher一層的輸入;
③用監(jiān)督學(xué)習(xí)去調(diào)整所有層