深度学习之BatchNormalization

首先关于BN的文章是这一篇,大家可以下载下来看一下。

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

貌似是两位google的大佬写的。

总结一下BN的好处:

  • 加速训练收敛速度;
  • 可以使用较大的学习率;
  • 允许在深层网络中使用sigmoid这种易导致梯度消失的激活函数,当然用relu最好,文章中也提到了;
  • 具有轻微地正则化效果,以此可以降低dropout的使用。

Convariate shift是BN论文作者提出来的概念,其意是指具有不同分布的输入值对深度网络学习的影响。(原文: When the input distribution to a learning system changes, it is said to experience covariate shift)

文章中提到,加快收敛速度可以对输入进行以下操作:

白化,线性变换0均值和单位标准差,去相关(PCA)

e是一个无穷小非0量,在tensorflow里面,默认是10-6,防止除0

输入值的分布不同,也可以理解为输入特征值的scale差异较大,与权重进行矩阵相乘后,会产生一些偏离较大地差异值;而深度学习网络需要通过训练不断更新完善,那么差异值产生的些许变化都会深深影响后层,偏离越大表现越为明显;因此,对于反向传播来说,这些现象都会导致梯度发散,从而需要更多的训练步骤来抵消scale不同带来的影响,也需要更多地步骤才能最终收敛。

  而BN的作用就是将这些输入值进行标准化,降低scale的差异至同一个范围内。这样做的好处在于一方面提高梯度的收敛程度,加快训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性,也降低了对后层网路的影响,各层网路变得相对独立。

参考文章:https://www.cnblogs.com/hutao722/p/9842199.html

猜你喜欢

转载自blog.csdn.net/qq_31638535/article/details/88554468