BatchNorm+激活函数

深度学习: 激活函数 (Activation Functions)

激活函数类型
激活函数中,常用的有Sigmoid、tanh(x)、Relu、Relu6、Leaky Relu、参数化Relu、随机化Relu、ELU。

其中,最经典的莫过于 Sigmoid函数 和 Relu函数 。

ReLU6首先说明一下ReLU6,卷积之后通常会接一个ReLU非线性激活,在Mobile v1里面使用ReLU6,ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。本文提出,最后输出的ReLU6去掉,直接线性输出,理由是:ReLU变换后保留非0区域对应于一个线性变换,仅当输入低维时ReLU能保留所有完整信息。在看MobileNet v1的时候,我就疑问为什么没有把后面的ReLU去掉,因为Xception已经实验证明了Depthwise卷积后再加ReLU效果会变差,作者猜想可能是Depthwise输出太浅了应用ReLU会带来信息丢失,而MobileNet还引用了Xception的论文,但是在Depthwise卷积后面还是加了ReLU。在MobileNet v2这个ReLU终于去掉了(非紧邻,最后的ReLU),并用了大量的篇幅来说明为什么要去掉(各种很复杂的证明,你不会想自己推一遍的= =,从理论上说明了去掉ReLU的合理性)。总之,结论就是最后那个ReLU要去掉,效果更好。
参考:https://www.zhihu.com/question/265709710/answer/301079527

Conv layer

经验建议:一个完整的Conv layer因该如下运算操作顺序
Conv2D + BatchNorm + ReLU

你可能感兴趣的:(theory,of,algorithms,AI,reading)