深度学习--Batch Normalization


前言

机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BN层的主要作用就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布,加速网络的收敛速度。


一、为什么要用BN?

神经网络学习过程的本质是为了学习数据的特征分布,如果没有做归一化处理,那么每一批次训练数据的分布是不一样的。当训练数据与测试数据的分布不同,那么网络的泛化能力会大大下降。一旦在mini-batch梯度下降训练的时候,每批训练数据的分布不相同,那么网络就要在每次迭代的时候去学习以适应不同的分布,这样将会大大降低网络的训练速度,这就是我们需要做BN预处理的原因。并且BN层可以解决网络深度增加,训练困难的问题。如下图所示,我们只是将输入数据做归一化处理(将输入数据控制在[-1, 1]范围内),只能保证输入层数据,分布是一样的,并不能保证每层网络输入数据分布是一样的,所以也需要在神经网络的中间层加入归一化处理。该种处理方法在cifar10等数据集中效果还可以。
在这里插入图片描述

二、BN的本质及基本思想

深度神经网络的隐藏层相对于下一层来说都是输入层。BN层可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作。白化,就是对输入数据分布变换到0均值,单位方差的正态分布。
BN的基本思想如下所述:因为深层神经网络在做非线性变换前的激活输入值(y=wx+b,x是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于sigmoid函数和tanh函数来说,意味着激活输入值wx+b是大的负值或正值,此时梯度接近于0),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域(就是梯度比较大的区域),这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。总结就是经过BN后,大部分激活函数的值落入非线性函数的线性区内,其对应的导数远离导数饱和区(即梯度接近于0的区域),这样来加速训练收敛过程。但是这样会存在一个问题:激活函数的值都落在非线性函数的线性区域,即激活函数的非线性效果消失,那么此时网络的表达能力减弱,深层的意义消失。BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift),每个神经元增加了两个参数scale和shift参数,这两个参数是通过训练学习到的,意思是通过scale和shift把这个值从标准正态分布左移或者右移一点并长胖一点或者变瘦一点,每个实例挪动的程度不一样,这样等价于非线性函数的值从正中心周围的线性区往非线性区动了动。 其核心思想就是应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。
Mini-Batch SGD来说,一次训练过程里面包含m个训练实例,其具体BN操作就是对于隐层内每个神经元的激活值来说,进行如下变换。经过这个变换后某个神经元的激活x形成了均值为0,方差为1的正态分布,目的是把值往后续要进行的非线性变换的线性区拉动,增大导数值,增强反向传播信息流动性,加快训练收敛速度。但是这样会导致网络表达能力下降,为了防止这一点,每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作。
在这里插入图片描述

三、BN的具体流程

在这里插入图片描述

  1. 计算出均值
  2. 计算出方差
  3. 归一化处理,均值为0,方差为1
  4. 变换重构,恢复出这一层网络索要学到的分布
    在这里插入图片描述

四、BN的优点

① 训练速度提升很快,加快了网络的收敛过程;
② 增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;
③ 另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。
总而言之,经过这么简单的变换,带来的好处多得很,这也是为何现在BN这么快流行起来的原因。

更多内容请关注微信公众号:深度学习与路径规划
在这里插入图片描述

参考:https://www.cnblogs.com/eilearn/p/9780696.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值