Batch Normalization批标准化

Ref:什么是 Batch normalization  什么是 Batch normalization_一碗风的博客-CSDN博客

深入理解Batch Normalization批标准化 https://www.cnblogs.com/guoyaohua/p/8724433.html

BN的作用: 

        特征原始的分布--> Dense+Activation(导致分布发生偏移,饱和区梯度减小/消失,收敛慢) -->BN负责调整特征分布回到原始的数据分布

为什么要强调原始呐?是因为有时候原始输入就是有偏的

        因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往激活函数的两端饱和区靠近,在激活函数的两侧,梯度是逐渐减小的,所以这导致反向传播时低层神经网络的梯度消失。而BN把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布这样使得输入值落在激活函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度

怎么保持非线性

        同时为了保持非线性,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift),每个神经元增加了两个参数scale和shift参数,这两个参数是通过训练学习到的,意思是通过scale和shift把这个值从标准正态分布左移或者右移一点并长胖一点或者变瘦一点,每个实例挪动的程度不一样,这样等价于非线性函数的值从正中心周围的线性区往非线性区动了动。核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢

至于为什么要这么做最后的公式(scale,offset)Ref:Batch normalization理解 - 简书

简单地对图层的每个输入进行规范化可能会更改图层可以表示的内容。
例如,正则化一个 sigmoid 的输入将限制他们非线性的线性状态
作者也没具体说明,在我也是不太明白其原理,只能理解为上面的变换会改变原来学习到的特征分布,因此加入了可学习的γ和β,为什么是可学习的,感觉应该是让网络自己找到一个在正态变换后不破坏原特征分布的平衡状态。

BN训练和测试时的参数是一样的嘛?

  • 训练时,BN是对每一批的训练数据进行归一化,也即用每一批数据的均值和方差
  • 测试时,比如进行一个样本的预测,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。

对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,gamma和bata。

BN训练时为什么不用全量训练集的均值和方差呢?

因为用全量训练集的均值和方差容易过拟合,对于BN,其实就是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上能够增加模型的鲁棒性,也会在一定程度上减少过拟合

也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果。 Ref:BN和Dropout在训练和测试时的差别 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值