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