前言
卷積神經網絡的設計自然要考慮到各層之間的順序。這種“考慮”既有原理性的解釋也有經驗方面的原因。本文主要介紹一些層常見的位置選擇,並對其原因進行分析,從中提取共性有利於其他模型的設計。
Dropout層的位置
Dropout一般放在全連接層防止過擬合,提高模型返回能力,由於卷積層參數較少,很少有放在卷積層后面的情況,卷積層一般使用batch norm。
全連接層中一般放在激活函數層之后,有的帖子說一定放在激活函數后,個人推測是因為對於部分激活函數輸入為0輸出不一定為0,可能會起不到效果,不過對於relu輸入0輸出也是0就無所謂了。
BatchNorm
BatchNorm歸一化放在激活層前后好像都有,最初LeNet有一種歸一化放在了激活層池化層后面,而現在普遍放在激活層前。
bn原文建議放在ReLU前,因為ReLU的激活函數輸出非負,不能近似為高斯分布。但有人做了實驗,發現影響不大,放在后面好像還好了一點,放在ReLU后相當於直接對每層的輸入進行歸一化,如下圖所示,這與淺層模型的Standardization是一致的。
所以在激活層前還是后還是很難下定論的,只是現在習慣放在激活層前,區別不是很大,區別大的是是否使用bn。
這里做了很多實驗,可以參考:https://github.com/ducha-aiki/caffenet-benchmark/blob/master/batchnorm.md