批标准化(Batch Normalization)总结


Batch Normalization是基于mini-batch进行的,所以在下文中我们首先复习一下mini-batch是怎么一回事,然后说明为什么需要进行Batch Normalization,最后说明如何进行Batch Normalization与它的优缺点

一. Batch & mini-batch

我们来复习一下mini-batch与batch的区别:

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

二. 为什么要使用 Batch Nomalization

接着我们来看一下为什么需要Batch Nomalization
在神经网络中,为了增加模型的非线性表达能力,我们在输入与隐藏层之间、两个隐藏层之间、隐藏层与输出层之间,都需要增加一层激励函数,这个激励函数可以是ReLU(常用于图像)、也可以是tanh(输出值在-1到1之间)、sigmoid(输出在(0-1之间))等等都可以。而它们的作用就来自于它们图形的样子–非线性。
一般的神经网络中,如果没有激活函数,由于神经元之间的计算都是线性的矩阵变换,那么输入与输出之间必定是某种线性关系,而这对于我们的应用是不够的
但是一旦我们使用了激活函数,那么它也会造成一些缺点,比如说tanh函数
t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+exexex
对应图像为
在这里插入图片描述
它对于输入值在 ( − 2 , + 2 ) (-2,+2) (2,+2)时比较敏感,在这个区间内导数的绝对值较大
但是对于在这个区间以外的数据,则十分不敏感。甚至输入 t a n h ( 50 ) tanh(50) tanh(50) t a n h ( 100 ) tanh(100) tanh(100)的值也无甚区别
在这种情况下,随着神经网络深度的加深,到了后面,非标准化的数据就越来越没有用。
换句话说,计算结果的值的分布,对于激励函数是很重要的
下图便是一个例子,可以看到,经过normalization后的数据能够更有效地前向传递
在这里插入图片描述
下面这个图中,上面是经过 t a n h tanh tanh之前的输入,下面是经过之后的输出
在这里插入图片描述
很显然,经过normalization后的数据能够更好地传递到下一层进行计算。
下图中是另一个类似的例子,这样我们就可以一眼看出normalization的功效了
在这里插入图片描述

三. 如何进行 normalization

如何去进行normalization呢?实际上很简单,其实就是直接把我们的数据正态化

变量说明
Batch Normalization(简称BN)中的batch就是批量数据,即每一次优化时的样本数目,通常BN网络层用在卷积层后,用于重新调整数据分布。假设神经网络某层一个batch的输入为X=[x1,x2,…,xn],其中xi代表一个样本,n为batch size。
计算方法
首先,我们需要求得mini-batch里元素的均值:
μ B = 1 n ∑ i = 1 n x i \mu_B = \frac{1}{n}\sum_{i=1}^nx_i μB=n1i=1nxi
接下来,求取mini-batch的方差:
σ = 1 n ∑ i = 1 n ( x i − μ B ) 2 \sigma = \frac{1}{n}\sum_{i=1}^n(x_i-\mu _B)^2 σ=n1i=1n(xiμB)2
这样我们就可以对每个元素进行归一化。
x i ′ = x i − μ B σ B 2 + ϵ x'_i=\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} xi=σB2+ϵ xiμB
最后进行尺度缩放和偏移操作,这样可以变换回原始的分布,实现恒等变换,这样的目的是为了补偿网络的非线性表达能力,因为经过标准化之后,偏移量丢失。具体的表达如下,yi就是网络的最终输出。
y i = γ i ⋅ x + β i y_i=\gamma_i \cdot x+ \beta_i yi=γix+βi
假如gamma等于方差,beta等于均值,就实现了恒等变换。

四. normalization 的优缺点

优点

  1. 减轻了对参数初始化的依赖,这是利于调参的
  2. 训练更快,可以使用更高的学习率。
  3. BN一定程度上增加了泛化能力,dropout等技术可以去掉。

缺点

从上面可以看出,batch normalization依赖于batch的大小,当batch值很小时,计算的均值和方差不稳定。研究表明对于ResNet类模型在ImageNet数据集上,batch从16降低到8时开始有非常明显的性能下降,在训练过程中计算的均值和方差不准确,而在测试的时候使用的就是训练过程中保持下来的均值和方差。

这一个特性,导致batch normalization不适合以下的几种场景。

  1. batch非常小,比如训练资源有限无法应用较大的batch,也比如在线学习等使用单例进行模型参数更新的场景。
  2. rnn,因为它是一个动态的网络结构,同一个batch中训练实例有长有短,导致每一个时间步长必须维持各自的统计量,这使得BN并不能正确的使用。在rnn中,对bn进行改进也非常的困难。不过,困难并不意味着没人做,事实上现在仍然可以使用的,不过这超出了咱们初识境的学习范围。

参考

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值