Batch Normalization详解以及BN和LN的区别

本文详细介绍了Batch Normalization(BN)的动机、算法流程和正则化角度的理解,以及BN与Layer Normalization(LN)的对比。BN通过归一化处理解决内部协变量偏移问题,加速深度神经网络的训练并改善模型泛化能力。同时,文章指出BN在小批量、在线学习、RNN及图像生成等场景中的局限性,并提及了替代方案如Layer Normalization。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近要找工作,也是复习一下面经。之前经常看过的BN也是面试中的重中之重,记得当时面试华为诺亚方舟实验室的时候,面试官就问到了我BN和LN的区别,当时也仅仅是将这两者的区别说出来了,但是并没有进行扩展,现在想想也是有点后悔的(其实当时自己也不知道该扩展啥)。在今天也就做一下总结,来概括一下这两者的区别以及BN的动机原理。

1、动机

在机器学习领域有个非常重要的假设样本之间的独立同分布,也就是训练数据和测试数据假设是满足相同分布,这样我们通过训练数据训练模型才能够在测试数据上获得较好的效果(这个独立同分布是一个前提)。 然而,往往很多时候,真实情况并不是我们希望看到的那样,也就是训练数据和测试数据往往分布会不一致,这时候往往会大大降低神经网络(其他模型也一样)的泛化能力,所以在神经网络的训练中,为了让训练数据和测试数据尽量一致,我们会对所有输入数据进行归一化处理。

那么这个和BN有啥关系呢?  BN是用来解决"Internal Covariate Shift"问题的。 首先,先解释下"Covariate shift"现象, 这个指的就是训练集的数据分布和测试集的数据分布不一致。 而"internal"表示的是神经网络隐层中的数据分布不一致问题。

也就是在神经网络的训练过程中, 每个隐藏的参数都在不停的变化,从而使得后一层的输入发生变化,从而每一批训练数据的分布也会随之改变,导致了网络在每次迭代中都需要拟合不同的数据分布,这样增大了训练的复杂度以及过拟合的风险。

所以BatchNorm的基本思想就提出来了: 能不能让每个隐层节点的激活输入分布变得稳定一点呢? 作者在图像白化操作中得到了启发(所谓白化,就是对输入数据分布变换到0均值,单位方差的正态分布, 那么神经网络会较快收敛), 从而进行推论,图像是深度神经网络的输入层,做白化能加快收敛,那么其实对于深度网络来说,其中某个隐层的神经元是下一层的输入,意思是其实深度神经网络的每一个隐层都是输入层,不过是相对下一层来说而已,那么能不能对每个隐层都做白化呢?所以BN可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作, 再白话一点,BN就是针对每一批数据在网络的每一层输入之前增加归一化处理(均值0,标准差为1), 这样就将所有的批数据强制在统一的分布下。

2、BN的算法流程

首先先看一下大佬

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值