任何事物的從無到有在到完善都是一個推陳出新的過程总寒,也是一個問題接著一個問題解決的過程太伊,卷積神經(jīng)網(wǎng)絡(luò)也不例外鲤桥,了解卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展歷史有助于我們從整體上把握卷積神經(jīng)網(wǎng)絡(luò)蚯嫌,從而知道以前的研究學(xué)者解決了什么問題乃至知道如今的繼續(xù)面臨著怎樣的困境又如何去解決,不能只知其然而不知所以然芽淡,這樣學(xué)習(xí)的話會總是在跟著別人的腳步走马绝,一直看別人寫的博客,看別人寫的代碼挣菲,這沒有什么太大價值富稻。要么就投入科研一線,去探索最前沿的東西白胀,要么就是能將別人新的學(xué)術(shù)成果快速的應(yīng)用到實踐當(dāng)中去椭赋,要做到這點的前提就是對技術(shù)目前的狀況要有一個大體上的認知。而想要把握住卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展史當(dāng)然就得從一些經(jīng)典卷積的神經(jīng)網(wǎng)絡(luò)上分析或杠,下面就來聊聊那些經(jīng)典的卷積神經(jīng)網(wǎng)路哪怔。
上圖是2010年至2015年的 ImageNet挑戰(zhàn)賽的各種神經(jīng)網(wǎng)絡(luò)圖,上面很直觀的看到2011-2012年是一個分水嶺廷痘,Hinton的AlexNet將錯誤率下降了將近10個百分點蔓涧,由此AlexNet也獲得了我們李飛飛教授舉辦的ImagNet挑戰(zhàn)賽的第一名件已。也正是因為AlexNet取得的成功振奮了AI研究學(xué)者的低迷的士氣笋额,推動了深度學(xué)習(xí)發(fā)展的新一波浪潮,也就像當(dāng)年林帥在平型關(guān)殲滅日軍一個團帶給了抗日民族統(tǒng)一戰(zhàn)線極大的鼓舞篷扩,打敗了日軍不可戰(zhàn)勝的神話兄猩。
一、AlexNet
當(dāng)時的AlexNet由于受限于軟硬件水平鉴未,將卷積層的卷積核對半分到兩塊GPU上運行枢冤,合理的加快了運算速度,但是這不是造成錯誤率下降這么多的原因铜秆,那么究竟是什么原因嘞淹真?可以想到AlexNet一定有他的創(chuàng)新之處,在談他的創(chuàng)新之處之前连茧,先來看看在AlexNet之前的具有代表意義的一個卷積神經(jīng)網(wǎng)絡(luò)LeNet5:
在AlexNet之前的卷積神經(jīng)網(wǎng)絡(luò)都是沿襲的Yann LeCun發(fā)明的LeNet5的路子核蘸,先來看看LeNet5的結(jié)構(gòu),她是一個5-6層的卷積神經(jīng)網(wǎng)絡(luò)啸驯,其卷積核可以看做是個3x3的核客扎,沒有采用激活函數(shù)或者激活函數(shù)使用的sigmoid和階梯函數(shù),注意這里的Subsampling是下采樣和我們現(xiàn)在的MAXPOOL AND AVEPOOL是不同的罚斗,他是各行或者擱列或者兩種皆而有之的一種采樣方式徙鱼。
而AlexNet采用的11x11大小的核,使用了激活函數(shù)ReLU,甚至使用了dropout來regularzation针姿,是一個8層的神經(jīng)網(wǎng)絡(luò)袱吆,其創(chuàng)新之處就在于加深了網(wǎng)絡(luò)的深度厌衙,采用了不同的激活函數(shù),采用了防止overfitting的方式dropout
二杆故、牛津大學(xué)發(fā)明的VGG
VGG是一個11-19層的卷積神經(jīng)網(wǎng)絡(luò)迅箩,探索出來了3X3和1X1的核減小了感受野但是性能卻提升了很多,深度也比2012的AlexNete更深处铛,他是2014年ImageNet挑戰(zhàn)賽的第二名
三饲趋、GoogLeNet
GoogLeNet 谷歌研究團隊發(fā)明的一個網(wǎng)絡(luò),名字后面接著LeNet是為了紀(jì)念Yann LeCun發(fā)明的LeNet5
GoogLenet也探索出來了 3x3和1x1 的感受野撤蟆,但是他還探索出了新的東西奕塑,就是每一個卷積層使用不同類型的卷積核,保持每一個卷積核的輸出通道是一樣的然后將他們進行concat操作家肯,比如上圖中有32x1x1的的卷積核龄砰,還有32x3x3的卷積核,32x5x5的卷積核讨衣,還有一個3x3的池化换棚,然后將他們的結(jié)果進行concat為了將維度保持一致我們可以對其進行padding和stride設(shè)置,多個不同類型的感受野也就可能能夠感受到各種不同的信息量反镇。GoolLenet采用的是一個22層的網(wǎng)絡(luò)比起VGG的深度又更深了固蚤,GoolLenet是2014年ImageNet挑戰(zhàn)賽的冠軍。
從LeNet5到GoolLeNet網(wǎng)絡(luò)的層數(shù)從5->8->19->22歹茶,層數(shù)越來越高夕玩,效果也越來越好,那我們是不是就因此能夠大膽的推測層數(shù)越高效果必然越好嘞惊豺?這恐怕未必燎孟,要知道馬克思主義不就告訴我們嗎?量變必然導(dǎo)致質(zhì)變尸昧,事實上也是如此揩页,經(jīng)過實踐證明隨著層數(shù)的增加性能會下降。
隨著網(wǎng)絡(luò)層數(shù)的增加事實證明并不能如所猜想的那樣性能會上升烹俗,如上圖所示爆侣,56層網(wǎng)絡(luò)和20層的網(wǎng)絡(luò)想對比錯誤率反而上升了,這種情況不能夠就是為overfitting衷蜓,因為如果是過擬合的話那么在訓(xùn)練集上的錯誤率應(yīng)該會下降才對累提,那么是什么原因?qū)е碌倪@種層數(shù)增多性能反而下降嘞?
經(jīng)過目前的研究表明主要由一下幾點:
- 梯度爆炸
- 梯度彌散
- 網(wǎng)絡(luò)退化:
也即網(wǎng)絡(luò)層數(shù)很深的時候后面的層數(shù)可能已經(jīng)起
不到優(yōu)化的作用了磁浇,相當(dāng)于沒有作用 - 特征提取變異:
這是我自己發(fā)明的詞語斋陪,就是說當(dāng)特征提取到optimal的時候如果在繼續(xù)提取就會導(dǎo)致提取出的特征只會增大損失函數(shù)值,相當(dāng)于特征變異了。
根據(jù)反向傳播的原理无虚,由鏈?zhǔn)角髮?dǎo)法則如果隨著網(wǎng)絡(luò)層數(shù)的增加其計算圖會很深缔赠,各種層的梯度相乘的時候如果都相對較大就會導(dǎo)致梯度下降時候減去的梯度和很大,這時候下降之后的參數(shù)值有可能就會直接越過各種極小值點友题,收斂會變的很慢嗤堰,或者收斂的時候已經(jīng)越過了最佳收斂點。而當(dāng)各層的梯度值想對很小的時候設(shè)若小于1這個時候?qū)訑?shù)很大會使得最終梯度趨向于零度宦,當(dāng)網(wǎng)絡(luò)層數(shù)很深的時候意味著在更新權(quán)值的時候只會更新深層的權(quán)值踢匣,淺層的權(quán)值在原地踏步,這樣也會導(dǎo)致收斂速度和收斂效果變差戈抄。
如果僅僅從理論上面來說离唬,CNN的深度越深那么其曲線變化就會更加的豐富,就能夠擬合任何復(fù)雜的曲線划鸽,但是隨著網(wǎng)絡(luò)深度的加深就會帶來上面所提到的那些負面影響输莺,梯度彌散,梯度爆炸裸诽,網(wǎng)絡(luò)退化嫂用,特征提取變異。那么如何去徹底的消除這樣的負面效果丈冬,或者在一定的程度上緩解這樣的負面效果嘞嘱函?這個就要談到由我們的何凱明同學(xué)發(fā)明的ResNet殘差網(wǎng)絡(luò)了。
四殷蛇、ResNet殘差網(wǎng)絡(luò)
大名鼎鼎的何凱明同學(xué)的具體簡歷就不在這里詳細說明了实夹,網(wǎng)上查就行了橄浓,下面來看他的算法原理粒梦。
上面圖中的網(wǎng)絡(luò)結(jié)構(gòu)就是兩個卷積層組成一個整體稱作一個殘差塊,然后將兩個殘差塊之間變換現(xiàn)在記做 F(x,w,b) 然后將殘差塊最后的輸出記做 H(x) = F(x,w,b)+x荸实,也就是說在傳統(tǒng)網(wǎng)絡(luò)的基礎(chǔ)上實現(xiàn)了一個短接模塊
shortcut connection
,這有什么作用嘞匀们?假如x是淺層提取出的特征而且是optimal最優(yōu)特征,那么通過上面的分析就知道如果接下來的層繼續(xù)提取特征就會繼續(xù)損失函數(shù)值准给,這時候如果我們能夠構(gòu)建一個 H(x) = x的identity mapping
即當(dāng)提取出的特征是最優(yōu)的時候后面的網(wǎng)絡(luò)層不對x在進行特征提取只是實現(xiàn)恒等映射泄朴,那么就能夠有效的防止特征提取變異,保證之后的網(wǎng)絡(luò)層都保持這個提出的最優(yōu)特征露氮,當(dāng)網(wǎng)絡(luò)層很深很深的時候網(wǎng)絡(luò)退化雖然是不可避免的祖灰,但是我們能夠通過有效的手段來阻止特征提取變異即通過恒等映射來實現(xiàn),但是如果我們直接學(xué)習(xí)有一個恒等映射 F(x) = x 這是很難的畔规,在我們的算法機制上來在反向傳播和梯度下降的過程中大家都知道loss函數(shù)為了其損失值是會逼迫F(x)趨向于x但是由于梯度消失和梯度彌散這會導(dǎo)致雖然有這個趨勢但是卻并不能很好的實現(xiàn)局扶,很多的實踐結(jié)果其實已經(jīng)驗證了這個問題的,但是何凱明同學(xué)的殘差網(wǎng)絡(luò)就有效的在一定程度在解決了梯度彌散和梯度爆炸的問題使得有效的實現(xiàn)identity mapping
,之前說過由于我們添加了shortcut connection
使得最后的輸出由 F(x) 變成了 H(x) = F(x)+x三妈,根據(jù)反向傳播趨勢畜埋,如果x是提取出的最優(yōu)的特征,那么如果 F(x) 的值增大就會導(dǎo)致loss的損失值增大畴蒲,梯度下降的時候就會使得 F(x) 逼近與零來實現(xiàn)恒等映射悠鞍,但是因為我們CNN算法機制是建立在反向傳播和梯度下降上的,如果不能解決梯度爆炸和梯度彌散顯然是不能夠解決網(wǎng)絡(luò)特征提取變異的問題的模燥,上面的圖只是一個殘差模塊咖祭,我們還不能夠看出其威力來,現(xiàn)在看下面的整個殘差網(wǎng)絡(luò)圖然后在推到反向傳播公式我們就能夠很好的理解這個Identity Mapping in Deep Residual Networks
的威力之所在蔫骂。
假設(shè) 那么殘差塊在經(jīng)過激活函數(shù)
即
如果激活函數(shù)
是一個恒等映射心肪,其實這個激活函數(shù)可以通過
normalization
和ReLU
來實現(xiàn),這樣將
即
這時候我們就可以構(gòu)建從淺層殘差模塊l到深層殘差模塊L的前向傳播遞推公式
然后我們在從L層反向傳播至l層公式如下:
這樣就將誤差傳播時候的鏈?zhǔn)匠朔ㄞD(zhuǎn)換成了加法纠吴,在很大程度少緩解了梯度彌散和梯度爆炸硬鞍,而且誤差能夠從一個殘差模塊傳播到另一個殘差模塊,這樣當(dāng)x是
optimal feature
的時候損失函數(shù)就會逼迫趨向于零戴已,這樣就很好的解決了在網(wǎng)絡(luò)層數(shù)很深的時候?qū)е碌奶卣魈崛∽儺悊栴}固该,使得深層網(wǎng)絡(luò)的性能得到提升。
正因為深度殘差網(wǎng)絡(luò)的這種優(yōu)良特性使得何凱明同學(xué)的團隊在2015年獲得了ImageNet的冠軍糖儡。
殘差模塊的模型是 何凱明同學(xué)做了很多的試驗表明當(dāng)
即
shortcut connection
是一個恒等映射的時候網(wǎng)絡(luò)的性能是最優(yōu)的伐坏,為了方便理解假設(shè)那么其反向傳播公式就會變成
顯然當(dāng)很大的時候會導(dǎo)致梯度爆炸。其他映射就有可能到至梯度彌撒或者梯度爆炸或者兼而有之握联。
shortcut connetction
也有很多種形式且看下圖:
可見after addition
是凱明同學(xué)試驗之后推薦的