网站首页 > 文章精选 正文
- 一、概念简介
- 二、详细说明
- 三、为什么Batch Normalizing起作用
- 四、如何在测试集中运用BN
一、概念简介
Batch Normalizing是深度学习中最重要的技巧之一。是由Sergey Ioffe和Christian Szeged创建的。Batch Normalizing使超参数的搜索更加快速便捷,也使得神经网络鲁棒性更好。
一般来说,在训练类似逻辑回归或者深度学习的算法的时候,我们需要对输入数据进行标准化,这样可以保证输入的数据均值为0,且输入数据都在一定范围内,这样做主要原因是非标准化的数据优化的时候目标函数是一个扁平的结果,会影响学习的速度,而标准化之后的目标函数是接近圆形的结果,对于梯度下降求解来说能显著加快找到最优值的速度。如下图所示:
既然如此,那么对于深度神经网络来说,我们是否可以对每一层的输出也做一个标准化,作为下一层的输入以此来加快求解速度呢?答案是可以的,这就是Batch Normalizing。
二、详细说明
这里有一个问题,对于第l层来说,其输入是a[l-1],参数是w[l]和b[l],前向传播的计算如下:,即:
z[l]=w[l]a[l-1]+b[l]
a[l]=g(z[l])
那么BatchNormalizing是运用在求激活函数之前的z[l]上,还是用在求得激活函数之后的a[l]
上呢?这个没有定论,但是实际中用在激活函数之前的z[l]上比较多。
那么,Batch Norm的实现如下。给定某些中间值z(1),···,z(m),有:
那么标准化之后的值:
这里在分母加了一个ε的原因是防止分母出现0的情况。这个值是一个很小的值,一般不影响结果。这个时候,转换后的数值均值是0,方差是1。但是实际上,我们并不希望神经元总是这样的分布。使用另一种不同的分布是比较合理的,所以一般情况下,我们还会做如下一步计算:
这里的γ和β都是可以学习的参数。因此,和神经网络的其他参数如权重w和偏差b一样,可以使用梯度下降来学习。注意,这里的γ和β的作用是可以让你把z~(i)的均值设置成任意你想要的结果,因此,如果有如下设置:
那么实际上你就把上述公式翻转了,导致
注意,与输入参数的标准化不同的是,这里我们期望隐藏层单元的输出的均值不是0,方差不是1,而是根据激活函数来的。例如,如果你使用了sigmoid激活函数,那么你肯定不希望你的数值都集中在0左右的范围内,你希望你的数值有更大的方差,或者是在均值不为0的范围内以更好地利用sigmoid函数的非线性的优点。而不是数据指在0左右的一点范围内,因为那个范围内的sigmoid结果是个接近线性的结果。这就是使用γ和β来调整你的标准化范围的作用。
注意,正常情况下:
其中b[l]是一个常数,加不加这个常数并不会影响归一化的结果,同时后面我们使用β和γ来控制最终的标准化的均值和反差,因此也可以省去。因此,如果在深度学习中使用了Batch Normalizing,那么它的中间值z的计算就变成了:
z = wx
后面的参数b就可以全部去掉。计算的时候也少了一个参数了。但是多了γ和β。
三、为什么Batch Normalizing起作用
首先是和输入数据类似,可以使目标函数变成圆形,便于梯度下降算法求解最优解
第二个原因是在图像识别中,如果你的训练集用的是黑白图像,测试集如果是彩色的,那依然是无法识别的。也就是说,一旦输入数据X变了,那么网络必须重新训练,这种问题叫协变量问题(Covariate problem),在深度学习中,每一层的输入都是上一层的输出,因此,一旦上一层的输出变了,那么也会影响一下层的训练参数。使用了BN之后,虽然上一层的输出也会变化,但是起码还是在一定范围内,因为他们的均值和方差依然在我们的范围中,这样会减少变化,加快训练速度。
还有一点是,BN有点正则的作用。在mini-batch的训练中,归一化都是以这个某一个mini-batch为基准计算的,因此与真实的全体数据相比较,这里其实是有噪音的。与dropout类似,对每个神经元加了噪音之后可以缓解过拟合的问题。但是这只是很小的影响,所以可以和dropout一起来作用于深度学习上。因此,如果mini-batch设置大一点,也可以降低这种噪音的影响。需要注意的是一般我们也不会把BN当做正则化使用,但是它会对结果产生一些预料不到的影响,所以要注意。
四、如何在测试集中运用BN
训练集通常使用min-batch来训练,但很多时候测试集预测的测试的时候但是每次只处理一条数据,这个时候要做BN会导致没有作用。也就是说那个均值和方差与自己一样。有很多方法处理问题。例如可以计算全局数据的均值方差,来做测试集的BN参数。还有个方法是记录训练过程中每一层的均值和方差,然后使用weight average方法来把所有的均值和方差引入到测试集中。最后计算。
猜你喜欢
- 2025-06-18 讲解LDO(讲解的近义词)
- 2025-06-18 震撼!2020国际摄影奖获奖佳作欣赏
- 2025-06-18 电源芯片的选择(电源芯片如何选型)
- 2025-06-18 不只Dropout,刚刚,至少30项机器学习技术都变成了谷歌专利
- 2025-06-18 Dropout和标准化(Batch Normalization)
- 2025-06-18 麦克风将被静音,美网友都在猜:特朗普会如何应对?
- 2025-06-18 神经网络中的随机失活方法(神经网络训练数据随机)
- 2025-06-18 经验分享!2023某公司人工智能面试问题与参考答案总结,建议收藏
- 2025-06-18 电源使用前馈电容的作用与注意(前馈电路原理)
- 2025-06-18 深度学习之BN和Dropout在训练和测试时的差别
- 06-18技术分享 | Web自动化之Selenium安装
- 06-18postman系列之批量执行接口测试用例
- 06-18Junit5 架构、新特性及基本使用(常用注解与套件执行)
- 06-18「技术分享」postman完整的接口测试
- 06-18HTTP接口测试工具Postman(接口测试url)
- 06-18postman--实现接口自动化测试(postman接口自动化框架)
- 06-18讲解LDO(讲解的近义词)
- 06-18震撼!2020国际摄影奖获奖佳作欣赏
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)