Inception系列之Batch-Normalization
目前,神經網絡模型為了得到更好的效果,越來越深和越來越寬的模型被提出。然而這樣會帶來以下幾個問題:
1)參數量,計算量越來越大,在有限內存和算力的設備上,其應用也就越難以落地。
2)對於一些數據集較少的場景,太大的模型反而容易過擬合,但模型太小則泛化能力不夠。
3)容易出現梯度消失的問題。
解決這些問題比較直觀的方法就是采用稀疏連接來代替全連接層,但很明顯,由於底層是通過矩陣計算的,稀疏連接在參數量上減少了,但並沒有減少計算量。
因此,google提出了Inception系列Inception_v1 ….Inception_v4,使得模型在增加深度和寬度時不會帶來參數量的巨大增加,同時也保證了計算量。
Inception體系結構的主要思想是考慮如何才能通過容易獲得的密集組件來近似和覆蓋卷積視覺網絡的最佳局部稀疏結構。假設平移不變意味着網絡將由卷積塊構建,那我們所需要的只是找到最佳的局部構造並在空間上進行重復,最后將它們聚集在一起進行輸出。為此,剛開始google提出了如下圖Figure 1所示的結構
Figure 1:這里的Filter concatenation是指在通道上疊加。
正如每個卷積塊代表一塊局部區域,在高層的空間集中度將降低(換句話說,感受野增大),這表明在高層將需要盡可能多的使用3x3, 5x5卷積核。因此這個原始版本的Inception模塊將會產生一個問題,由於每層都是在通道上堆疊累加,因此在高層時通道數將非常大,即便是少量的5x5的卷積核,也可能在高層帶來巨大的計算量,而加入池化層同樣會增加巨大的計算量。
因此,第二個想法為減少通道數。Inception_V1采用了Network-in-Network 中提到的使用1x1 卷積來改變通道數的方法,提出在3x3或5x5卷積前先進行1x1卷積,減少通道數。
其結構圖Figure 2如下:
下面的例子說明添加了1x1卷積是如何減少參數的。假設Previous layer為112x112x64, 1x1的尺寸為1x1x64, 取32個這樣的1x1x64卷積。而輸出的尺寸為112x112x128。則使用1x1卷積后的參數為64x1x1x32+32x5x5x128 = 104448, 而在此之前需要的參數量為64x5x5x128 = 204800,減少了將近一倍的參數。這里減少的倍數接近等於輸入通道數與1x1的數量的比值。
這個結構比較有用的一個方面是,通過1x1卷積的引入,即便在每層顯著地增加了單元的數量,也不會在后面的層中造成無法控制的計算量。論文中提到,這個結構比那些非Inception模型快了3-10倍,雖然在精度上比別的模型可能差一點點,但計算量卻少了非常多。
完整的網絡結構圖table 1如下:
table 1: 這里的3x3 reduce,5x5 reduce指的是在其前面添加了1x1。
其結構圖如下:
Figure3:
(1)圖中有3個softmax輸出位置,有兩個是在中間位置,這樣方便在中間層輸出分類,同時通過加權(中間0.3)的方式加到最終的分類結果中。同時,還能給模型增加反向傳播的梯度信號,緩解了梯度消失問題,在一定程度上也有正則化的效果。在推理階段,這兩個softmax將會去除。
(2)使用了平均池化來代替全連接層,論文提到這樣可以提高0.6%的准確率,但還是添加了一層FC,這是為了方便對輸出進行調整,並且也使用了Dropout。
(3)關於table1中的Inception 3a 3b 4a 4b 4c等,區分方式是匯合的MaxPool層和DepthConcat。
(4)圖像輸入都經過了去均值,即每個位置減去整體均值。
如有錯誤或不合理之處,歡迎在評論中指正。
本文來源於微信公眾號“ CV技術指南 ” 。更多內容與最新技術動態盡在公眾號發布。
歡迎掃描下方二維碼關注公眾號“CV技術指南”,主要進行計算機視覺方向的論文解讀,最新技術跟蹤,以及CV技術的總結。
原創文章第一時間在公眾號中更新,博客只在有空時間才更新少量公眾號文章