0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

batch normalization时的一些缺陷

深度学习自然语言处理 来源:深度学习自然语言处理 作者:Sahil Uppal 2020-11-03 17:27 次阅读

导读

batch normalization时的一些缺陷。

Batch Normalization确实是深度学习领域的重大突破之一,也是近年来研究人员讨论的热点之一。Batch Normalization是一种被广泛采用的技术,使训练更加快速和稳定,已成为最有影响力的方法之一。然而,尽管它具有多种功能,但仍有一些地方阻碍了该方法的发展,正如我们将在本文中讨论的那样,这表明做归一化的方法仍有改进的余地。

我们为什么要用Batch Normalization?

在讨论任何事情之前,首先,我们应该知道Batch Normalization是什么,它是如何工作的,并讨论它的用例。

什么是Batch Normalization

在训练过程中,当我们更新之前的权值时,每个中间激活层的输出分布会在每次迭代时发生变化。这种现象称为内部协变量移位(ICS)。所以很自然的一件事,如果我想防止这种情况发生,就是修正所有的分布。简单地说,如果我的分布变动了,我会限制住这个分布,不让它移动,以帮助梯度优化和防止梯度消失,这将帮助我的神经网络训练更快。因此减少这种内部协变量位移是推动batch normalization发展的关键原则。

它如何工作

Batch Normalization通过在batch上减去经验平均值除以经验标准差来对前一个输出层的输出进行归一化。这将使数据看起来像高斯分布。

其中μ和*σ^2^*分别为批均值和批方差。

并且,我们学习了一个新的平均值和协方差γ和β。所以,简而言之,你可以认为batch normalization是帮助你控制batch分布的一阶和二阶动量。

vgg16网络的中间卷积层的特征分布输出。(左)没有任何归一化,(右)应用了batch normalization

优点

我将列举使用batch normalization的一些好处,但是我不会详细介绍,因为已经有很多文章讨论了这个问题。

更快的收敛。

降低初始权重的重要性。

鲁棒的超参数。

需要较少的数据进行泛化。

1. 更快的收敛,2. 对超参数更鲁棒

Batch Normalization的诅咒

好,让我们回到本文的出发点,在许多情况下batch normalization开始伤害性能或根本不起作用。

在使用小batch size的时候不稳定

如上所述,batch normalization必须计算平均值和方差,以便在batch中对之前的输出进行归一化。如果batch大小比较大的话,这种统计估计是比较准确的,而随着batch大小的减少,估计的准确性持续减小。

ResNet-50在Batch Norm使用32、16、8、4、2张/GPU图像时的验证错误

以上是ResNet-50的验证错误图。可以推断,如果batch大小保持为32,它的最终验证误差在23左右,并且随着batch大小的减小,误差会继续减小(batch大小不能为1,因为它本身就是平均值)。损失有很大的不同(大约10%)。

如果batch大小是一个问题,为什么我们不使用更大的batch?我们不能在每种情况下都使用更大的batch。在finetune的时候,我们不能使用大的batch,以免过高的梯度对模型造成伤害。在分布式训练的时候,大的batch最终将作为一组小batch分布在各个实例中。

导致训练时间的增加

NVIDIA和卡耐基梅隆大学进行的实验结果表明,“尽管Batch Normalization不是计算密集型,而且收敛所需的总迭代次数也减少了。”但是每个迭代的时间显著增加了,而且还随着batch大小的增加而进一步增加。

ResNet-50 在ImageNet上使用 Titan X Pascal

你可以看到,batch normalization消耗了总训练时间的1/4。原因是batch normalization需要通过输入数据进行两次迭代,一次用于计算batch统计信息,另一次用于归一化输出。

训练和推理时不一样的结果

例如,在真实世界中做“物体检测”。在训练一个物体检测器时,我们通常使用大batch(YOLOv4和Faster-RCNN都是在默认batch大小= 64的情况下训练的)。但在投入生产后,这些模型的工作并不像训练时那么好。这是因为它们接受的是大batch的训练,而在实时情况下,它们的batch大小等于1,因为它必须一帧帧处理。考虑到这个限制,一些实现倾向于基于训练集上使用预先计算的平均值和方差。另一种可能是基于你的测试集分布计算平均值和方差值。

对于在线学习不好

与batch学习相比,在线学习是一种学习技术,在这种技术中,系统通过依次向其提供数据实例来逐步接受训练,可以是单独的,也可以是通过称为mini-batch的小组进行。每个学习步骤都是快速和便宜的,所以系统可以在新的数据到达时实时学习。

典型的在线学习pipeline

由于它依赖于外部数据源,数据可能单独或批量到达。由于每次迭代中batch大小的变化,对输入数据的尺度和偏移的泛化能力不好,最终影响了性能。

对于循环神经网络不好

虽然batch normalization可以显著提高卷积神经网络的训练和泛化速度,但它们很难应用于递归结构。batch normalization可以应用于RNN堆栈之间,其中归一化是“垂直”应用的,即每个RNN的输出。但是它不能“水平地”应用,例如在时间步之间,因为它会因为重复的重新缩放而产生爆炸性的梯度而伤害到训练。

[^注]: 一些研究实验表明,batch normalization使得神经网络容易出现对抗漏洞,但我们没有放入这一点,因为缺乏研究和证据。

可替换的方法

这就是使用batch normalization的一些缺点。在batch normalization无法很好工作的情况下,有几种替代方法。

Layer Normalization

Instance Normalization

Group Normalization (+ weight standardization)

Synchronous Batch Normalization

总结

所以,看起来训练深度神经网络很简单,但我不认为它很容易。从这个意义上说,我可以选择的架构很少,每个模型都有固定的学习速度,固定的优化器和固定的技巧。这些技巧是通过自然选择选择的,就像有人想出了一些技巧,人们引入之后如果有效,就会保留,如果无效,人们最终会忘记,并没有人再去使用它。除此之外,batch normalization是深度学习发展中的一个里程碑技术。然而,正如前面所讨论的,沿着batch 维度进行归一化引入了一些问题,这表明归一化技术仍有改进的空间。

责任编辑:xj

原文标题:【重点】Batch Normalization的诅咒

文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6722

    浏览量

    88348
  • Batch
    +关注

    关注

    0

    文章

    6

    浏览量

    7137
  • 深度学习
    +关注

    关注

    73

    文章

    5424

    浏览量

    120629

原文标题:【重点】Batch Normalization的诅咒

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LED驱动器应用的一些指南和技巧

    电子发烧友网站提供《LED驱动器应用的一些指南和技巧.pdf》资料免费下载
    发表于 09-25 11:35 0次下载
    LED驱动器应用的<b class='flag-5'>一些</b>指南和技巧

    【大规模语言模型:从理论到实践】- 每日进步点点

    据中微小变化的敏感度,从而提高模型的泛化能力。 二、常见的归化方法 Batch Normalization(BatchNorm) 原理:在batch数据中对数据的
    发表于 05-31 19:54

    一些有关通信电路的资料?

    有关嵌入式之间DSP、ARM、FPGA三者之间和这三款芯片和外部电路之间通信的一些资料,比如说芯片之间的并行通信和芯片和外部电路之间的串行通信,MODBUS、DP、CAN等,一些一些常用的通信协议的
    发表于 03-03 18:53

    基于深度学习的芯片缺陷检测梳理分析

    虽然表面缺陷检测技术已经不断从学术研究走向成熟的工业应用,但是依然有一些需要解决的问题。基于以上分析可以发现,由于芯片表面缺陷的独特性质,通用目标检测算法不适合直接应用于芯片表面缺陷
    发表于 02-25 14:30 986次阅读
    基于深度学习的芯片<b class='flag-5'>缺陷</b>检测梳理分析

    对于大模型RAG技术的一些思考

    大模型或者句向量在训练时,使用的语料都是较为通用的语料。这导致了这些模型,对于垂直领域的知识识别是有缺陷的。它们没有办法理解企业内部的一些专用术语,缩写所表示的具体含义。这样极大地影响了生成向量的精准度,以及大模型输出的效果。
    的头像 发表于 12-07 09:41 996次阅读
    对于大模型RAG技术的<b class='flag-5'>一些</b>思考

    提高嵌入式代码质量的一些方法

    的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。
    的头像 发表于 11-30 09:15 361次阅读

    我们为什么需要了解一些先进封装?

    我们为什么需要了解一些先进封装?
    的头像 发表于 11-23 16:32 474次阅读
    我们为什么需要了解<b class='flag-5'>一些</b>先进封装?

    西门子伺服驱动器维修的一些基本知识

    西门子伺服驱动器维修的一些基本知识
    的头像 发表于 11-23 10:55 1489次阅读

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的头像 发表于 11-22 09:17 597次阅读
    分享<b class='flag-5'>一些</b>SystemVerilog的coding  guideline

    PCB抄板的一些方法

    拆掉所有器多层板抄板件,并且将PAD孔里的锡去掉。用酒精将PCB清洗干净,然后放入扫描仪内,扫描仪扫描的时候需要稍调高一些扫描的像素, 以便得到较清晰的图像。
    的头像 发表于 11-15 17:04 787次阅读
    PCB抄板的<b class='flag-5'>一些</b>方法

    STM32F10x中一些专业术语解释

    STM32F10x中一些专业术语解释
    的头像 发表于 11-01 16:59 428次阅读

    针对RF PCBA设计的一些建议

    射频(RF)PCBA设计涉及系列复杂的考虑因素,包括天线设计、滤波器设计以及传输线(RF Trace)的优化。这些因素对于无线通信和射频应用的性能至关重要。以下是针对RF PCBA设计的一些建议。
    的头像 发表于 10-30 10:19 374次阅读

    单片机“低耦合”的一些方法

    单片机“低耦合”的一些方法
    的头像 发表于 10-17 18:30 426次阅读

    gvim中常用的一些指令介绍

    在 Vim 编辑器中,有一些常用的指令可以帮助我们更高效地编辑文本。以下是一些在 gvim 中常用的指令
    的头像 发表于 10-10 15:47 1709次阅读

    nmcli命令的一些常用选项和用法

    以下是nmcli命令的一些常用选项和用法: connection show -- 显示所有网络连接的详细信息。 connection up --启动网络连接。 connection down -- 停止网络连接。
    发表于 10-08 11:15 1003次阅读
    nmcli命令的<b class='flag-5'>一些</b>常用选项和用法