[ResNet系] 004 WRN

WRN

Wide Residual Networks
Sergey Zagoruyko, Nikos Komodakisgit

Caffe實現:https://github.com/binLearnin...github

摘要

深度殘差網絡能夠擴展到上千層,而且仍然可以提高性能。可是,每提高1%的準確率就要付出將網絡層數翻倍的代價,而極深層的殘差網絡對特徵的重複利用逐漸減小(diminishing feature reuse),這會使網絡訓練變得很慢。爲了處理這個問題,本文提出一種新的架構——wide residual networks (WRNs),該架構減少殘差網絡的深度,增大網絡的寬度。實驗證實WRN要優於窄但極深的網絡,16層的WRN在準確率和效率方面要優於以前全部的殘差網絡,包括超過1000層的極深殘差網絡,WRN在CIFAR、SVHN、COCO上都取得了最佳的結果,在ImageNet上也有很大提高。官方實現(Torch)源碼地址:https://github.com/szagoruyko...網絡

1. Introduction

近幾年在多項工做中都發現了使用深層網絡的優點,可是訓練深層網絡存在一些難點,包括梯度消失/爆炸、退化現象等。多種技術有助於訓練較深層的網絡,好比精心設計的初始化策略(msra等),更好的優化器,跳躍鏈接(skip connection),知識遷移(knowledge transfer),逐層訓練(layer-wise training)等。
最近的ResNet在多個任務上都取得了最佳的結果,相比於Inception架構,ResNet具備更好的泛化能力,也就是說它提取的特徵能夠用於遷移學習。Inception-ResNet顯示了殘差鏈接能夠加速深層網絡的收斂速度,ResNet-v2考察了殘差網絡中激活函數的位置順序,顯示了恆等映射在殘差網絡中的重要性,而且利用新的架構能夠訓練極深層的網絡。Highway network也能夠訓練深層網絡,它與ResNet最大的不一樣在於它的殘差鏈接是參數門限形式的。
以前的研究基本都是着眼於殘差block中的激活函數位置順序或者殘差網絡的深度。本文從另外一個角度來提升殘差網絡性能。
Width vs depth in residual networks
ResNet爲了在增長網絡深度時保持模型包含較小參數量,將網絡設計的很「窄(thin)」,甚至引入bottleneck block使block更窄。
包含恆等映射的殘差block有助於訓練極深層網絡,但同時也是殘差網絡的一個缺點。梯度反傳時並不必定要經過殘差block中帶權值的支路(殘差函數),那麼這些殘差函數在訓練時就學習不到任何信息,因此殘差網絡中可能只有一小部分block學習到有用的表示,大多數block對最終的預測貢獻甚少。這個問題在Highway network被稱爲diminishing feature reuse。隨機深度ResNet經過在訓練時隨機丟棄ResNet中的部分層來解決這個問題,這種方法能夠視爲dropout的特例,而該方法的有效性也證實了上述假設是正確的。
本文工做基於ResNet-v2,主要考察殘差block的寬度。本文實驗顯示, 適當的增長ResNet中block的寬度比增長網絡深度能夠更有效的提高性能 ,這說明殘差網絡的能力主要由殘差block提供,網絡深度只有補充性的做用。
Use of dropout in ResNet blocks
Dropout多用於網絡中包含大量參數的最終幾層(通常是全鏈接層)來防止特徵相互適應(feature coadaptation)以及過擬合。但dropout逐漸被batch normalization (BN)取代,BN也有正則化的效果,而且實驗證實使用BN的網絡比使用dropout的網絡有更高的準確率。在本文中,加寬的殘差block包含大量參數,咱們使用dropout來防止過擬合。ResNet-v2中將dropout加到快捷鏈接支路上發現性能變差,咱們認爲dropout應該添加到殘差函數支路中,實驗證實該方法能夠提高網絡性能。架構

2. Wide residual networks

在ResNet-v2中殘差網絡有兩種形式的block:
basic —— 兩個相連的3x3卷積層,預激活(pre-activation)形式,如圖1(a)所示
bottleneck —— 一個3x3卷積層,先後各一個1x1卷積層,如圖1(b)所示
bottleneck block是爲了在增長層數時減小block的計算量,也就是使得block更窄,而咱們要考察的是加寬block的效果,因此不考慮bottleneck block,在本文架構中只使用basic形式。
圖片描述ide

有三種提高殘差block表示能力的方法:
• 向每一個block中增長更多的卷積層
• 經過增長特徵圖數量來加寬卷積層
• 增大卷積層的濾波器尺寸
VGG、Inception-v4中顯示小尺寸的濾波器更有效,因此本文不考慮尺寸大於3x3的卷積核。引入兩個因子:深度因子l,表示一個block中包含的卷積層數量;寬度因子k,卷積層輸出特徵圖數量的倍數,那麼basic block對應的l=2,k=1。圖1(a)、(c)分別展現了basic block和加寬的basic block。
表1中展現了本文提出的殘差網絡的具體配置,其中寬度因子k用來控制殘差block的寬度。
圖片描述函數

2.1 Type of convolutions in residual block

用B(M)來表示殘差block的結構,其中M表示卷積層列表,以濾波器尺寸來表明卷積層。爲了考察3x3卷積層的重要性,以及它是否能夠被其餘形式的卷積取代,本文試驗了多種形式的卷積組合:性能

  1. B(3,3) - original basic block
  2. B(3,1,3) - with one extra 1x1 layer
  3. B(1,3,1) - with the same dimensionality of all convolutions, straightened bottleneck
  4. B(1,3) - the network has alternating 1x1-3x3 convolutions everywhere
  5. B(3,1) - similar idea to the previous block
  6. B(3,1,1) - Network-in-Network style block

2.2 Number of convolutional layers per residual block

考察深度因子l對模型性能的影響,爲了保持網絡複雜度基本不變,須要同時改變l和d(d表示block的總數),也就是說增大l時應該減少d。
學習

2.3 Width of residual blocks

考察寬度因子k,當block深度因子l或者block總數d增大時,模型參數量也線性增長;而寬度因子k增大時,參數量和計算複雜度會增長k的平方倍。即便這樣,計算加寬的網絡也比窄但極深的網絡更加高效,由於GPU在並行計算大的張量時更加高效。
ResNet以前的網絡架構都是比較寬的,好比Inception和VGG。
本文以WRN-n-k表示包含n個卷積層且寬度因子爲k的WRN,也有可能加上block的形式,好比WRN-40-2-B(3,3)。優化

2.4 Dropout in residual blocks

加寬block會增長網絡的參數數量,因此要使用正則化方法。以前的殘差網絡使用BN來提供正則化的效果,但仍然須要大量的數據增廣操做。本文在殘差函數支路中加入dropout(如圖1(d)所示)來避免過擬合。在極深層殘差網絡中這樣應該能夠解決特徵重複利用逐漸減小的問題,由於dropout的加入能夠強使不一樣的殘差block學習表示。idea

3. Experimental results

分別在CIFAR-十、CIFAR-100、SVHN和ImageNet數據集上進行實驗。
Type of convolutions in a block
不一樣形式的卷積組合的性能見表2,能夠看出,具備相同參數量的block的性能基本同樣,因此後面的實驗所有選取只包含3x3卷積層的形式。
圖片描述

Number of convolutions per block
不一樣的深度因子l的性能見表3。B(3,3,3)和B(3,3,3,3)比B(3,3)性能差,多是由於網絡中的殘差鏈接減小(參考2.2),使得網絡難以優化。
圖片描述

Width of residual blocks
考察不一樣的k和網絡深度的組合,具體性能見表4。
圖片描述

表5展現了不一樣網絡的性能比較,圖2顯示了兩個表明性網絡的訓練曲線。
圖片描述

圖片描述

儘管先前的一些工做代表深度具備正則化的效果,而寬度則會致使過擬合,可是咱們成功訓練出來比1001層ResNet參數量還要多的模型,訓練耗時更短,性能也更好。
總結上述實驗結果:
• 加寬不一樣深度的殘差網絡均可以提高性能
• 在參數量過多和須要更強的正則化方法以前,增長深度和寬度都有助於提高性能
• 深度好像並無正則化的做用,具備相同參數量的寬且淺網絡能夠學習到至關或更好的表示。此外,寬網絡能夠訓練出數倍於窄網絡參數量的模型,窄網絡的深度須要加倍才能獲得相同的結果,這使得訓練幾乎不可行
Dropout in residual blocks
考察dropout的做用,具體性能見表6。
圖片描述

咱們發如今訓練殘差網絡時,在第一次和第二次下調學習率之間的時間段,驗證集損失和偏差都會震盪走高,這多是由於權值衰減(weight decay),可是調低權值衰減係數會使得準確率大幅降低。dropout能夠在大多數狀況下緩解這個問題(見圖2,3)。
圖片描述

儘管網絡中使用了BN,dropout仍然是一個有效的正則化方法。dropout能夠和加寬方法互補使用來進一步提高模型性能。
ImageNet and COCO experiments
具體結果見表7-9。
圖片描述

圖片描述

圖片描述

Computational efficiency
窄深且卷積核尺寸小的殘差網絡與GPU計算優點相悖。增長寬度能夠提升計算效率,因此寬的網絡一般更高效。考察不一樣的網絡計算耗時如圖4。
圖片描述

Implementation details
使用Torch實現,官方實現源碼地址:https://github.com/szagoruyko...

4. Conclusions

本文主要考察了殘差網絡中的寬度以及dropout的使用。實驗證實殘差網絡的能力主要由殘差block提供,並非極端的深度。另外,WRN的訓練在某些狀況下會更快。

相關文章
相關標籤/搜索