Deep Learning(深度学习)学习笔记整理系列三
Deep Learning(深度學(xué)習(xí))學(xué)習(xí)筆記整理系列
?
聲明:
1)該Deep Learning的學(xué)習(xí)系列是整理自網(wǎng)上很大牛和機(jī)器學(xué)習(xí)專家所無私奉獻(xiàn)的資料的。具體引用的資料請看參考文獻(xiàn)。具體的版本聲明也參考原文獻(xiàn)。
2)本文僅供學(xué)術(shù)交流,非商用。所以每一部分具體的參考資料并沒有詳細(xì)對應(yīng)。如果某部分不小心侵犯了大家的利益,還望海涵,并聯(lián)系博主刪除。
3)本人才疏學(xué)淺,整理總結(jié)的時(shí)候難免出錯(cuò),還望各位前輩不吝指正,謝謝。
4)閱讀本文需要機(jī)器學(xué)習(xí)、計(jì)算機(jī)視覺、神經(jīng)網(wǎng)絡(luò)等等基礎(chǔ)(如果沒有也沒關(guān)系了,沒有就看看,能不能看懂,呵呵)。
5)此屬于第一版本,若有錯(cuò)誤,還需繼續(xù)修正與增刪。還望大家多多指點(diǎn)。大家都共享一點(diǎn)點(diǎn),一起為祖國科研的推進(jìn)添磚加瓦(呵呵,好高尚的目標(biāo)啊)。
?
?
目錄:
一、概述
二、背景
三、人腦視覺機(jī)理
四、關(guān)于特征
?????? 4.1、特征表示的粒度
?????? 4.2、初級(淺層)特征表示
???????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)練過程
?????? 8.1、傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法
?????? 8.2、deep learning訓(xùn)練過程
九、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é)與展望
十一、參考文獻(xiàn)和Deep Learning學(xué)習(xí)資源
?
?
?
接上
?
?????? 好了,到了這一步,終于可以聊到Deep learning了。上面我們聊到為什么會(huì)有Deep learning(讓機(jī)器自動(dòng)學(xué)習(xí)良好的特征,而免去人工選取過程。還有參考人的分層視覺處理系統(tǒng)),我們得到一個(gè)結(jié)論就是Deep learning需要多層來獲得更抽象的特征表達(dá)。那么多少層才合適呢?用什么架構(gòu)來建模呢?怎么進(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)過這個(gè)系統(tǒng)變化之后沒有任何的信息損失(呵呵,大牛說,這是不可能的。信息論中有個(gè)“信息逐層丟失”的說法(信息處理不等式),設(shè)處理a信息得到b,再對b處理得到c,那么可以證明:a和c的互信息不會(huì)超過a和b的互信息。這表明信息處理不會(huì)增加信息,大部分處理會(huì)丟失信息。當(dāng)然了,如果丟掉的是沒用的信息那多好啊),保持了不變,這意味著輸入I經(jīng)過每一層Si都沒有任何的信息損失,即在任何一層Si,它都是原有信息(即輸入I)的另外一種表示。現(xiàn)在回到我們的主題Deep Learning,我們需要自動(dòng)地學(xué)習(xí)特征,假設(shè)我們有一堆輸入I(如一堆圖像或者文本),假設(shè)我們設(shè)計(jì)了一個(gè)系統(tǒng)S(有n層),我們通過調(diào)整系統(tǒng)中參數(shù),使得它的輸出仍然是輸入I,那么我們就可以自動(dòng)地獲取得到輸入I的一系列層次特征,即S1,…, Sn。
???????對于深度學(xué)習(xí)來說,其思想就是對堆疊多個(gè)層,也就是說這一層的輸出作為下一層的輸入。通過這種方式,就可以實(shí)現(xiàn)對輸入信息進(jìn)行分級表達(dá)了。
?????? 另外,前面是假設(shè)輸出嚴(yán)格地等于輸入,這個(gè)限制太嚴(yán)格,我們可以略微地放松這個(gè)限制,例如我們只要使得輸入與輸出的差別盡可能地小即可,這個(gè)放松會(huì)導(dǎo)致另外一類不同的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í)帶來了希望,掀起了基于統(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ī)律,從而對未知事件做預(yù)測。這種基于統(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)。這些模型無論是在理論分析還是應(yīng)用中都獲得了巨大的成功。相比之下,由于理論分析的難度大,訓(xùn)練方法又需要很多經(jīng)驗(yàn)和技巧,這個(gè)時(shí)期淺層人工神經(jīng)網(wǎng)絡(luò)反而相對沉寂。
????????深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的第二次浪潮。
??????? 2006年,加拿大多倫多大學(xué)教授、機(jī)器學(xué)習(xí)領(lǐng)域的泰斗Geoffrey Hinton和他的學(xué)生RuslanSalakhutdinov在《科學(xué)》上發(fā)表了一篇文章,開啟了深度學(xué)習(xí)在學(xué)術(shù)界和工業(yè)界的浪潮。這篇文章有兩個(gè)主要觀點(diǎn):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í)實(shí)現(xiàn)的。
??????? 當(dāng)前多數(shù)分類、回歸等學(xué)習(xí)方法為淺層結(jié)構(gòu)算法,其局限性在于有限樣本和計(jì)算單元情況下對復(fù)雜函數(shù)的表示能力有限,針對復(fù)雜分類問題其泛化能力受到一定制約。深度學(xué)習(xí)可通過學(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ù))
?
??????? 深度學(xué)習(xí)的實(shí)質(zhì),是通過構(gòu)建具有很多隱層的機(jī)器學(xué)習(xí)模型和海量的訓(xùn)練數(shù)據(jù),來學(xué)習(xí)更有用的特征,從而最終提升分類或預(yù)測的準(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í)的重要性,也就是說,通過逐層特征變換,將樣本在原空間的特征表示變換到一個(gè)新特征空間,從而使分類或預(yù)測更加容易。與人工規(guī)則構(gòu)造特征的方法相比,利用大數(shù)據(jù)來學(xué)習(xí)特征,更能夠刻畫數(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ī)制來解釋數(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的一個(gè)分支,簡單可以理解為neural network的發(fā)展。大約二三十年前,neural network曾經(jīng)是ML領(lǐng)域特別火熱的一個(gè)方向,但是后來確慢慢淡出了,原因包括以下幾個(gè)方面:
1)比較容易過擬合,參數(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)持了下來,并最終(和其它人一起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)之間相互無連接,每一層可以看作是一個(gè)logistic regression模型;這種分層結(jié)構(gòu),是比較接近人類大腦的結(jié)構(gòu)的。
?
??????? 而為了克服神經(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)行,簡單來講就是采用迭代的算法來訓(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)?#xff0c;如果采用back propagation的機(jī)制,對于一個(gè)deep network(7層以上),殘差傳播到最前面的層已經(jīng)變得太小,出現(xiàn)所謂的gradient diffusion(梯度擴(kuò)散)。這個(gè)問題我們接下來討論。
?
八、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ò)的典型算法,實(shí)際上對僅含幾層網(wǎng)絡(luò),該訓(xùn)練方法就已經(jīng)很不理想。深度結(jié)構(gòu)(涉及多個(gè)非線性處理單元層)非凸目標(biāo)代價(jià)函數(shù)中普遍存在的局部最小是訓(xùn)練困難的主要來源。
BP算法存在的問題:
(1)梯度越來越稀疏:從頂層越往下,誤差校正信號越來越小;
(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í);
?
8.2、deep learning訓(xùn)練過程
?????? 如果對所有層同時(shí)訓(xùn)練,時(shí)間復(fù)雜度會(huì)太高;如果每次訓(xùn)練一層,偏差就會(huì)逐層傳遞。這會(huì)面臨跟上面監(jiān)督學(xué)習(xí)中相反的問題,會(huì)嚴(yán)重欠擬合(因?yàn)樯疃染W(wǎng)絡(luò)的神經(jīng)元和參數(shù)太多了)。
?????? 2006年,hinton提出了在非監(jiān)督數(shù)據(jù)上建立多層神經(jīng)網(wǎng)絡(luò)的一個(gè)有效方法,簡單的說,分為兩步,一是每次訓(xùn)練一層網(wǎng)絡(luò),二是調(diào)優(yōu),使原始表示x向上生成的高級表示r和該高級表示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)知過程,通過外界的特征和向上的權(quán)重(認(rèn)知權(quán)重)產(chǎn)生每一層的抽象表示(結(jié)點(diǎn)狀態(tài)),并且使用梯度下降修改層間的下行權(quán)重(生成權(quán)重)。也就是“如果現(xiàn)實(shí)跟我想象的不一樣,改變我的權(quán)重使得我想象的東西就是這樣的”。
2)sleep階段:生成過程,通過頂層表示(醒時(shí)學(xué)得的概念)和向下權(quán)重,生成底層的狀態(tài),同時(shí)修改層間向上的權(quán)重。也就是“如果夢中的景象不是我腦中的相應(yīng)概念,改變我的認(rèn)知權(quán)重使得這種景象在我看來就是這個(gè)概念”。
?
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過程):
?????? 具體的,先用無標(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í)(就是通過帶標(biāo)簽的數(shù)據(jù)去訓(xùn)練,誤差自頂向下傳輸,對網(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過程。
轉(zhuǎn)載于:https://www.cnblogs.com/zhangyang520/p/7490092.html
總結(jié)
以上是生活随笔為你收集整理的Deep Learning(深度学习)学习笔记整理系列三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机械硬盘不死?!SSD固态盘遭专家批 理
- 下一篇: 深度学习中的正则化