batch normalization
begin:在神经网络训练开始前,都对输入数据做一个归一化处理;
batch normalization指的是:
在网络的每一层输入的时候,又插入一个归一化层,也就是做一个归一化处理,然后再进入网络的下一层。
归一化层:一个可学习、有参数的网络层。
变换重构.png
前向计算过程:
image.png
通过标准化操作,可以将隐层神经元激活输入 从非标准的正态分布 拉回到均值为0,方差为1的标准正态分布,这样可以保证输入值落在激活函数的激活区,避免梯度饱和,从而加速收敛。
同时,为了避免线性表达能力的丢失,在标准化操作之后,增加了一个操作,用于调整网络的线性能力和非线性能力的平衡 ==> y=γ*X’+β,每个神经元添加了γ和β参数,通过对输入进行平移和放缩,在数据分布上就相当于对标准正态分布进行平移和拉升/放缩变换,这样导致在送入激活函数后,其对应的输出从激活函数的激活区间向非激活区间(梯度饱和区)移动了一些,用于设置网络的线性能力和非线性能力的平衡,使得网络既可以享受非线性的较强表达能力的好处,又避免太靠近非线性区域两头使得网络收敛速度太慢。
作用
解决了内部协方差偏移(internal covariate shift)问题:
在深层网络训练过程中,由于网络中参数变化引起内部节点数据分布发生变化的这一过程,使得网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度;后层网络需要不断调整来适应数据分布的变化,学习速率被大大降低。
参考
https://blog.csdn.net/hjimce/article/details/50866313
https://blog.csdn.net/u014038273/article/details/79951670
网友评论