Inception-v4/Inception-ResNet (2016)

Ray Lin
學以廣才
Published in
5 min readJul 12, 2018

這篇是論文 "Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning" 的學習心得。

首先了解GoogleNet的演進便可理解為何作者會說歷史包袱的原因,讓V3設計過於複雜,設計上也並非最好。另外,當時也為了模型能在DistBelief進行分佈式訓練,也是原因之一,現在都移到Tensorflow上開發了。Inception V4為了簡化V3設計,使用了不同的 Inception Block。成果也不錯,用三個殘差和一個Inception-v4的集合,Inception-ResNet在ImageNet分類挑戰的測試集上可以達到top-5 error 為 3.08%。

以下透過圖像比較來了解設計差異。首先是IncV4, IncResV1, IncResV2架構比較,然後是input到stem,由下到上分別顯示Inception block的設計差異,中間並夾雜兩個Reduction block。

架構圖比較
左邊是 IncV4 與 IncResV2, 右邊是 IncResV1 的前幾層
IncV4/IncResV1/IncResV2 的對應 Inception block A
IncV4/IncResV1/IncResV2 都用同樣的reduction block A
IncV4/IncResV1/IncResV2 之對應 Inception block B
IncV4/IncResV1/IncResV2 對應之reduction block B
IncV4/IncResV1/IncResV2 之對應 Inception block C

訓練方式

作者使用TensorFlow,在NVidia Kepler GPU上訓練的20個組相同數據,使用隨機梯度(SGD)訓練我們的網絡。 較早期的實驗是用momentum(衰減為0.9)訓練。最好的模型,是用RMSProp (decay = 0.9, ϵ = 1.0)。 Learning rate = 0.045,每兩個epochs以0.94的指數速率衰減。 並以整體參數計算的平均時間,來評估模型。

實驗結果

論文所做的測試數據,多在不同Inception版本間的比較。

而作者也提供了單一模型預估與使用ensemble的效能比較報告。

一些有趣的討論與設計

  • 作者將原本的殘差網路設計,用1x1的卷積層優化。
  • 微軟認為殘差是組成“深”且“寬”的網絡的關鍵,這篇論文覺得,殘差的效果主要體現在提高訓練穩定性。
  • Inception與ResNet結合,可以加快訓練速度。
  • Inception V4與Inception V3相比主要是對inception結構前的常規conv,pooling結果進行了改進,並加深了網絡,效果也優於之前版本。
  • Inception-v4與Inception-ResNet-v2大致相同的識別性能。
  • Inception-v3與Inception-ResNet-v1的運算複雜度相近。
  • Inception-v4與Inception-ResNet-v2的運算複雜度相近。
  • 如果Filter超過1000,會讓model訓練提早"死亡"。即使用BN層或降低學習率都無法解決。
  • 作者發現在前幾層的殘差網路,加入一定比例衰減,可解決上述問題。比例係數通常在 0.1~0.3。

Reference (推薦閱讀)

  1. 知乎的兩篇討論: 這篇這篇
  2. 簡書csdnmedium
  3. Google blog

--

--

Ray Lin
學以廣才

善歌者,使人繼其聲;善教者,使人繼其志。其言也,約而達,微而臧,罕譬而喻,可謂繼志矣