CNN模型之ResNet

深度殘差網(wǎng)絡(luò)(Deep Residual Network夸溶,ResNet)的提出是CNN圖像史上的里程碑事件顽频。ResNet在ILSVRC和COCO 2015上的取得了五項(xiàng)第一毙沾,ResNet的作者何凱明也因此摘得CVPR2016最佳論文獎(jiǎng)(鏈接:https://arxiv.org/pdf/1512.03385.pdf

ResNet主要解決深度CNN網(wǎng)絡(luò)難訓(xùn)練的問(wèn)題窑睁,從圖一可以看出归形,14年的VGG才19層托慨,而15年的ResNet多達(dá)152層,雖然ResNet確實(shí)好像是靠深度取勝暇榴,但是ResNet還有架構(gòu)上的trick厚棵,這才使得網(wǎng)絡(luò)的深度發(fā)揮出作用,這個(gè)trick就是殘差學(xué)習(xí)(Residual learning)蔼紧。下面詳細(xì)講述ResNet的理論及實(shí)現(xiàn)婆硬。
1-ImageNet分類Top5誤差
1 深度網(wǎng)絡(luò)的退化問(wèn)題

從經(jīng)驗(yàn)來(lái)看,網(wǎng)絡(luò)的深度對(duì)模型的性能至關(guān)重要奸例,當(dāng)增加網(wǎng)絡(luò)層數(shù)后彬犯,網(wǎng)絡(luò)可以進(jìn)行更加復(fù)雜的特征模式的提取,所以當(dāng)模型更深時(shí)理論上可以取得更好的結(jié)果查吊,從圖一也可以看出網(wǎng)絡(luò)越深而效果越好的一個(gè)實(shí)踐證據(jù)谐区。但是更深的網(wǎng)絡(luò)性能一定會(huì)更好嗎?實(shí)驗(yàn)發(fā)現(xiàn)深度網(wǎng)絡(luò)出現(xiàn)了退化問(wèn)題(Degradation problem):網(wǎng)絡(luò)深度增加時(shí)菩貌,網(wǎng)絡(luò)準(zhǔn)確度出現(xiàn)飽和卢佣,甚至出現(xiàn)下降。這個(gè)現(xiàn)象可以從圖二中直觀看出來(lái):56層的網(wǎng)絡(luò)比20層網(wǎng)絡(luò)的效果還要差箭阶。這不會(huì)是過(guò)擬合問(wèn)題虚茶,因?yàn)?6層網(wǎng)絡(luò)的訓(xùn)練誤差同樣高。我們知道深層網(wǎng)絡(luò)存在著梯度爆炸或者梯度消失的問(wèn)題仇参,這使得深度學(xué)習(xí)模型很難訓(xùn)練嘹叫。但是現(xiàn)在已經(jīng)存在一些技術(shù)手段如BatchNorm來(lái)解決這個(gè)問(wèn)題,因此出現(xiàn)深度網(wǎng)絡(luò)的退化問(wèn)題是非常令人詫異的诈乒。
2-20層與56層網(wǎng)絡(luò)在CIFAR-10上的誤差
2 殘差學(xué)習(xí)

2.1 殘差塊
深度網(wǎng)絡(luò)的退化問(wèn)題至少說(shuō)明深度網(wǎng)絡(luò)不容易訓(xùn)練罩扇。但是我們考慮這樣一個(gè)事實(shí):現(xiàn)在你有一個(gè)淺層網(wǎng)絡(luò),你想通過(guò)向上堆積新層來(lái)建立深層網(wǎng)絡(luò),一個(gè)極端情況是這些增加的層什么也不學(xué)習(xí)喂饥,僅僅復(fù)制淺層網(wǎng)絡(luò)的特征消约,即這樣新層是恒等映射(Identity mapping)。在這種情況下员帮,深層網(wǎng)絡(luò)應(yīng)該至少和淺層網(wǎng)絡(luò)性能一樣或粮,也不應(yīng)該出現(xiàn)退化現(xiàn)象。好吧捞高,你不得不承認(rèn)肯定是目前的訓(xùn)練方法有問(wèn)題氯材,才使得深層網(wǎng)絡(luò)很難去找到一個(gè)好的參數(shù)。
這個(gè)有趣的假設(shè)讓何博士靈感爆發(fā)硝岗,他提出了殘差學(xué)習(xí)來(lái)解決退化問(wèn)題氢哮。對(duì)于一個(gè)堆積層結(jié)構(gòu)(幾層堆積而成)當(dāng)輸入為x時(shí)其學(xué)習(xí)到的特征記為H(x),現(xiàn)在我們希望其可以學(xué)習(xí)到殘差F(x) = H(x) - x型檀,這樣其實(shí)原始的學(xué)習(xí)特征是F(x) + x冗尤。之所以這樣是因?yàn)闅埐顚W(xué)習(xí)相比原始特征直接學(xué)習(xí)更容易。當(dāng)殘差為0時(shí)贱除,此時(shí)堆積層在輸入特征基礎(chǔ)上學(xué)習(xí)到新的特征生闲,從而擁有更好的性能媳溺。殘差學(xué)習(xí)的結(jié)構(gòu)如圖三所示月幌,這有點(diǎn)類似于電路中的“短路”,所以是一種短路連接(shortcut connection)悬蔽。

3-殘差學(xué)習(xí)單元
為什么殘差學(xué)習(xí)相對(duì)更容易扯躺,從直觀上看殘差學(xué)習(xí)需要學(xué)習(xí)的內(nèi)容少,因?yàn)闅埐钜话銜?huì)比較小蝎困,學(xué)習(xí)難度小點(diǎn)录语,一個(gè)殘差塊可以表示成如圖四:
4-殘差塊
圖中的Weight在卷積網(wǎng)絡(luò)中是指卷積操作,addition是指單位加操作禾乘。
從數(shù)學(xué)的角度來(lái)分析這個(gè)問(wèn)題澎埠,殘差單元可以表示為
殘差塊數(shù)學(xué)表示
其中Xl和Xl+1分別表示的是第l個(gè)殘差單元的輸入和輸出;h(xl) = xl表示恒等映射始藕,反映在圖四是左邊的灰色部分蒲稳;F是殘差函數(shù),表示學(xué)習(xí)到的殘差伍派,它一般由兩三個(gè)卷積操作構(gòu)成江耀,即圖四中右側(cè)包含卷積的部分;f是ReLU激活函數(shù)诉植。

2.2 殘差網(wǎng)絡(luò)
殘差網(wǎng)絡(luò)的搭建分為兩步
1:使用VGG公式搭建Plain VGG
2:在Plain VGG的卷積網(wǎng)絡(luò)之前插入Identity Mapping祥国,注意需要升維或者降維的時(shí)候加入1*1卷積
在實(shí)現(xiàn)過(guò)程中,一般是直接stack殘差塊的方式晾腔。

def resnet_v1(x):
    x = Conv2D(kernel_size=(3,3), filters=16, strides=1, padding='same', activation='relu')(x)
    x = res_block_v1(x, 16, 16)
    x = res_block_v1(x, 16, 32)
    x = Flatten()(x)
    outputs = Dense(10, activation='softmax', kernel_initializer='he_normal')(x)
    return outputs

2.3 為什么叫殘差網(wǎng)絡(luò)
在統(tǒng)計(jì)學(xué)中舌稀,殘差和誤差是兩個(gè)很容易混淆的概念啊犬。誤差是衡量觀測(cè)值(模型的輸入)和真實(shí)值之間的差距,殘差是指預(yù)測(cè)值(模型的輸出)和觀測(cè)值之間的差距壁查。對(duì)于殘差網(wǎng)絡(luò)的命名原因椒惨,作者給出的解釋是,網(wǎng)絡(luò)的一層通吵弊铮可以看做 y=H(x) 康谆,而殘差網(wǎng)絡(luò)的一個(gè)殘差塊可以表示為 H(x) = F(x) + x,也就是 F(x) = H(x) -x嫉到,在單位映射中沃暗,y = x 便是觀測(cè)值,而 H(x) 是預(yù)測(cè)值何恶,所以 F(x) 便對(duì)應(yīng)著殘差孽锥,因此叫做殘差網(wǎng)絡(luò)。

3 殘差網(wǎng)絡(luò)的背后原理

殘差塊一個(gè)更通用的表示方式是

現(xiàn)在我們先不考慮升維或者降維的情況细层,那么在上式中惜辑,我們首先給出兩個(gè)假設(shè),h是直接映射疫赎,f是激活函數(shù)盛撑,一般使用ReLU,也是直接映射捧搞〉治溃基于上式,我們求得從淺層l到深層L的學(xué)習(xí)特征為:
這個(gè)公式反映了L層可以表示為任意一個(gè)比它淺的l層和他們之間殘差部分之和胎撇。
利用BP中使用的鏈?zhǔn)揭?guī)則介粘,可以求得反向過(guò)程的梯度:
上面公式反映了殘差網(wǎng)絡(luò)的兩個(gè)屬性:
1,在整個(gè)訓(xùn)練過(guò)程中晚树,對(duì)F(xi,Wi)對(duì)xl的偏導(dǎo)(即括號(hào)里的那個(gè)公式)不可能一直為-1姻采,也就是說(shuō)在殘差網(wǎng)絡(luò)中不會(huì)出現(xiàn)梯度消失的問(wèn)題
2,損失函數(shù)對(duì)xL求得偏導(dǎo)(即上式第一個(gè)等式后的第一個(gè)公式)表示L層的梯度可以直接傳遞到任何一個(gè)比它淺的l層爵憎。
通過(guò)分析殘差網(wǎng)絡(luò)的正向和反向的兩個(gè)過(guò)程慨亲,我們發(fā)現(xiàn),當(dāng)殘差塊滿足上面兩個(gè)假設(shè)時(shí)纲堵,信息可以非常暢通地在高層和低層之間相互傳導(dǎo)巡雨,說(shuō)明這兩個(gè)假設(shè)是讓殘差網(wǎng)絡(luò)可以訓(xùn)練深度模型的充分條件
那么這兩個(gè)假設(shè)是必要條件嗎席函?
3.1 直接映射是最好的選擇
對(duì)于假設(shè)1铐望,我們采用反證法,假設(shè)h(xl) = axl,那么這時(shí)候正蛙,殘差塊表示為(圖中的系數(shù)就是a):
對(duì)于更深層的L層督弓,
為了簡(jiǎn)化問(wèn)題,我們只考慮公式的左半部分乒验,忽略加號(hào)之后的部分愚隧,損失函數(shù)對(duì)xl求偏微分得
上面公式反映了兩個(gè)屬性:
1,當(dāng)系數(shù)a>1時(shí)锻全,很有可能發(fā)生梯度爆炸狂塘;
2,當(dāng)系數(shù)a<1時(shí)鳄厌,梯度變成0荞胡,會(huì)阻礙殘差網(wǎng)絡(luò)信息的反向傳遞,從而影響殘差網(wǎng)絡(luò)的訓(xùn)練了嚎。
所以系數(shù)a必須為1泪漂。同理,其他常見的激活函數(shù)都會(huì)產(chǎn)生和上面的例子類似的阻礙信息反向傳播的問(wèn)題歪泳。
對(duì)于其他不影響梯度的h()萝勤,例如LSTM中的門機(jī)制,或者Dropout以及用于降維的1*1卷積也許會(huì)有效果呐伞,

作者采用了實(shí)驗(yàn)的方法進(jìn)行驗(yàn)證敌卓,實(shí)驗(yàn)結(jié)果表明,在所有的變異模型中荸哟,依舊是直接映射的效果最好假哎。
3.2 激活函數(shù)的位置
上面提出的殘差塊可以詳細(xì)展開如下圖a,即在卷積之后使用BN做歸一化鞍历,然后在和直接映射單位加之后使用ReLU作為激活函數(shù)。
激活函數(shù)在殘差網(wǎng)絡(luò)中的應(yīng)用
作者通過(guò)調(diào)整ReLU和BN的使用位置得到了幾個(gè)變種肪虎,即d中的ReLU-only pre-activation和5.d中的 full pre-activation劣砍。作者通過(guò)對(duì)照試驗(yàn)對(duì)比了這幾種變異模型,結(jié)果表明將激活函數(shù)移動(dòng)到殘差部分可以提高模型的精度扇救。
該網(wǎng)絡(luò)一般就在resnet_v2刑枝,keras實(shí)現(xiàn)如下:

def res_block_v2(x, input_filter, output_filter):
    res_x = BatchNormalization()(x)
    res_x = Activation('relu')(res_x)
    res_x = Conv2D(kernel_size=(3,3), filters=output_filter, strides=1, padding='same')(res_x)
    res_x = BatchNormalization()(res_x)
    res_x = Activation('relu')(res_x)
    res_x = Conv2D(kernel_size=(3,3), filters=output_filter, strides=1, padding='same')(res_x)
    if input_filter == output_filter:
        identity = x
    else: #需要升維或者降維
        identity = Conv2D(kernel_size=(1,1), filters=output_filter, strides=1, padding='same')(x)
    output= keras.layers.add([identity, res_x])
    return output

def resnet_v2(x):
    x = Conv2D(kernel_size=(3,3), filters=16 , strides=1, padding='same', activation='relu')(x)
    x = res_block_v2(x, 16, 16)
    x = res_block_v2(x, 16, 32)
    x = BatchNormalization()(x)
    y = Flatten()(x)
    outputs = Dense(10, activation='softmax', kernel_initializer='he_normal')(y)
    return outputs
4 殘差網(wǎng)絡(luò)與模型集成

Andreas Veit等人的論文[3]指出殘差網(wǎng)絡(luò)可以從模型集成的角度理解。如下圖所示迅腔,對(duì)于一個(gè)3層的殘差網(wǎng)絡(luò)可以展開成一棵含有8個(gè)節(jié)點(diǎn)的二叉樹装畅,而最終的輸出便是這8個(gè)節(jié)點(diǎn)的集成。而他們的實(shí)驗(yàn)也驗(yàn)證了這一點(diǎn)沧烈,隨機(jī)刪除殘差網(wǎng)絡(luò)的一些節(jié)點(diǎn)掠兄,網(wǎng)絡(luò)的性能變化較為平滑,而對(duì)于VGG等stack到一起的網(wǎng)絡(luò)來(lái)說(shuō),隨機(jī)刪除一些節(jié)點(diǎn)后蚂夕,網(wǎng)絡(luò)的輸出將完全隨機(jī)迅诬。
殘差網(wǎng)絡(luò)展開成二叉樹
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市婿牍,隨后出現(xiàn)的幾起案子侈贷,更是在濱河造成了極大的恐慌,老刑警劉巖等脂,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俏蛮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡上遥,警方通過(guò)查閱死者的電腦和手機(jī)嫁蛇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)露该,“玉大人睬棚,你說(shuō)我怎么就攤上這事〗庥祝” “怎么了抑党?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撵摆。 經(jīng)常有香客問(wèn)我底靠,道長(zhǎng),這世上最難降的妖魔是什么特铝? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任暑中,我火速辦了婚禮,結(jié)果婚禮上鲫剿,老公的妹妹穿的比我還像新娘鳄逾。我一直安慰自己,他們只是感情好灵莲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布雕凹。 她就那樣靜靜地躺著,像睡著了一般政冻。 火紅的嫁衣襯著肌膚如雪枚抵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天明场,我揣著相機(jī)與錄音汽摹,去河邊找鬼。 笑死苦锨,一個(gè)胖子當(dāng)著我的面吹牛逼泣,可吹牛的內(nèi)容都是我干的趴泌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼圾旨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踱讨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起砍的,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痹筛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后廓鞠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帚稠,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年床佳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滋早。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砌们,死狀恐怖杆麸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浪感,我是刑警寧澤昔头,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站影兽,受9級(jí)特大地震影響揭斧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峻堰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一讹开、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捐名,春花似錦旦万、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梅忌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間除破,已是汗流浹背牧氮。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瑰枫,地道東北人踱葛。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓丹莲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尸诽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甥材,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容