0
本文作者: 亞萌 | 2017-02-28 21:06 | 專題:雷峰網(wǎng)公開(kāi)課 |
雷鋒網(wǎng)按:2月28日下午3點(diǎn),《TensorFlow實(shí)戰(zhàn)》作者黃文堅(jiān)做客【硬創(chuàng)公開(kāi)課】,為我們講解了關(guān)于四大經(jīng)典CNN網(wǎng)絡(luò):AlexNet、VGGNet、Google?Inception?Net和ResNet的基本原理。本次公開(kāi)課內(nèi)容主要節(jié)選自作者《TensorFlow實(shí)戰(zhàn)》第6章,關(guān)于這四大CNN網(wǎng)絡(luò)實(shí)現(xiàn)方式可參考作者新書(shū)《TensorFlow實(shí)戰(zhàn)》,其中有這幾種網(wǎng)絡(luò)的詳細(xì)實(shí)現(xiàn)步驟。
嘉賓介紹
黃文堅(jiān),PPmoney 大數(shù)據(jù)算法總監(jiān),谷歌 TensorFlow 貢獻(xiàn)者,暢銷書(shū)《 TensorFlow 實(shí)戰(zhàn)》作者(該書(shū)獲得到了谷歌 TensorFlow 團(tuán)隊(duì)的官方推薦)。前明略數(shù)據(jù)技術(shù)合伙人,領(lǐng)導(dǎo)了對(duì)諸多大型銀行、保險(xiǎn)公司、基金的數(shù)據(jù)挖掘項(xiàng)目,包括建立金融風(fēng)控模型、新聞?shì)浨榉治?、保險(xiǎn)復(fù)購(gòu)預(yù)測(cè)等。曾就職于阿里巴巴搜索引擎算法團(tuán)隊(duì),負(fù)責(zé)天貓個(gè)性化搜索系統(tǒng)。曾參加阿里巴巴大數(shù)據(jù)推薦算法大賽,于 7000 多支隊(duì)伍中獲得前 10 名。本科、研究生就讀于香港科技大學(xué),曾在頂級(jí)會(huì)議和期刊 SIGMOBILE MobiCom、IEEE Transactions on Image Processing 發(fā)表論文,研究成果獲美國(guó)計(jì)算機(jī)協(xié)會(huì)移動(dòng)計(jì)算大會(huì)(MobiCom)最佳移動(dòng)應(yīng)用技術(shù)冠軍,并獲得兩項(xiàng)美國(guó)專利和一項(xiàng)中國(guó)專利。
以下為本次公開(kāi)課主要內(nèi)容。
大家好,我這次將主要介紹四種經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò),它們分別是:
AlexNet
VGGNet
Google?Inception?Net
ResNet
這4種網(wǎng)絡(luò)依照出現(xiàn)的先后順序排列,深度和復(fù)雜度也依次遞進(jìn)。它們分別獲得了ILSVRC(ImageNet?Large?Scale?Visual?Recognition?Challenge)比賽分類項(xiàng)目的2012年冠軍(top-5錯(cuò)誤率16.4%,使用額外數(shù)據(jù)可達(dá)到15.3%,8層神經(jīng)網(wǎng)絡(luò))、2014年亞軍(top-5錯(cuò)誤率7.3%,19層神經(jīng)網(wǎng)絡(luò)),2014年冠軍(top-5錯(cuò)誤率6.7%,22層神經(jīng)網(wǎng)絡(luò))和2015年的冠軍(top-5錯(cuò)誤率3.57%,152層神經(jīng)網(wǎng)絡(luò))。
這4個(gè)經(jīng)典的網(wǎng)絡(luò)都在各自的年代率先使用了很多先進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),對(duì)卷積網(wǎng)絡(luò)乃至深度學(xué)習(xí)有非常大的推動(dòng)作用,也象征了卷積神經(jīng)網(wǎng)絡(luò)在2012—2015這四年間的快速發(fā)展。如圖1所示,ILSVRC的top-5錯(cuò)誤率在最近幾年取得重大突破,而主要的突破點(diǎn)都是在深度學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò),成績(jī)的大幅提升幾乎都伴隨著卷積神經(jīng)網(wǎng)絡(luò)的層數(shù)加深。
而傳統(tǒng)機(jī)器學(xué)習(xí)算法目前在ILSVRC上已經(jīng)難以追上深度學(xué)習(xí)的步伐了,以至于逐漸被稱為淺層學(xué)習(xí)(Shallow?Learning)。目前在ImageNet數(shù)據(jù)集上人眼能達(dá)到的錯(cuò)誤率大概在5.1%,這還是經(jīng)過(guò)了大量訓(xùn)練的專家能達(dá)到的成績(jī),一般人要區(qū)分1000種類型的圖片是比較困難的。而ILSVRC?2015年冠軍——152層ResNet的成績(jī)達(dá)到錯(cuò)誤率3.57%,已經(jīng)超過(guò)了人眼,這說(shuō)明卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)基本解決了ImageNet數(shù)據(jù)集上的圖片分類問(wèn)題。
圖1??歷屆ILSVRC比賽代表性模型的成績(jī)及其神經(jīng)網(wǎng)絡(luò)深度
前面提到的計(jì)算機(jī)視覺(jué)比賽ILSVRC使用的數(shù)據(jù)都來(lái)自ImageNet,如圖2所示。ImageNet項(xiàng)目于2007年由斯坦福大學(xué)華人教授李飛飛創(chuàng)辦,目標(biāo)是收集大量帶有標(biāo)注信息的圖片數(shù)據(jù)供計(jì)算機(jī)視覺(jué)模型訓(xùn)練。ImageNet擁有1500萬(wàn)張標(biāo)注過(guò)的高清圖片,總共擁有22000類,其中約有100萬(wàn)張標(biāo)注了圖片中主要物體的定位邊框。ImageNet項(xiàng)目最早的靈感來(lái)自于人類通過(guò)視覺(jué)學(xué)習(xí)世界的方式,如果假定兒童的眼睛是生物照相機(jī),他們平均每200ms就拍照一次(眼球轉(zhuǎn)動(dòng)一次的平均時(shí)間),那么3歲大時(shí)孩子就已經(jīng)看過(guò)了上億張真實(shí)世界的照片,可以算得上是一個(gè)非常大的數(shù)據(jù)集。ImageNet項(xiàng)目下載了互聯(lián)網(wǎng)上近10億張圖片,使用亞馬遜的土耳其機(jī)器人平臺(tái)實(shí)現(xiàn)眾包的標(biāo)注過(guò)程,有來(lái)自世界上167個(gè)國(guó)家的近5萬(wàn)名工作者幫忙一起篩選、標(biāo)注。
圖2??ImageNet數(shù)據(jù)集圖片示例
每年度的ILSVRC比賽數(shù)據(jù)集中大概擁有120萬(wàn)張圖片,以及1000類的標(biāo)注,是ImageNet全部數(shù)據(jù)的一個(gè)子集。比賽一般采用top-5和top-1分類錯(cuò)誤率作為模型性能的評(píng)測(cè)指標(biāo),圖3所示為AlexNet識(shí)別ILSVRC數(shù)據(jù)集中圖片的情況,每張圖片下面是分類預(yù)測(cè)得分最高的5個(gè)分類及其分值。
圖3??AlexNet識(shí)別ILSVRC數(shù)據(jù)集的top-5分類
AlexNet?
2012年,Hinton的學(xué)生Alex?Krizhevsky提出了深度卷積神經(jīng)網(wǎng)絡(luò)模型AlexNet,它可以算是LeNet的一種更深更寬的版本。AlexNet中包含了幾個(gè)比較新的技術(shù)點(diǎn),也首次在CNN中成功應(yīng)用了ReLU、Dropout和LRN等Trick。同時(shí)AlexNet也使用了GPU進(jìn)行運(yùn)算加速,作者開(kāi)源了他們?cè)贕PU上訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的CUDA代碼。AlexNet包含了6億3000萬(wàn)個(gè)連接,6000萬(wàn)個(gè)參數(shù)和65萬(wàn)個(gè)神經(jīng)元,擁有5個(gè)卷積層,其中3個(gè)卷積層后面連接了最大池化層,最后還有3個(gè)全連接層。AlexNet以顯著的優(yōu)勢(shì)贏得了競(jìng)爭(zhēng)激烈的ILSVRC?2012比賽,top-5的錯(cuò)誤率降低至了16.4%,相比第二名的成績(jī)26.2%錯(cuò)誤率有了巨大的提升。AlexNet可以說(shuō)是神經(jīng)網(wǎng)絡(luò)在低谷期后的第一次發(fā)聲,確立了深度學(xué)習(xí)(深度卷積網(wǎng)絡(luò))在計(jì)算機(jī)視覺(jué)的統(tǒng)治地位,同時(shí)也推動(dòng)了深度學(xué)習(xí)在語(yǔ)音識(shí)別、自然語(yǔ)言處理、強(qiáng)化學(xué)習(xí)等領(lǐng)域的拓展。
AlexNet將LeNet的思想發(fā)揚(yáng)光大,把CNN的基本原理應(yīng)用到了很深很寬的網(wǎng)絡(luò)中。AlexNet主要使用到的新技術(shù)點(diǎn)如下。
(1)成功使用ReLU作為CNN的激活函數(shù),并驗(yàn)證其效果在較深的網(wǎng)絡(luò)超過(guò)了Sigmoid,成功解決了Sigmoid在網(wǎng)絡(luò)較深時(shí)的梯度彌散問(wèn)題。雖然ReLU激活函數(shù)在很久之前就被提出了,但是直到AlexNet的出現(xiàn)才將其發(fā)揚(yáng)光大。
(2)訓(xùn)練時(shí)使用Dropout隨機(jī)忽略一部分神經(jīng)元,以避免模型過(guò)擬合。Dropout雖有單獨(dú)的論文論述,但是AlexNet將其實(shí)用化,通過(guò)實(shí)踐證實(shí)了它的效果。在AlexNet中主要是最后幾個(gè)全連接層使用了Dropout。
(3)在CNN中使用重疊的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出讓步長(zhǎng)比池化核的尺寸小,這樣池化層的輸出之間會(huì)有重疊和覆蓋,提升了特征的豐富性。
(4)提出了LRN層,對(duì)局部神經(jīng)元的活動(dòng)創(chuàng)建競(jìng)爭(zhēng)機(jī)制,使得其中響應(yīng)比較大的值變得相對(duì)更大,并抑制其他反饋較小的神經(jīng)元,增強(qiáng)了模型的泛化能力。
(5)使用CUDA加速深度卷積網(wǎng)絡(luò)的訓(xùn)練,利用GPU強(qiáng)大的并行計(jì)算能力,處理神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)大量的矩陣運(yùn)算。AlexNet使用了兩塊GTX?580?GPU進(jìn)行訓(xùn)練,單個(gè)GTX?580只有3GB顯存,這限制了可訓(xùn)練的網(wǎng)絡(luò)的最大規(guī)模。因此作者將AlexNet分布在兩個(gè)GPU上,在每個(gè)GPU的顯存中儲(chǔ)存一半的神經(jīng)元的參數(shù)。因?yàn)镚PU之間通信方便,可以互相訪問(wèn)顯存,而不需要通過(guò)主機(jī)內(nèi)存,所以同時(shí)使用多塊GPU也是非常高效的。同時(shí),AlexNet的設(shè)計(jì)讓GPU之間的通信只在網(wǎng)絡(luò)的某些層進(jìn)行,控制了通信的性能損耗。?
(6)數(shù)據(jù)增強(qiáng),隨機(jī)地從256′256的原始圖像中截取224′224大小的區(qū)域(以及水平翻轉(zhuǎn)的鏡像),相當(dāng)于增加了(256-224)2′2=2048倍的數(shù)據(jù)量。如果沒(méi)有數(shù)據(jù)增強(qiáng),僅靠原始的數(shù)據(jù)量,參數(shù)眾多的CNN會(huì)陷入過(guò)擬合中,使用了數(shù)據(jù)增強(qiáng)后可以大大減輕過(guò)擬合,提升泛化能力。進(jìn)行預(yù)測(cè)時(shí),則是取圖片的四個(gè)角加中間共5個(gè)位置,并進(jìn)行左右翻轉(zhuǎn),一共獲得10張圖片,對(duì)他們進(jìn)行預(yù)測(cè)并對(duì)10次結(jié)果求均值。同時(shí),AlexNet論文中提到了會(huì)對(duì)圖像的RGB數(shù)據(jù)進(jìn)行PCA處理,并對(duì)主成分做一個(gè)標(biāo)準(zhǔn)差為0.1的高斯擾動(dòng),增加一些噪聲,這個(gè)Trick可以讓錯(cuò)誤率再下降1%。
整個(gè)AlexNet有8個(gè)需要訓(xùn)練參數(shù)的層(不包括池化層和LRN層),前5層為卷積層,后3層為全連接層,如圖4所示。AlexNet最后一層是有1000類輸出的Softmax層用作分類。?LRN層出現(xiàn)在第1個(gè)及第2個(gè)卷積層后,而最大池化層出現(xiàn)在兩個(gè)LRN層及最后一個(gè)卷積層后。ReLU激活函數(shù)則應(yīng)用在這8層每一層的后面。因?yàn)锳lexNet訓(xùn)練時(shí)使用了兩塊GPU,因此這個(gè)結(jié)構(gòu)圖中不少組件都被拆為了兩部分。現(xiàn)在我們GPU的顯存可以放下全部模型參數(shù),因此只考慮一塊GPU的情況即可。
圖4??AlexNet的網(wǎng)絡(luò)結(jié)構(gòu)
AlexNet每層的超參數(shù)如圖5所示。其中輸入的圖片尺寸為224′224,第一個(gè)卷積層使用了較大的卷積核尺寸11′11,步長(zhǎng)為4,有96個(gè)卷積核;緊接著一個(gè)LRN層;然后是一個(gè)3′3的最大池化層,步長(zhǎng)為2。這之后的卷積核尺寸都比較小,都是5′5或者3′3的大小,并且步長(zhǎng)都為1,即會(huì)掃描全圖所有像素;而最大池化層依然保持為3′3,并且步長(zhǎng)為2。我們可以發(fā)現(xiàn)一個(gè)比較有意思的現(xiàn)象,在前幾個(gè)卷積層,雖然計(jì)算量很大,但參數(shù)量很小,都在1M左右甚至更小,只占AlexNet總參數(shù)量的很小一部分。這就是卷積層有用的地方,可以通過(guò)較小的參數(shù)量提取有效的特征。而如果前幾層直接使用全連接層,那么參數(shù)量和計(jì)算量將成為天文數(shù)字。雖然每一個(gè)卷積層占整個(gè)網(wǎng)絡(luò)的參數(shù)量的1%都不到,但是如果去掉任何一個(gè)卷積層,都會(huì)使網(wǎng)絡(luò)的分類性能大幅地下降。
圖5??AlexNet每層的超參數(shù)及參數(shù)數(shù)量
VGGNet是牛津大學(xué)計(jì)算機(jī)視覺(jué)組(Visual?Geometry?Group)和Google?DeepMind公司的研究員一起研發(fā)的的深度卷積神經(jīng)網(wǎng)絡(luò)。VGGNet探索了卷積神經(jīng)網(wǎng)絡(luò)的深度與其性能之間的關(guān)系,通過(guò)反復(fù)堆疊3′3的小型卷積核和2′2的最大池化層,VGGNet成功地構(gòu)筑了16~19層深的卷積神經(jīng)網(wǎng)絡(luò)。VGGNet相比之前state-of-the-art的網(wǎng)絡(luò)結(jié)構(gòu),錯(cuò)誤率大幅下降,并取得了ILSVRC?2014比賽分類項(xiàng)目的第2名和定位項(xiàng)目的第1名。同時(shí)VGGNet的拓展性很強(qiáng),遷移到其他圖片數(shù)據(jù)上的泛化性非常好。VGGNet的結(jié)構(gòu)非常簡(jiǎn)潔,整個(gè)網(wǎng)絡(luò)都使用了同樣大小的卷積核尺寸(3′3)和最大池化尺寸(2′2)。到目前為止,VGGNet依然經(jīng)常被用來(lái)提取圖像特征。VGGNet訓(xùn)練后的模型參數(shù)在其官方網(wǎng)站上開(kāi)源了,可用來(lái)在domain?specific的圖像分類任務(wù)上進(jìn)行再訓(xùn)練(相當(dāng)于提供了非常好的初始化權(quán)重),因此被用在了很多地方。
VGGNet論文中全部使用了3′3的卷積核和2′2的池化核,通過(guò)不斷加深網(wǎng)絡(luò)結(jié)構(gòu)來(lái)提升性能。圖6所示為VGGNet各級(jí)別的網(wǎng)絡(luò)結(jié)構(gòu)圖,圖7所示為每一級(jí)別的參數(shù)量,從11層的網(wǎng)絡(luò)一直到19層的網(wǎng)絡(luò)都有詳盡的性能測(cè)試。雖然從A到E每一級(jí)網(wǎng)絡(luò)逐漸變深,但是網(wǎng)絡(luò)的參數(shù)量并沒(méi)有增長(zhǎng)很多,這是因?yàn)閰?shù)量主要都消耗在最后3個(gè)全連接層。前面的卷積部分雖然很深,但是消耗的參數(shù)量不大,不過(guò)訓(xùn)練比較耗時(shí)的部分依然是卷積,因其計(jì)算量比較大。這其中的D、E也就是我們常說(shuō)的VGGNet-16和VGGNet-19。C很有意思,相比B多了幾個(gè)1′1的卷積層,1′1卷積的意義主要在于線性變換,而輸入通道數(shù)和輸出通道數(shù)不變,沒(méi)有發(fā)生降維。
圖6??VGGNet各級(jí)別網(wǎng)絡(luò)結(jié)構(gòu)圖
圖7??VGGNet各級(jí)別網(wǎng)絡(luò)參數(shù)量(單位為百萬(wàn))
VGGNet擁有5段卷積,每一段內(nèi)有2~3個(gè)卷積層,同時(shí)每段尾部會(huì)連接一個(gè)最大池化層用來(lái)縮小圖片尺寸。每段內(nèi)的卷積核數(shù)量一樣,越靠后的段的卷積核數(shù)量越多:64?–?128?–?256?–?512?–?512。其中經(jīng)常出現(xiàn)多個(gè)完全一樣的3′3的卷積層堆疊在一起的情況,這其實(shí)是非常有用的設(shè)計(jì)。如圖8所示,兩個(gè)3′3的卷積層串聯(lián)相當(dāng)于1個(gè)5′5的卷積層,即一個(gè)像素會(huì)跟周圍5′5的像素產(chǎn)生關(guān)聯(lián),可以說(shuō)感受野大小為5′5。而3個(gè)3′3的卷積層串聯(lián)的效果則相當(dāng)于1個(gè)7′7的卷積層。除此之外,3個(gè)串聯(lián)的3′3的卷積層,擁有比1個(gè)7′7的卷積層更少的參數(shù)量,只有后者的。最重要的是,3個(gè)3′3的卷積層擁有比1個(gè)7′7的卷積層更多的非線性變換(前者可以使用三次ReLU激活函數(shù),而后者只有一次),使得CNN對(duì)特征的學(xué)習(xí)能力更強(qiáng)。
圖8??兩個(gè)串聯(lián)3′3的卷積層功能類似于一個(gè)5′5的卷積層
VGGNet在訓(xùn)練時(shí)有一個(gè)小技巧,先訓(xùn)練級(jí)別A的簡(jiǎn)單網(wǎng)絡(luò),再?gòu)?fù)用A網(wǎng)絡(luò)的權(quán)重來(lái)初始化后面的幾個(gè)復(fù)雜模型,這樣訓(xùn)練收斂的速度更快。在預(yù)測(cè)時(shí),VGG采用Multi-Scale的方法,將圖像scale到一個(gè)尺寸Q,并將圖片輸入卷積網(wǎng)絡(luò)計(jì)算。然后在最后一個(gè)卷積層使用滑窗的方式進(jìn)行分類預(yù)測(cè),將不同窗口的分類結(jié)果平均,再將不同尺寸Q的結(jié)果平均得到最后結(jié)果,這樣可提高圖片數(shù)據(jù)的利用率并提升預(yù)測(cè)準(zhǔn)確率。同時(shí)在訓(xùn)練中,VGGNet還使用了Multi-Scale的方法做數(shù)據(jù)增強(qiáng),將原始圖像縮放到不同尺寸S,然后再隨機(jī)裁切224′224的圖片,這樣能增加很多數(shù)據(jù)量,對(duì)于防止模型過(guò)擬合有很不錯(cuò)的效果。實(shí)踐中,作者令S在[256,512]這個(gè)區(qū)間內(nèi)取值,使用Multi-Scale獲得多個(gè)版本的數(shù)據(jù),并將多個(gè)版本的數(shù)據(jù)合在一起進(jìn)行訓(xùn)練。圖9所示為VGGNet使用Multi-Scale訓(xùn)練時(shí)得到的結(jié)果,可以看到D和E都可以達(dá)到7.5%的錯(cuò)誤率。最終提交到ILSVRC?2014的版本是僅使用Single-Scale的6個(gè)不同等級(jí)的網(wǎng)絡(luò)與Multi-Scale的D網(wǎng)絡(luò)的融合,達(dá)到了7.3%的錯(cuò)誤率。不過(guò)比賽結(jié)束后作者發(fā)現(xiàn)只融合Multi-Scale的D和E可以達(dá)到更好的效果,錯(cuò)誤率達(dá)到7.0%,再使用其他優(yōu)化策略最終錯(cuò)誤率可達(dá)到6.8%左右,非常接近同年的冠軍Google?Inceptin?Net。同時(shí),作者在對(duì)比各級(jí)網(wǎng)絡(luò)時(shí)總結(jié)出了以下幾個(gè)觀點(diǎn)。
(1)LRN層作用不大。
(2)越深的網(wǎng)絡(luò)效果越好。
(3)1′1的卷積也是很有效的,但是沒(méi)有3′3的卷積好,大一些的卷積核可以學(xué)習(xí)更大的空間特征。
圖9??各級(jí)別VGGNet在使用Multi-Scale訓(xùn)練時(shí)的top-5錯(cuò)誤率
Google?Inception?Net首次出現(xiàn)在ILSVRC?2014的比賽中(和VGGNet同年),就以較大優(yōu)勢(shì)取得了第一名。那屆比賽中的Inception?Net通常被稱為Inception?V1,它最大的特點(diǎn)是控制了計(jì)算量和參數(shù)量的同時(shí),獲得了非常好的分類性能——top-5錯(cuò)誤率6.67%,只有AlexNet的一半不到。Inception?V1有22層深,比AlexNet的8層或者VGGNet的19層還要更深。但其計(jì)算量只有15億次浮點(diǎn)運(yùn)算,同時(shí)只有500萬(wàn)的參數(shù)量,僅為AlexNet參數(shù)量(6000萬(wàn))的1/12,卻可以達(dá)到遠(yuǎn)勝于AlexNet的準(zhǔn)確率,可以說(shuō)是非常優(yōu)秀并且非常實(shí)用的模型。Inception?V1降低參數(shù)量的目的有兩點(diǎn),第一,參數(shù)越多模型越龐大,需要供模型學(xué)習(xí)的數(shù)據(jù)量就越大,而目前高質(zhì)量的數(shù)據(jù)非常昂貴;第二,參數(shù)越多,耗費(fèi)的計(jì)算資源也會(huì)更大。Inception?V1參數(shù)少但效果好的原因除了模型層數(shù)更深、表達(dá)能力更強(qiáng)外,還有兩點(diǎn):一是去除了最后的全連接層,用全局平均池化層(即將圖片尺寸變?yōu)?′1)來(lái)取代它。全連接層幾乎占據(jù)了AlexNet或VGGNet中90%的參數(shù)量,而且會(huì)引起過(guò)擬合,去除全連接層后模型訓(xùn)練更快并且減輕了過(guò)擬合。用全局平均池化層取代全連接層的做法借鑒了Network?In?Network(以下簡(jiǎn)稱NIN)論文。二是Inception?V1中精心設(shè)計(jì)的Inception?Module提高了參數(shù)的利用效率,其結(jié)構(gòu)如圖10所示。這一部分也借鑒了NIN的思想,形象的解釋就是Inception?Module本身如同大網(wǎng)絡(luò)中的一個(gè)小網(wǎng)絡(luò),其結(jié)構(gòu)可以反復(fù)堆疊在一起形成大網(wǎng)絡(luò)。不過(guò)Inception?V1比NIN更進(jìn)一步的是增加了分支網(wǎng)絡(luò),NIN則主要是級(jí)聯(lián)的卷積層和MLPConv層。一般來(lái)說(shuō)卷積層要提升表達(dá)能力,主要依靠增加輸出通道數(shù),但副作用是計(jì)算量增大和過(guò)擬合。每一個(gè)輸出通道對(duì)應(yīng)一個(gè)濾波器,同一個(gè)濾波器共享參數(shù),只能提取一類特征,因此一個(gè)輸出通道只能做一種特征處理。而NIN中的MLPConv則擁有更強(qiáng)大的能力,允許在輸出通道之間組合信息,因此效果明顯??梢哉f(shuō),MLPConv基本等效于普通卷積層后再連接1′1的卷積和ReLU激活函數(shù)。
我們?cè)賮?lái)看Inception?Module的基本結(jié)構(gòu),其中有4個(gè)分支:第一個(gè)分支對(duì)輸入進(jìn)行1′1的卷積,這其實(shí)也是NIN中提出的一個(gè)重要結(jié)構(gòu)。1′1的卷積是一個(gè)非常優(yōu)秀的結(jié)構(gòu),它可以跨通道組織信息,提高網(wǎng)絡(luò)的表達(dá)能力,同時(shí)可以對(duì)輸出通道升維和降維??梢钥吹絀nception?Module的4個(gè)分支都用到了1′1卷積,來(lái)進(jìn)行低成本(計(jì)算量比3′3小很多)的跨通道的特征變換。第二個(gè)分支先使用了1′1卷積,然后連接3′3卷積,相當(dāng)于進(jìn)行了兩次特征變換。第三個(gè)分支類似,先是1′1的卷積,然后連接5′5卷積。最后一個(gè)分支則是3′3最大池化后直接使用1′1卷積。我們可以發(fā)現(xiàn),有的分支只使用1′1卷積,有的分支使用了其他尺寸的卷積時(shí)也會(huì)再使用1′1卷積,這是因?yàn)?′1卷積的性價(jià)比很高,用很小的計(jì)算量就能增加一層特征變換和非線性化。Inception?Module的4個(gè)分支在最后通過(guò)一個(gè)聚合操作合并(在輸出通道數(shù)這個(gè)維度上聚合)。Inception?Module中包含了3種不同尺寸的卷積和1個(gè)最大池化,增加了網(wǎng)絡(luò)對(duì)不同尺度的適應(yīng)性,這一部分和Multi-Scale的思想類似。早期計(jì)算機(jī)視覺(jué)的研究中,受靈長(zhǎng)類神經(jīng)視覺(jué)系統(tǒng)的啟發(fā),Serre使用不同尺寸的Gabor濾波器處理不同尺寸的圖片,Inception?V1借鑒了這種思想。Inception?V1的論文中指出,Inception?Module可以讓網(wǎng)絡(luò)的深度和寬度高效率地?cái)U(kuò)充,提升準(zhǔn)確率且不致于過(guò)擬合。
圖10??Inception?Module結(jié)構(gòu)圖
人腦神經(jīng)元的連接是稀疏的,因此研究者認(rèn)為大型神經(jīng)網(wǎng)絡(luò)的合理的連接方式應(yīng)該也是稀疏的。稀疏結(jié)構(gòu)是非常適合神經(jīng)網(wǎng)絡(luò)的一種結(jié)構(gòu),尤其是對(duì)非常大型、非常深的神經(jīng)網(wǎng)絡(luò),可以減輕過(guò)擬合并降低計(jì)算量,例如卷積神經(jīng)網(wǎng)絡(luò)就是稀疏的連接。Inception?Net的主要目標(biāo)就是找到最優(yōu)的稀疏結(jié)構(gòu)單元(即Inception?Module),論文中提到其稀疏結(jié)構(gòu)基于Hebbian原理,這里簡(jiǎn)單解釋一下Hebbian原理:神經(jīng)反射活動(dòng)的持續(xù)與重復(fù)會(huì)導(dǎo)致神經(jīng)元連接穩(wěn)定性的持久提升,當(dāng)兩個(gè)神經(jīng)元細(xì)胞A和B距離很近,并且A參與了對(duì)B重復(fù)、持續(xù)的興奮,那么某些代謝變化會(huì)導(dǎo)致A將作為能使B興奮的細(xì)胞??偨Y(jié)一下即“一起發(fā)射的神經(jīng)元會(huì)連在一起”(Cells?that?fire?together,?wire?together),學(xué)習(xí)過(guò)程中的刺激會(huì)使神經(jīng)元間的突觸強(qiáng)度增加。受Hebbian原理啟發(fā),另一篇文章Provable?Bounds?for?Learning?Some?Deep?Representations提出,如果數(shù)據(jù)集的概率分布可以被一個(gè)很大很稀疏的神經(jīng)網(wǎng)絡(luò)所表達(dá),那么構(gòu)筑這個(gè)網(wǎng)絡(luò)的最佳方法是逐層構(gòu)筑網(wǎng)絡(luò):將上一層高度相關(guān)(correlated)的節(jié)點(diǎn)聚類,并將聚類出來(lái)的每一個(gè)小簇(cluster)連接到一起,如圖11所示。這個(gè)相關(guān)性高的節(jié)點(diǎn)應(yīng)該被連接在一起的結(jié)論,即是從神經(jīng)網(wǎng)絡(luò)的角度對(duì)Hebbian原理有效性的證明。
圖11??將高度相關(guān)的節(jié)點(diǎn)連接在一起,形成稀疏網(wǎng)絡(luò)
因此一個(gè)“好”的稀疏結(jié)構(gòu),應(yīng)該是符合Hebbian原理的,我們應(yīng)該把相關(guān)性高的一簇神經(jīng)元節(jié)點(diǎn)連接在一起。在普通的數(shù)據(jù)集中,這可能需要對(duì)神經(jīng)元節(jié)點(diǎn)聚類,但是在圖片數(shù)據(jù)中,天然的就是臨近區(qū)域的數(shù)據(jù)相關(guān)性高,因此相鄰的像素點(diǎn)被卷積操作連接在一起。而我們可能有多個(gè)卷積核,在同一空間位置但在不同通道的卷積核的輸出結(jié)果相關(guān)性極高。因此,一個(gè)1′1的卷積就可以很自然地把這些相關(guān)性很高的、在同一個(gè)空間位置但是不同通道的特征連接在一起,這就是為什么1′1卷積這么頻繁地被應(yīng)用到Inception?Net中的原因。1′1卷積所連接的節(jié)點(diǎn)的相關(guān)性是最高的,而稍微大一點(diǎn)尺寸的卷積,比如3′3、5′5的卷積所連接的節(jié)點(diǎn)相關(guān)性也很高,因此也可以適當(dāng)?shù)厥褂靡恍┐蟪叽绲木矸e,增加多樣性(diversity)。最后Inception?Module通過(guò)4個(gè)分支中不同尺寸的1′1、3′3、5′5等小型卷積將相關(guān)性很高的節(jié)點(diǎn)連接在一起,就完成了其設(shè)計(jì)初衷,構(gòu)建出了很高效的符合Hebbian原理的稀疏結(jié)構(gòu)。
在Inception?Module中,通常1′1卷積的比例(輸出通道數(shù)占比)最高,3′3卷積和5′5卷積稍低。而在整個(gè)網(wǎng)絡(luò)中,會(huì)有多個(gè)堆疊的Inception?Module,我們希望靠后的Inception?Module可以捕捉更高階的抽象特征,因此靠后的Inception?Module的卷積的空間集中度應(yīng)該逐漸降低,這樣可以捕獲更大面積的特征。因此,越靠后的Inception?Module中,3′3和5′5這兩個(gè)大面積的卷積核的占比(輸出通道數(shù))應(yīng)該更多。
Inception?Net有22層深,除了最后一層的輸出,其中間節(jié)點(diǎn)的分類效果也很好。因此在Inception?Net中,還使用到了輔助分類節(jié)點(diǎn)(auxiliary?classifiers),即將中間某一層的輸出用作分類,并按一個(gè)較小的權(quán)重(0.3)加到最終分類結(jié)果中。這樣相當(dāng)于做了模型融合,同時(shí)給網(wǎng)絡(luò)增加了反向傳播的梯度信號(hào),也提供了額外的正則化,對(duì)于整個(gè)Inception?Net的訓(xùn)練很有裨益。
當(dāng)年的Inception?V1還是跑在TensorFlow的前輩DistBelief上的,并且只運(yùn)行在CPU上。當(dāng)時(shí)使用了異步的SGD訓(xùn)練,學(xué)習(xí)速率每迭代8個(gè)epoch降低4%。同時(shí),Inception?V1也使用了Multi-Scale、Multi-Crop等數(shù)據(jù)增強(qiáng)方法,并在不同的采樣數(shù)據(jù)上訓(xùn)練了7個(gè)模型進(jìn)行融合,得到了最后的ILSVRC?2014的比賽成績(jī)——top-5錯(cuò)誤率6.67%。
同時(shí),Google?Inception?Net還是一個(gè)大家族,包括:
? 2014年9月的論文Going?Deeper?with?Convolutions提出的Inception?V1(top-5錯(cuò)誤率6.67%)。
? 2015年2月的論文Batch?Normalization:?Accelerating?Deep?Network?Training?by?Reducing?Internal?Covariate提出的Inception?V2(top-5錯(cuò)誤率4.8%)。
? 2015年12月的論文Rethinking?the?Inception?Architecture?for?Computer?Vision提出的Inception?V3(top-5錯(cuò)誤率3.5%)。
? 2016年2月的論文Inception-v4,?Inception-ResNet?and?the?Impact?of?Residual?Connections?on?Learning提出的Inception?V4(top-5錯(cuò)誤率3.08%)。
Inception?V2學(xué)習(xí)了VGGNet,用兩個(gè)3′3的卷積代替5′5的大卷積(用以降低參數(shù)量并減輕過(guò)擬合),還提出了著名的Batch?Normalization(以下簡(jiǎn)稱BN)方法。BN是一個(gè)非常有效的正則化方法,可以讓大型卷積網(wǎng)絡(luò)的訓(xùn)練速度加快很多倍,同時(shí)收斂后的分類準(zhǔn)確率也可以得到大幅提高。BN在用于神經(jīng)網(wǎng)絡(luò)某層時(shí),會(huì)對(duì)每一個(gè)mini-batch數(shù)據(jù)的內(nèi)部進(jìn)行標(biāo)準(zhǔn)化(normalization)處理,使輸出規(guī)范化到N(0,1)的正態(tài)分布,減少了Internal?Covariate?Shift(內(nèi)部神經(jīng)元分布的改變)。BN的論文指出,傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時(shí),每一層的輸入的分布都在變化,導(dǎo)致訓(xùn)練變得困難,我們只能使用一個(gè)很小的學(xué)習(xí)速率解決這個(gè)問(wèn)題。而對(duì)每一層使用BN之后,我們就可以有效地解決這個(gè)問(wèn)題,學(xué)習(xí)速率可以增大很多倍,達(dá)到之前的準(zhǔn)確率所需要的迭代次數(shù)只有1/14,訓(xùn)練時(shí)間大大縮短。而達(dá)到之前的準(zhǔn)確率后,可以繼續(xù)訓(xùn)練,并最終取得遠(yuǎn)超于Inception?V1模型的性能——top-5錯(cuò)誤率4.8%,已經(jīng)優(yōu)于人眼水平。因?yàn)锽N某種意義上還起到了正則化的作用,所以可以減少或者取消Dropout,簡(jiǎn)化網(wǎng)絡(luò)結(jié)構(gòu)。
當(dāng)然,只是單純地使用BN獲得的增益還不明顯,還需要一些相應(yīng)的調(diào)整:增大學(xué)習(xí)速率并加快學(xué)習(xí)衰減速度以適用BN規(guī)范化后的數(shù)據(jù);去除Dropout并減輕L2正則(因BN已起到正則化的作用);去除LRN;更徹底地對(duì)訓(xùn)練樣本進(jìn)行shuffle;減少數(shù)據(jù)增強(qiáng)過(guò)程中對(duì)數(shù)據(jù)的光學(xué)畸變(因?yàn)锽N訓(xùn)練更快,每個(gè)樣本被訓(xùn)練的次數(shù)更少,因此更真實(shí)的樣本對(duì)訓(xùn)練更有幫助)。在使用了這些措施后,Inception?V2在訓(xùn)練達(dá)到Inception?V1的準(zhǔn)確率時(shí)快了14倍,并且模型在收斂時(shí)的準(zhǔn)確率上限更高。
而Inception?V3網(wǎng)絡(luò)則主要有兩方面的改造:一是引入了Factorization?into?small?convolutions的思想,將一個(gè)較大的二維卷積拆成兩個(gè)較小的一維卷積,比如將7′7卷積拆成1′7卷積和7′1卷積,或者將3′3卷積拆成1′3卷積和3′1卷積,如圖12所示。一方面節(jié)約了大量參數(shù),加速運(yùn)算并減輕了過(guò)擬合(比將7′7卷積拆成1′7卷積和7′1卷積,比拆成3個(gè)3′3卷積更節(jié)約參數(shù)),同時(shí)增加了一層非線性擴(kuò)展模型表達(dá)能力。論文中指出,這種非對(duì)稱的卷積結(jié)構(gòu)拆分,其結(jié)果比對(duì)稱地拆為幾個(gè)相同的小卷積核效果更明顯,可以處理更多、更豐富的空間特征,增加特征多樣性。
圖 12??將一個(gè)3′3卷積拆成1′3卷積和3′1卷積
另一方面,Inception?V3優(yōu)化了Inception?Module的結(jié)構(gòu),現(xiàn)在Inception?Module有35′35、17′17和8′8三種不同結(jié)構(gòu),如圖13所示。這些Inception?Module只在網(wǎng)絡(luò)的后部出現(xiàn),前部還是普通的卷積層。并且Inception?V3除了在Inception?Module中使用分支,還在分支中使用了分支(8′8的結(jié)構(gòu)中),可以說(shuō)是Network?In?Network?In?Network。
圖13??Inception?V3中三種結(jié)構(gòu)的Inception?Module
而Inception?V4相比V3主要是結(jié)合了微軟的ResNet,而ResNet將在6.4節(jié)單獨(dú)講解,這里不多做贅述。因此本節(jié)將實(shí)現(xiàn)的是Inception?V3,其整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)如表1所示。由于Google?Inception?Net?V3相對(duì)比較復(fù)雜,所以這里使用tf.contrib.slim輔助設(shè)計(jì)這個(gè)網(wǎng)絡(luò)。contrib.slim中的一些功能和組件可以大大減少設(shè)計(jì)Inception?Net的代碼量,我們只需要少量代碼即可構(gòu)建好有42層深的Inception?V3。
表1??Inception?V3網(wǎng)絡(luò)結(jié)構(gòu)
ResNet(Residual?Neural?Network)由微軟研究院的Kaiming?He等4名華人提出,通過(guò)使用Residual?Unit成功訓(xùn)練152層深的神經(jīng)網(wǎng)絡(luò),在ILSVRC?2015比賽中獲得了冠軍,取得3.57%的top-5錯(cuò)誤率,同時(shí)參數(shù)量卻比VGGNet低,效果非常突出。ResNet的結(jié)構(gòu)可以極快地加速超深神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,模型的準(zhǔn)確率也有非常大的提升。6.3節(jié)我們講解并實(shí)現(xiàn)了Inception?V3,而Inception?V4則是將Inception?Module和ResNet相結(jié)合??梢钥吹絉esNet是一個(gè)推廣性非常好的網(wǎng)絡(luò)結(jié)構(gòu),甚至可以直接應(yīng)用到Inception?Net中。本節(jié)就講解ResNet的基本原理,以及如何用TensorFlow來(lái)實(shí)現(xiàn)它。
在ResNet之前,瑞士教授Schmidhuber提出了Highway?Network,原理與ResNet很相似。這位Schmidhuber教授同時(shí)也是LSTM網(wǎng)絡(luò)的發(fā)明者,而且是早在1997年發(fā)明的,可謂是神經(jīng)網(wǎng)絡(luò)領(lǐng)域元老級(jí)的學(xué)者。通常認(rèn)為神經(jīng)網(wǎng)絡(luò)的深度對(duì)其性能非常重要,但是網(wǎng)絡(luò)越深其訓(xùn)練難度越大,Highway?Network的目標(biāo)就是解決極深的神經(jīng)網(wǎng)絡(luò)難以訓(xùn)練的問(wèn)題。Highway?Network相當(dāng)于修改了每一層的激活函數(shù),此前的激活函數(shù)只是對(duì)輸入做一個(gè)非線性變換,Highway?NetWork則允許保留一定比例的原始輸入x,即,其中T為變換系數(shù),C為保留系數(shù),論文中令。這樣前面一層的信息,有一定比例可以不經(jīng)過(guò)矩陣乘法和非線性變換,直接傳輸?shù)较乱粚?,仿佛一條信息高速公路,因此得名Highway?Network。
Highway?Network主要通過(guò)gating?units學(xué)習(xí)如何控制網(wǎng)絡(luò)中的信息流,即學(xué)習(xí)原始信息應(yīng)保留的比例。這個(gè)可學(xué)習(xí)的gating機(jī)制,正是借鑒自Schmidhuber教授早年的LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)中的gating。幾百乃至上千層深的Highway?Network可以直接使用梯度下降算法訓(xùn)練,并可以配合多種非線性激活函數(shù),學(xué)習(xí)極深的神經(jīng)網(wǎng)絡(luò)現(xiàn)在變得可行了。事實(shí)上,Highway?Network的設(shè)計(jì)在理論上允許其訓(xùn)練任意深的網(wǎng)絡(luò),其優(yōu)化方法基本上與網(wǎng)絡(luò)的深度獨(dú)立,而傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)則對(duì)深度非常敏感,訓(xùn)練復(fù)雜度隨深度增加而急劇增加。
ResNet和HighWay?Network非常類似,也是允許原始輸入信息直接傳輸?shù)胶竺娴膶又?。ResNet最初的靈感出自這個(gè)問(wèn)題:在不斷加神經(jīng)網(wǎng)絡(luò)的深度時(shí),會(huì)出現(xiàn)一個(gè)Degradation的問(wèn)題,即準(zhǔn)確率會(huì)先上升然后達(dá)到飽和,再持續(xù)增加深度則會(huì)導(dǎo)致準(zhǔn)確率下降。這并不是過(guò)擬合的問(wèn)題,因?yàn)椴还庠跍y(cè)試集上誤差增大,訓(xùn)練集本身誤差也會(huì)增大。假設(shè)有一個(gè)比較淺的網(wǎng)絡(luò)達(dá)到了飽和的準(zhǔn)確率,那么后面再加上幾個(gè)的全等映射層,起碼誤差不會(huì)增加,即更深的網(wǎng)絡(luò)不應(yīng)該帶來(lái)訓(xùn)練集上誤差上升。而這里提到的使用全等映射直接將前一層輸出傳到后面的思想,就是ResNet的靈感來(lái)源。
假定某段神經(jīng)網(wǎng)絡(luò)的輸入是x,期望輸出是,如果我們直接把輸入x傳到輸出作為初始結(jié)果,那么此時(shí)我們需要學(xué)習(xí)的目標(biāo)就是。如圖14所示,這就是一個(gè)ResNet的殘差學(xué)習(xí)單元(Residual?Unit),ResNet相當(dāng)于將學(xué)習(xí)目標(biāo)改變了,不再是學(xué)習(xí)一個(gè)完整的輸出,只是輸出和輸入的差別,即殘差。
圖14??ResNet的殘差學(xué)習(xí)模塊
圖15所示為VGGNet-19,以及一個(gè)34層深的普通卷積網(wǎng)絡(luò),和34層深的ResNet網(wǎng)絡(luò)的對(duì)比圖??梢钥吹狡胀ㄖ边B的卷積神經(jīng)網(wǎng)絡(luò)和ResNet的最大區(qū)別在于,ResNet有很多旁路的支線將輸入直接連到后面的層,使得后面的層可以直接學(xué)習(xí)殘差,這種結(jié)構(gòu)也被稱為shortcut或skip?connections。
圖15??VGG-19,直連的34層網(wǎng)絡(luò),ResNet的34層網(wǎng)絡(luò)的結(jié)構(gòu)對(duì)比
傳統(tǒng)的卷積層或全連接層在信息傳遞時(shí),或多或少會(huì)存在信息丟失、損耗等問(wèn)題。ResNet在某種程度上解決了這個(gè)問(wèn)題,通過(guò)直接將輸入信息繞道傳到輸出,保護(hù)信息的完整性,整個(gè)網(wǎng)絡(luò)則只需要學(xué)習(xí)輸入、輸出差別的那一部分,簡(jiǎn)化學(xué)習(xí)目標(biāo)和難度。
在ResNet的論文中,除了提出圖14中的兩層殘差學(xué)習(xí)單元,還有三層的殘差學(xué)習(xí)單元。兩層的殘差學(xué)習(xí)單元中包含兩個(gè)相同輸出通道數(shù)(因?yàn)闅埐畹扔谀繕?biāo)輸出減去輸入,即,因此輸入、輸出維度需保持一致)的3′3卷積;而3層的殘差網(wǎng)絡(luò)則使用了Network?In?Network和Inception?Net中的1′1卷積,并且是在中間3′3的卷積前后都使用了1′1卷積,有先降維再升維的操作。另外,如果有輸入、輸出維度不同的情況,我們可以對(duì)x做一個(gè)線性映射變換維度,再連接到后面的層。
圖16??兩層及三層的ResNet殘差學(xué)習(xí)模塊
圖17所示為ResNet在不同層數(shù)時(shí)的網(wǎng)絡(luò)配置,其中基礎(chǔ)結(jié)構(gòu)很類似,都是前面提到的兩層和三層的殘差學(xué)習(xí)單元的堆疊。
圖17??ResNet不同層數(shù)時(shí)的網(wǎng)絡(luò)配置
在使用了ResNet的結(jié)構(gòu)后,可以發(fā)現(xiàn)層數(shù)不斷加深導(dǎo)致的訓(xùn)練集上誤差增大的現(xiàn)象被消除了,ResNet網(wǎng)絡(luò)的訓(xùn)練誤差會(huì)隨著層數(shù)增大而逐漸減小,并且在測(cè)試集上的表現(xiàn)也會(huì)變好。在ResNet推出后不久,Google就借鑒了ResNet的精髓,提出了Inception?V4和Inception-ResNet-V2,并通過(guò)融合這兩個(gè)模型,在ILSVRC數(shù)據(jù)集上取得了驚人的3.08%的錯(cuò)誤率。
可見(jiàn),ResNet及其思想對(duì)卷積神經(jīng)網(wǎng)絡(luò)研究的貢獻(xiàn)確實(shí)非常顯著,具有很強(qiáng)的推廣性。在ResNet的作者的第二篇相關(guān)論文Identity?Mappings?in?Deep?Residual?Networks中,ResNet?V2被提出。ResNet?V2和ResNet?V1的主要區(qū)別在于,作者通過(guò)研究ResNet殘差學(xué)習(xí)單元的傳播公式,發(fā)現(xiàn)前饋和反饋信號(hào)可以直接傳輸,因此skip?connection的非線性激活函數(shù)(如ReLU)替換為Identity?Mappings()。同時(shí),ResNet?V2在每一層中都使用了Batch?Normalization。這樣處理之后,新的殘差學(xué)習(xí)單元將比以前更容易訓(xùn)練且泛化性更強(qiáng)。
根據(jù)Schmidhuber教授的觀點(diǎn),ResNet類似于一個(gè)沒(méi)有g(shù)ates的LSTM網(wǎng)絡(luò),即將輸入x傳遞到后面層的過(guò)程是一直發(fā)生的,而不是學(xué)習(xí)出來(lái)的。同時(shí),最近也有兩篇論文表示,ResNet基本等價(jià)于RNN且ResNet的效果類似于在多層網(wǎng)絡(luò)間的集成方法(ensemble)。ResNet在加深網(wǎng)絡(luò)層數(shù)上做出了重大貢獻(xiàn),而另一篇論文The?Power?of?Depth?for?Feedforward?Neural?Networks則從理論上證明了加深網(wǎng)絡(luò)比加寬網(wǎng)絡(luò)更有效,算是給ResNet提供了聲援,也是給深度學(xué)習(xí)為什么要深才有效提供了合理解釋。
以上,我們簡(jiǎn)單回顧了卷積神經(jīng)網(wǎng)絡(luò)的歷史,圖18所示大致勾勒出最近幾十年卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展方向。
Perceptron(感知機(jī))于1957年由Frank?Resenblatt提出,而Perceptron不僅是卷積網(wǎng)絡(luò),也是神經(jīng)網(wǎng)絡(luò)的始祖。Neocognitron(神經(jīng)認(rèn)知機(jī))是一種多層級(jí)的神經(jīng)網(wǎng)絡(luò),由日本科學(xué)家Kunihiko?Fukushima于20世紀(jì)80年代提出,具有一定程度的視覺(jué)認(rèn)知的功能,并直接啟發(fā)了后來(lái)的卷積神經(jīng)網(wǎng)絡(luò)。LeNet-5由CNN之父Yann?LeCun于1997年提出,首次提出了多層級(jí)聯(lián)的卷積結(jié)構(gòu),可對(duì)手寫(xiě)數(shù)字進(jìn)行有效識(shí)別。
圖18??卷積神經(jīng)網(wǎng)絡(luò)發(fā)展圖
可以看到前面這三次關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的技術(shù)突破,間隔時(shí)間非常長(zhǎng),需要十余年甚至更久才出現(xiàn)一次理論創(chuàng)新。而后于2012年,Hinton的學(xué)生Alex依靠8層深的卷積神經(jīng)網(wǎng)絡(luò)一舉獲得了ILSVRC?2012比賽的冠軍,瞬間點(diǎn)燃了卷積神經(jīng)網(wǎng)絡(luò)研究的熱潮。AlexNet成功應(yīng)用了ReLU激活函數(shù)、Dropout、最大覆蓋池化、LRN層、GPU加速等新技術(shù),并啟發(fā)了后續(xù)更多的技術(shù)創(chuàng)新,卷積神經(jīng)網(wǎng)絡(luò)的研究從此進(jìn)入快車道。
在AlexNet之后,我們可以將卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展分為兩類,一類是網(wǎng)絡(luò)結(jié)構(gòu)上的改進(jìn)調(diào)整(圖18中的左側(cè)分支),另一類是網(wǎng)絡(luò)深度的增加(圖18中的右側(cè)分支)。
2013年,顏水成教授的Network?in?Network工作首次發(fā)表,優(yōu)化了卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),并推廣了1′1的卷積結(jié)構(gòu)。在改進(jìn)卷積網(wǎng)絡(luò)結(jié)構(gòu)的工作中,后繼者還有2014年的Google?Inception?Net?V1,提出了Inception?Module這個(gè)可以反復(fù)堆疊的高效的卷積網(wǎng)絡(luò)結(jié)構(gòu),并獲得了當(dāng)年ILSVRC比賽的冠軍。2015年初的Inception?V2提出了Batch?Normalization,大大加速了訓(xùn)練過(guò)程,并提升了網(wǎng)絡(luò)性能。2015年年末的Inception?V3則繼續(xù)優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu),提出了Factorization?in?Small?Convolutions的思想,分解大尺寸卷積為多個(gè)小卷積乃至一維卷積。
而另一條分支上,許多研究工作則致力于加深網(wǎng)絡(luò)層數(shù),2014年,ILSVRC比賽的亞軍VGGNet全程使用3′3的卷積,成功訓(xùn)練了深達(dá)19層的網(wǎng)絡(luò),當(dāng)年的季軍MSRA-Net也使用了非常深的網(wǎng)絡(luò)。2015年,微軟的ResNet成功訓(xùn)練了152層深的網(wǎng)絡(luò),一舉拿下了當(dāng)年ILSVRC比賽的冠軍,top-5錯(cuò)誤率降低至3.46%。其后又更新了ResNet?V2,增加了Batch?Normalization,并去除了激活層而使用Identity?Mapping或Preactivation,進(jìn)一步提升了網(wǎng)絡(luò)性能。此后,Inception?ResNet?V2融合了Inception?Net優(yōu)良的網(wǎng)絡(luò)結(jié)構(gòu),和ResNet訓(xùn)練極深網(wǎng)絡(luò)的殘差學(xué)習(xí)模塊,集兩個(gè)方向之長(zhǎng),取得了更好的分類效果。
我們可以看到,自AlexNet于2012年提出后,深度學(xué)習(xí)領(lǐng)域的研究發(fā)展極其迅速,基本上每年甚至每幾個(gè)月都會(huì)出現(xiàn)新一代的技術(shù)。新的技術(shù)往往伴隨著新的網(wǎng)絡(luò)結(jié)構(gòu),更深的網(wǎng)絡(luò)的訓(xùn)練方法等,并在圖像識(shí)別等領(lǐng)域不斷創(chuàng)造新的準(zhǔn)確率記錄。至今,ILSVRC比賽和卷積神經(jīng)網(wǎng)絡(luò)的研究依然處于高速發(fā)展期,CNN的技術(shù)日新月異。當(dāng)然其中不可忽視的推動(dòng)力是,我們擁有了更快的GPU計(jì)算資源用以實(shí)驗(yàn),以及非常方便的開(kāi)源工具(比如TensorFlow)可以讓研究人員快速地進(jìn)行探索和嘗試。在以前,研究人員如果沒(méi)有像Alex那樣高超的編程實(shí)力能自己實(shí)現(xiàn)cuda-convnet,可能都沒(méi)辦法設(shè)計(jì)CNN或者快速地進(jìn)行實(shí)驗(yàn)?,F(xiàn)在有了TensorFlow,研究人員和開(kāi)發(fā)人員都可以簡(jiǎn)單而快速地設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)并進(jìn)行研究、測(cè)試、部署乃至實(shí)用。
問(wèn)題1:最新版本的TensorFlow 1.0,到底有什么實(shí)質(zhì)性的提升?如何看待加入的動(dòng)態(tài)圖?
1.0版本的TensorFlow是第一個(gè)穩(wěn)定版本,提供了可以長(zhǎng)期支持的API。相比于之前的0.12這個(gè)版本,主要添加了XLA(JIT編譯優(yōu)化),Java接口,TensorFlow Fold(動(dòng)態(tài)圖框架),同時(shí)在分布式計(jì)算上的性能也有了重大提升,目前訓(xùn)練Inception V3網(wǎng)絡(luò),在8塊GPU上可獲得7倍多的提速。
Fold主要是學(xué)習(xí)了PyTorch、Chainer、DyNet等框架,使用命令式變成,生成計(jì)算圖同時(shí)執(zhí)行計(jì)算,這樣訓(xùn)練某些網(wǎng)絡(luò),比如RNN、LSTM等更靈活。不過(guò)Fold和這些框架略有不同,它屬于使用Dynamic Batching的方式,可以對(duì)不同長(zhǎng)度、大小、尺寸的 輸入做batch訓(xùn)練,效率比PyTorch、Chainer、DyNet等完全動(dòng)態(tài)生成計(jì)算圖的方式,效率更高。
問(wèn)題2:以上談到的幾種網(wǎng)絡(luò),分別適用于什么類型的任務(wù)?
這幾種網(wǎng)絡(luò)都屬于2維的卷積網(wǎng)絡(luò),主要任務(wù)可以做圖像分類、定位等,他們功能上應(yīng)該是遞進(jìn)的關(guān)系,越新的網(wǎng)絡(luò),使用到的技術(shù)越好,性能越高,而Inception-ResNet-V2則是把這幾種網(wǎng)絡(luò)的優(yōu)勢(shì)都融為一體。
當(dāng)然,卷積網(wǎng)絡(luò)不止2維,也可以有1維的,可以處理時(shí)間序列的信號(hào);也可以有3維的,可以處理3維空間的信息,或者處理視頻信息。卷積網(wǎng)絡(luò)適應(yīng)的場(chǎng)景應(yīng)該是,輸入信號(hào)在空間上和時(shí)間上存在一定關(guān)聯(lián)性的場(chǎng)景,滿足了這個(gè)條件,都可以很好的利用深度卷積神經(jīng)網(wǎng)絡(luò)解決問(wèn)題。
問(wèn)題3:看過(guò)一些TensorFlow寫(xiě)的程序,總覺(jué)不是特別清晰簡(jiǎn)潔。Keras就是清楚的多,但Keras是否可以完全覆蓋TensorFlow的功能呢?
Keras目前已經(jīng)準(zhǔn)備正式進(jìn)入TensorFlow代碼庫(kù)了,以后可以使用Keras創(chuàng)建TensorFlow網(wǎng)絡(luò),但是功能肯定是不能完全覆蓋的。比如,多GPU、分布式訓(xùn)練,或者生成各種中間訓(xùn)練結(jié)果給TensorBoard展示,或者是一些復(fù)雜的多分支的、條件控制的網(wǎng)絡(luò)等,這些用keras都實(shí)現(xiàn)不了。但是Keras可以用來(lái)實(shí)現(xiàn)一些邏輯簡(jiǎn)單,結(jié)構(gòu)不復(fù)雜的網(wǎng)絡(luò)。
問(wèn)題4:深度學(xué)習(xí)相關(guān)的開(kāi)源社區(qū),如何能夠?qū)ζ渥龀鯟ontribution,是需要算法或網(wǎng)絡(luò)結(jié)構(gòu)上的創(chuàng)新嗎?
這個(gè)一般不用,算法或網(wǎng)絡(luò)結(jié)構(gòu)的創(chuàng)新,一般是發(fā)Paper。協(xié)助開(kāi)發(fā)一些框架就簡(jiǎn)單的多,一開(kāi)始可能是修復(fù)Bug,而后是完成一些TensorFlow開(kāi)發(fā)團(tuán)隊(duì)任務(wù)可以交給社區(qū)完成的相對(duì)簡(jiǎn)單的功能。到后面,隨著對(duì)框架和代碼的熟悉,可以逐漸參與一些有趣的新功能的開(kāi)發(fā),當(dāng)然也可以把最新出的一些論文中的網(wǎng)絡(luò)結(jié)構(gòu),實(shí)現(xiàn)在TensorFlow中,提供接口,不過(guò)這個(gè)要求就比較高了,甚至需要有開(kāi)發(fā)CUDA程序的能力。
本期公開(kāi)課中獎(jiǎng)名單:小噠、云杉、Devin-2、Baymax大大白。
恭喜以上四位讀者,每人獲得一本《TensorFlow實(shí)戰(zhàn)》書(shū)籍。請(qǐng)大家后臺(tái)回復(fù)一下姓名、地址和聯(lián)系方式,不久就將收到來(lái)自雷鋒網(wǎng)的禮物了。
更多雷鋒網(wǎng)文章:
深度學(xué)習(xí)框架太抽象?其實(shí)不外乎這五大核心組件
Caffe作者賈揚(yáng)清,教你如何打造優(yōu)秀的深度學(xué)習(xí)架構(gòu)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。