1 前置知识
1.1 ReLU的单侧抑制
参考:RELU的单侧抑制单侧抑制含义:relu的曲线是一个折线,在小于0的部分一直为0,而在大于0的部分是一条斜率为1的直线。
单侧抑制的优点:使得部分神经元可能输出为0,相当于在本次优化中,一些神经元不参与,进而破坏了全部神经元联动优化的陷阱,使得模型更加的鲁棒。
所谓破坏联动优化陷阱,我的理解是类似于Dropout(如果模型参数过多,而训练样本过少,容易陷入过拟合。过拟合的表现主要是:在训练数据集上loss比较小,准确率比较高,但是在测试数据上loss比较大,准确率比较低。Dropout可以比较有效地缓解模型的过拟合问题,起到正则化的作用。)
单侧抑制缺点:假如某个神经元一直输出负值,则经过激活函数relu后始终输出为0,这就会导致在每一次的反向优化中,改神经元始终不参与,进而导致神经元成为死亡节点。
1.2 identity mapping 恒等函数
输入和输出相同的函数
2 如何判断是否要归一化
取决于网络结构
其实归一化和神经网络没关系,和梯度下降有关,使用了梯度下降算法的网络就需要归一化。CNN有梯度下降,所以CNN就需要归一化。
使用归一化只要是为了克服梯度下降算法带来的两个问题:
- 防止梯度爆炸;
- 能够复用他人的超参数(现有的梯度下降中的一些超参数是在归一化之后的输入数据范围内搜到的。你如果参考别人的算法超参数,只有数值计算的范围一致,才有可能达到相同的结果。)
综上,归一化的根本目的为:让模型更快更好的收敛,即加速训练
3 一般归一化到哪个区间
[-1, 1]
因为大部分网络是偏好零对称输入的
我们使用的激活函数一般都是ReLU,如果ReLU的输入都是正数,那么它其实就是一个恒等函数,有没有它都一个样,ReLU就失去了意义。
这里涉及到一个问题,如果ReLU的输入都是负数的话,会出现“死区”,即神经元输出都是0,像是去世了一般(悲伤)
为了避免这个问题,需要令ReLU的输入尽量正负平衡,比如在ReLU前加一个BN(大部分CNN都这么干)
一些其他观点
- 输入图像不用归一化,直接在输入层后加个BN。但又有人说按batch归一化不如整个数据集归一化来得稳定。
- 在神经网络中,不论输入是正是负,都有bias将输出值调整到合适的位置,因此[0,1 ]和[-1, 1]没有什么区别