BN(Batch Normalization)

1 BN的介绍

在神经网络的训练过程中, 我们一般会将输入样本的特征进行标准化处理,使数据变成均值为0, 标准差为1的高斯分布, 或者范围在0附近的分布。 因为如果数据没有进行该处理的话, 由于样本特征分布比较散, 可能会导致学习速度慢甚至难以学习。
因此一个较好的数据分布可以使神经网络的训练速度加快, 甚至效果更好。

在模型训练的时候, 由于模型参数在发生更新, 那么除了输入层的数据之外, 后面网络的每一层的输入数据分布都是一直在发生变化的。 网络中间层的训练过程中, 数据分布的改变被称为'Internal Covariate Shift' 。 而BN的提出就是 为了解决在训练过程中, 中间层数据分布发生改变的情况
Batch Normalization Layer(BN Layer)是期望我们的结果是服从高斯分布的,所以对神经元的输出进行一下修正。 论文中建议放到卷积层/FC层后, 激励层/池化层前, 而实际应用的时候有时候会放到激励层后。
论文: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift;
论文链接: https://arxiv.org/pdf/1502.03167v3.pdf

2 BN的步骤

2.1 BN的训练步骤


BN的训练步骤主要分为以下4步:

  1. 求解每个训练批次数据的均值
  2. 求解每个训练批次数据的方差
  3. 使用求得的均值和方差对该批次的数据做标准化处理, 获得0-1分布。
  4. 尺度变换和偏移: 使用标准化之后的x乘以γ调整数值大小, 再加上β增加偏移后得到输出值y。 这个γ是尺度因子, β是平移因子, 属于BN的核心精髓, 由于标准化后的x基本会被限制在正态分布下, 会使得网络的表达能力下降, 为了解决这个问题, 引入两个模型参数γ、 β进行平移变化。
    在上述中,对于每个训练批次数据,比如说,一个批次有8个样本,一个样本中,特征图尺寸为24x24,通道数量为10,那么,就会选择每个样本的同一个通道出来作BN,对于特征图上的每个位置我们会计算这个位置上,在批次中所有样本对应位置的值的均值和方差。 例如下图

2.2 BN在测试的时候

在训练的时候我们一般使用一个批次中的样本的均值和标准差进行BN操作,但是预测的时候由于样本数目不确定(比较少), 所以不好使用预测样本的均值和方差进行BN操作, 实际上在预测的时候, 使用的是训练阶段所有batch记录下来的均值和方差的期望值作为预测时候BN的均值和方差

实际实现的时候可能采用类似momentum动量法中使用的滑动平均来进行计算测试时候的均值和方差。

3 BN的优缺点

3.1 Batch Normalization优点

1 梯度传递(计算)更加顺畅, 不容易导致神经元饱和 (防止梯度消失(梯度弥散)/梯度爆炸, 允许使用饱和性激活函数<eg: sigmoid、tanh等>)
2 学习率可以设置的大一点, 加快训练速度。
3 对于模型参数的初始化方式和模型参数取值不太敏感, 使得网络学习更加稳定, 提高模型训练精度。
4 具有一定的正则化效果, 类似Dropout、 L1、 L2等正则化的效果。

3.2 Batch Normalization缺点

1 如果网络层次比较深, 加BN层的话, 可能会导致模型训练速度很慢。
2 训练批次不能设置太小, 一般建议批次大小16以上。对batchsize大小敏感, 由于每次计算均值和方差是在同一个batch上, 如果batchsize设置的太小, 计算出来的均值和方差不足以代表整个数据分布
3 BN的计算过程中需要保存某一层神经网络batch的均值和方差等统计信息, 对于固定长度的网络结构(DNN、 CNN)比较适合, 但是对于不定长度的RNN的,训练比较麻烦

相关推荐
Dongsheng_20195 分钟前
【泛3C篇】AI深度学习在手机背板外观缺陷检测应用方案
图像处理·人工智能·计算机视觉·视觉检测·边缘计算
AI360labs_atyun7 分钟前
AI教育开启新篇章
人工智能·百度·ai
成为深度学习高手32 分钟前
DGCN+informer分类预测模型
人工智能·分类·数据挖掘
Sunhen_Qiletian39 分钟前
卷积神经网络搭建实战(二)——基于PyTorch框架和本地自定义图像数据集的食物分类案例(附输入图片预测功能)
pytorch·分类·cnn
ouliten40 分钟前
cuda编程笔记(29)-- CUDA Graph
笔记·深度学习·cuda
minhuan42 分钟前
构建AI智能体:六十六、智能的边界:通过偏差-方差理论理解大模型的能力与局限
人工智能·方差·偏差·方差-偏差分解·方差-偏差权衡·模型调优
星期天要睡觉43 分钟前
深度学习——基于 ResNet18 的图像分类训练
pytorch·python·机器学习
润 下1 小时前
C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
c语言·开发语言·人工智能·经验分享·笔记·程序人生·其他
koo3641 小时前
李宏毅机器学习笔记25
人工智能·笔记·机器学习
余俊晖1 小时前
如何让多模态大模型学会“自动思考”-R-4B训练框架核心设计与训练方法
人工智能·算法·机器学习