深度学习基础—Batch Norm

对于一个神经网络我们知道,归一化输入特征是加速网络训练的技巧之一,因为归一化后,损失函数的图像就会由狭长变得更圆,那么这是否启发我们,在深度更深模型中,对各层的输出进行归一化,有益于下一层的学习?毕竟上一层的输出是下一层的输入。这就是Batch Norm的核心作用。

由于每一层的参数更新后,对于同一输入,输出的分布就会发生改变(这称之为Covariate shift: 内部协变量偏移),这带来的影响是下一层需要不断适应上一层输出的分布,从而导致下一层与上一层之间的联系紧密(有点过拟合的意思),通过归一化就可以加强层与层之间的独立性,从而加速网络的学习。

1.Batch Norm的计算方式


在此先讲讲Batch Norm和Mini-batch之间的关系。Mini-batch是Mini-batch梯度下降法的训练集的最小划分子集,而Batch Norm需要在Mini-batch上运行,即需要计算每一个Mini-batch的均值、方差,然后进行归一化。

深度学习基础---梯度问题与Mini-batch 梯度下降http://t.csdnimg.cn/EBmIH

(1)计算 Mini-batch 的均值

其中,m为Mini-batch 上样本的数量。

(2)计算 Mini-batch 的方差

其中,m为Mini-batch 上样本的数量,注意是先平方再求和。

(3)归一化

其中,z[l]是本层的输入经过w和b的计算结果,分母的ℇ是很小的一个数,防止分母为0。通过这样可以将z[l]归一化,从而化为均值为0,方差为1的分布。

(4)线性组合

其中,γ和β是网络的参数,即和w、b一样需要经过训练更新值,从而适应网络。当γ=步骤(3)的分母,β=μ时,本步的结果是一个恒等式。

为了加强网络的学习能力,使用这两个参数来改变分布的平均值。如果没有这两个参数,那么相当于所有的都暴力归一化,而我们知道类似sigmoid激活函数的图像如下,在靠近0的位置图像近似等于线性函数,那么网络的表达能力就会大大减弱,因此通过这两个网络参数加强网络的学习能力。

2.Batch Norm在网络中的具体应用

如上图所示的网络,在没有进行归一化前,每层隐含层的计算是在下图中去除红框的剩余部分,g(z)是激活函数。在权重的线性组合后,激活函数前添加归一化的计算(为什么不在激活函数后添加,这点一直饱受争议,这里选择这种方式,无论是哪种方式,只要能对网络训练有帮助,就是不错的方法)。

对于每一层隐含层,向前传播就是按照上图的流程进行计算,直到计算出损失,向后传播的过程中,可以使用优化算法:mini-batch梯度下降、动量梯度下降、Adam等等,对参数γ和β进行和w、b一样的更新方式。这里简化流程,使用mini-batch梯度下降,算法流程如下:

for i = 1......t{
    对X{i}向前传播
        在每个隐含层计算z[l],并用BN归一化
    计算带有正则项的损失函数
    向后传播,计算dw、db、dγ、dβ
        更新参数:w:=w-a*dw;
                 b:=b-a*db;
                 γ:=γ-a*dγ;
                 β:=β-a*dβ;
}

实际上,在网络的训练过程中,参数b和参数β发生了冲突,两者的作用相似。因为z=w*x+b,计算的平均值μ中就包含常数b,那在归一化步骤(3)中分子又减去了平均值,即减去了b。同时在步骤(4)中添加了参数β,此时b不发挥作用,发挥作用的是β。因此,实际训练中,为了减少参数个数,可以选择去除参数b,那么在优化算法是也可以不再优化这个参数。

3.Batch Norm在测试集的具体应用

在测试集中,为了预测某个样本的输出结果,需要单独处理样本。这样就引入一个问题,单个样本的均值和方差没有意义,因此使用Batch Norm起不了作用,这就需要我们估计平均值和方差,于是可以使用指数加权移动平均值算法来进行估计。

在训练网络的时候,我们可以运用指数加权移动平均值获得整个训练集的各层平均值μ[t][l]、方差σ[t][l]和z[t][l](t为Mini-batch的序号,l为层的序号),在测试的时候,用这些估值计算z[t][l]norm,从而计算测试样本的输出。这样做的本质其实是实现测试集和训练集来自同一分布的要求,因为在训练集都实现了Batch Norm,所以也要在测试集实现Batch Norm。

4.如何理解Batch Norm

(1)Batch Norm可以对每一层的输出进行归一化,这样每一层的输入就更加稳定,从而可以选择较大的学习率加速网络的训练。

(2)减少过拟合风险,提高模型泛化能力,同时让各层保持相对独立,提高学习能力。这就像抄作业,学霸每次给的作业如果详细程度不一样,比如这次给详细版,下次只给有关键词的,那么学渣就会特别依赖学霸,因为学渣无法从抄作业中获取如何解题的思路。但是如果学霸每次都给学渣详细版或简略版作业,由于作业风格一致,学渣就能从多次作业中找到作业的风格(至少可以学会些如何解题的规律或模版),从而提高学渣独立思考的能力。

(3)类似dropout,dropout随机消除神经元,从而为网络添加噪音,让神经元不再相互依赖。而Batch Norm由于对均值的缩放和在mini-batch上计算,也会为网络添加噪音,同时让各层相对独立,不再相互依赖。因此有一定的正则化效果,减轻过拟合。但是不要把这种方法当做正则化的手段,而是加速学习的技巧。

相关推荐
安逸sgr7 分钟前
1、CycleGAN
pytorch·深度学习·神经网络·生成对抗网络
FL162386312918 分钟前
[数据集][目标检测]俯拍航拍森林火灾检测数据集VOC+YOLO格式6116张2类别
人工智能·深度学习·目标检测
华清远见成都中心18 分钟前
哪些人适合学习人工智能?
人工智能·学习
qq_5503379924 分钟前
研1日记14
人工智能·深度学习·机器学习
i嗑盐の小F31 分钟前
【IEEE&ACM Fellow、CCF组委】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)
人工智能·深度学习·算法·机器学习·自然语言处理·信号处理
nfgo1 小时前
Apollo自动驾驶项目(二:cyber框架分析)
人工智能·自动驾驶·unix
h177113472051 小时前
基于区块链的相亲交易系统源码解析
大数据·人工智能·安全·系统架构·交友
HPC_fac130520678161 小时前
RTX 4090 系列即将停产,RTX 5090 系列蓄势待发
服务器·人工智能·gpu算力
xuehaisj2 小时前
论文内容分类与检测系统源码分享
人工智能·分类·数据挖掘
大耳朵爱学习2 小时前
大模型预训练的降本增效之路——从信息密度出发
人工智能·深度学习·机器学习·自然语言处理·大模型·llm·大语言模型