1、慎用bottleneck
如果出于模型分類精度考慮,那麼應盡量避免使用bottleneck子產品,尤其是不應當在模型的早期階段使用。CNN模型本質上是一個DAG(有向無環圖),其上資訊自底向上流動,而每一個bottleneck的使用都會損失一部分資訊,是以當我們出于計算與存儲節省而使用bottleneck時,一定要慎重。如果一定要用,也要在模型較靠後的幾層使用。
2、層寬些還是有好處的
撇開計算與記憶體開銷增加的負面因素不談,每個Conv層的kernels數目增加對于模型處理局部資訊,進而更有效地對其表達還是有好處的。畢竟多些參數就可使得每層獲得多些的表達能力。它還可使得模型收斂得更快。
3、更深的較底層(size亦小)可以使勁壓
這個是實驗多了得出來的結論。即對于網絡後面的feature maps可以使用像bottleneck那樣的子產品對其進行channels數目縮減再進行3x3 conv這樣的較大計算。在其中1x1 conv reduction op的使用不僅不會影響模型精度,反而還能使其收斂速度加快。他們給出的猜測性解釋是,後期較小size的feature maps之上的相鄰units(即channels)之間具有更加的關聯性(即備援資訊不少),是以可以折騰的厲害些(使輸出的channels變少)而不擔心資訊丢失(反而資訊被梳理的更清晰、有效)
4平衡網絡的深度與寬度
Google将深度學習網絡的設計問題視為了一個在計算能力和記憶體資源存在限定的條件下,通過有效組合、堆加各種層/子產品,進而使得模型分類精度最高的一種最優化問題。