原文地址:https://www.cnblogs.com/alexcai/p/5506806.html
本文的主要目的橘沥,是簡單介紹時下流行的深度學習算法的基礎知識避消,本人也看過許多其他教程,感覺其中大部分講的還是太過深奧甸怕,于是便有了寫一篇科普文的想法林艘。博主也是現(xiàn)學現(xiàn)賣,文中如有不當之處恶守,請各位指出,共同進步贡必。
本文的目標讀者是對機器學習和神經(jīng)網(wǎng)絡有一定了解的同學(包括:梯度下降兔港、神經(jīng)網(wǎng)絡、反向傳播算法等)仔拟,機器學習的相關知識強烈推薦吳恩達大神的機器學習課程
深度學習簡介
深度學習是指多層神經(jīng)網(wǎng)絡上運用各種機器學習算法解決圖像衫樊,文本等各種問題的算法集合。深度學習從大類上可以歸入神經(jīng)網(wǎng)絡,不過在具體實現(xiàn)上有許多變化科侈。深度學習的核心是特征學習载佳,旨在通過分層網(wǎng)絡獲取分層次的特征信息,從而解決以往需要人工設計特征的重要難題臀栈。深度學習是一個框架刚盈,包含多個重要算法:?
Convolutional Neural Networks(CNN)卷積神經(jīng)網(wǎng)絡
AutoEncoder自動編碼器
Sparse Coding稀疏編碼
Restricted Boltzmann Machine(RBM)限制波爾茲曼機
Deep Belief Networks(DBN)深信度網(wǎng)絡
Recurrent neural Network(RNN)多層反饋循環(huán)神經(jīng)網(wǎng)絡神經(jīng)網(wǎng)絡
對于不同問題(圖像,語音挂脑,文本),需要選用不同網(wǎng)絡模型才能達到更好效果欲侮。
此外崭闲,最近幾年增強學習(Reinforcement Learning)與深度學習的結合也創(chuàng)造了許多了不起的成果,AlphaGo就是其中之一威蕉。
人類視覺原理
深度學習的許多研究成果刁俭,離不開對大腦認知原理的研究,尤其是視覺原理的研究韧涨。
1981 年的諾貝爾醫(yī)學獎牍戚,頒發(fā)給了 David Hubel(出生于加拿大的美國神經(jīng)生物學家) 和TorstenWiesel,以及 Roger Sperry虑粥。前兩位的主要貢獻如孝,是“發(fā)現(xiàn)了視覺系統(tǒng)的信息處理”,可視皮層是分級的娩贷。
人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels)第晰,接著做初步處理(大腦皮層某些細胞發(fā)現(xiàn)邊緣和方向),然后抽象(大腦判定彬祖,眼前的物體的形狀茁瘦,是圓形的),然后進一步抽象(大腦進一步判定該物體是只氣球)储笑。下面是人腦進行人臉識別的一個示例:
對于不同的物體甜熔,人類視覺也是通過這樣逐層分級,來進行認知的:
我們可以看到突倍,在最底層特征基本上是類似的腔稀,就是各種邊緣,越往上羽历,越能提取出此類物體的一些特征(輪子烧颖、眼睛、軀干等)窄陡,到最上層炕淮,不同的高級特征最終組合成相應的圖像,從而能夠讓人類準確的區(qū)分不同的物體跳夭。
那么我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經(jīng)網(wǎng)絡祠乃,較低層的識別初級的圖像特征的妖,若干底層特征組成更上一層特征,最終通過多個層級的組合模狭,最終在頂層做出分類呢?答案是肯定的踩衩,這也是許多深度學習算法(包括CNN)的靈感來源嚼鹉。
卷積網(wǎng)絡介紹
卷積神經(jīng)網(wǎng)絡是一種多層神經(jīng)網(wǎng)絡,擅長處理圖像特別是大圖像的相關機器學習問題驱富。
卷積網(wǎng)絡通過一系列方法锚赤,成功將數(shù)據(jù)量龐大的圖像識別問題不斷降維,最終使其能夠被訓練褐鸥。CNN最早由Yann LeCun提出并應用在手寫字體識別上(MINST)线脚。LeCun提出的網(wǎng)絡稱為LeNet,其網(wǎng)絡結構如下:
這是一個最典型的卷積網(wǎng)絡叫榕,由卷積層浑侥、池化層、全連接層組成晰绎。其中卷積層與池化層配合寓落,組成多個卷積組,逐層提取特征荞下,最終通過若干個全連接層完成分類零如。
卷積層完成的操作,可以認為是受局部感受野概念的啟發(fā)锄弱,而池化層考蕾,主要是為了降低數(shù)據(jù)維度。
綜合起來說会宪,CNN通過卷積來模擬特征區(qū)分肖卧,并且通過卷積的權值共享及池化,來降低網(wǎng)絡參數(shù)的數(shù)量級掸鹅,最后通過傳統(tǒng)神經(jīng)網(wǎng)絡完成分類等任務塞帐。
降低參數(shù)量級
為什么要降低參數(shù)量級?從下面的例子就可以很容易理解了巍沙。
如果我們使用傳統(tǒng)神經(jīng)網(wǎng)絡方式葵姥,對一張圖片進行分類,那么句携,我們把圖片的每個像素都連接到隱藏層節(jié)點上榔幸,那么對于一張1000x1000像素的圖片,如果我們有1M隱藏層單元,那么一共有10^12個參數(shù)削咆,這顯然是不能接受的牍疏。(如下圖所示)
但是我們在CNN里,可以大大減少參數(shù)個數(shù)拨齐,我們基于以下兩個假設:
1)最底層特征都是局部性的鳞陨,也就是說,我們用10x10這樣大小的過濾器就能表示邊緣等底層特征
2)圖像上不同小片段瞻惋,以及不同圖像上的小片段的特征是類似的厦滤,也就是說,我們能用同樣的一組分類器來描述各種各樣不同的圖像
基于以上兩個歼狼,假設掏导,我們就能把第一層網(wǎng)絡結構簡化如下:
我們用100個10x10的小過濾器,就能夠描述整幅圖片上的底層特征蹂匹。
卷積(Convolution)
卷積運算的定義如下圖所示:
如圖所示,我們有一個5x5的圖像凹蜈,我們用一個3x3的卷積核:
1 0 1
0 1 0
1 0 1
來對圖像進行卷積操作(可以理解為有一個滑動窗口限寞,把卷積核與對應的圖像像素做乘積然后求和),得到了3x3的卷積結果仰坦。
這個過程我們可以理解為我們使用一個過濾器(卷積核)來過濾圖像的各個小區(qū)域履植,從而得到這些小區(qū)域的特征值。
在實際訓練過程中悄晃,卷積核的值是在學習過程中學到的玫霎。
在具體應用中,往往有多個卷積核妈橄,可以認為庶近,每個卷積核代表了一種圖像模式,如果某個圖像塊與此卷積核卷積出的值大眷蚓,則認為此圖像塊十分接近于此卷積核鼻种。如果我們設計了6個卷積核,可以理解:我們認為這個圖像上有6種底層紋理模式沙热,也就是我們用6中基礎模式就能描繪出一副圖像叉钥。以下就是24種不同的卷積核的示例:
池化(Pooling)
池化聽起來很高深,其實簡單的說就是下采樣篙贸。池化的過程如下圖所示:
上圖中投队,我們可以看到,原始圖片是20x20的爵川,我們對其進行下采樣敷鸦,采樣窗口為10x10,最終將其下采樣成為一個2x2大小的特征圖。
之所以這么做的原因轧膘,是因為即使做完了卷積钞螟,圖像仍然很大(因為卷積核比較小)谎碍,所以為了降低數(shù)據(jù)維度鳞滨,就進行下采樣。
之所以能這么做蟆淀,是因為即使減少了許多數(shù)據(jù)拯啦,特征的統(tǒng)計屬性仍能夠描述圖像,而且由于降低了數(shù)據(jù)維度熔任,有效地避免了過擬合褒链。
在實際應用中,池化根據(jù)下采樣的方法疑苔,分為最大值下采樣(Max-Pooling)與平均值下采樣(Mean-Pooling)甫匹。
LeNet介紹
下面再回到LeNet網(wǎng)絡結構:
這回我們就比較好理解了,原始圖像進來以后惦费,先進入一個卷積層C1兵迅,由6個5x5的卷積核組成,卷積出28x28的圖像薪贫,然后下采樣到14x14(S2)恍箭。
接下來,再進一個卷積層C3瞧省,由16個5x5的卷積核組成扯夭,之后再下采樣到5x5(S4)。
注意鞍匾,這里S2與C3的連接方式并不是全連接交洗,而是部分連接,如下圖所示:
其中行代表S2層的某個節(jié)點橡淑,列代表C3層的某個節(jié)點藕筋。
我們可以看出,C3-0跟S2-0,1,2連接梳码,C3-1跟S2-1,2,3連接隐圾,后面依次類推,仔細觀察可以發(fā)現(xiàn)掰茶,其實就是排列組合:
0 0 0 1 1 1
0 0 1 1 1 0
0 1 1 1 0 0
...
1 1 1 1 1 1
我們可以領悟作者的意圖暇藏,即用不同特征的底層組合,可以得到進一步的高級特征濒蒋,例如:/ + \ = ^ (比較抽象O(∩_∩)O~)盐碱,再比如好多個斜線段連成一個圓等等把兔。
最后,通過全連接層C5瓮顽、F6得到10個輸出县好,對應10個數(shù)字的概率。
最后說一點個人的想法哈暖混,我認為第一個卷積層選6個卷積核是有原因的缕贡,大概也許可能是因為0~9其實能用以下6個邊緣來代表:
是不是有點道理呢,哈哈
然后C3層的數(shù)量選擇上面也說了拣播,是從選3個開始的排列組合晾咪,所以也是可以理解的。
其實這些都是針對特定問題的trick贮配,現(xiàn)在更加通用的網(wǎng)絡的結構都會復雜得多谍倦,至于這些網(wǎng)絡的參數(shù)如何選擇,那就需要我們好好學習了泪勒。
訓練過程
卷積神經(jīng)網(wǎng)絡的訓練過程與傳統(tǒng)神經(jīng)網(wǎng)絡類似昼蛀,也是參照了反向傳播算法。
第一階段圆存,向前傳播階段:
a)從樣本集中取一個樣本(X,Yp)叼旋,將X輸入網(wǎng)絡;
b)計算相應的實際輸出Op辽剧。
????? 在此階段送淆,信息從輸入層經(jīng)過逐級的變換税产,傳送到輸出層怕轿。這個過程也是網(wǎng)絡在完成訓練后正常運行時執(zhí)行的過程。在此過程中辟拷,網(wǎng)絡執(zhí)行的是計算(實際上就是輸入與每層的權值矩陣相點乘撞羽,得到最后的輸出結果):
Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二階段,向后傳播階段
a)算實際輸出Op與相應的理想輸出Yp的差衫冻;
b)按極小化誤差的方法反向傳播調整權矩陣诀紊。
以上內容摘自其他博客,由于我也沒有仔細了解這一塊隅俘,建議直接參考原博客邻奠。