這篇是論文 "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。
訓練方式
作者使用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。