首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于批标准化的基础认知

统计机器学习中一个经典假设:训练数据和测试数据满足相同的分布。保障通过训练数据获得的模型能够在测试集上获得很好地泛化效果。

当训练集和目标样本集分布不一致时,训练得到的模型无法很好地泛化,即条件概率一致,但是其边缘概率不同。这种现象就是内部协变量转移(Covariate Shift)。对于神经网络的各层输出,在经过了层内操作后,各层输出分布就会与对应的输入信号呈现不同的分布,而且随着网络深度增大,差异会越来越大,但每一层所指向的label值是保持不变的。

如何解决这种问题呢?

通过引入Batch Normalization来标准化某些层或所有层的输入,从而固定每层输入数据的均值和方差。

批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanishing Gradient Problem)。

通过引入Batch Normalization来标准化某些层或所有层的输入,从而固定每层输入数据的均值和方差。

Batch Normalization 层一般用在激活函数之前。 让每一层的输入的分布变得稳定,从而有利于神经网络的训练。通过标准化让激活函数分布在线性区间,加大梯度,让模型更大胆的进行梯度下降。主要优点:

a、加大搜索步长,加快收敛速度;

b、更容易跳出局部最小值;

c、一定程度上缓解过拟合问题。

因此,遇到收敛速度很慢、梯度爆炸等无法训练的情况,都可以尝试使用Batch Normalization。

实际使用过程中,请注意以下内容:1 在训练阶段

训练的时候需要注意两点,(1)输入参数update_ops到最后的train_op中)。这样才能计算μ和σ的滑动平均(测试时会用到)

update_op =tf.get_collection(tf.GraphKeys.UPDATE_OPS) with tf.control_dependencies(update_op): train_op= optimizer.minimize(loss)

2 在测试阶段

测试时需要注意一点,输入参数

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725G0WF2G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券