点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者:Sahil Uppal

编译:ronghuaiyang

导读

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 维度进行归一化引入了一些问题,这表明归一化技术仍有改进的空间。

英文原文:https://towardsdatascience.com/curse-of-batch-normalization-8e6dd20bc304

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

Batch Normalization的诅咒相关推荐

  1. Batch Normalization的一些缺陷

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨ronghuaiyang 来源丨AI公园 AI博士笔记 ...

  2. batch normalization

    20210702 深度学习中的五种归一化(BN.LN.IN.GN和SN)方法简介 https://blog.csdn.net/u013289254/article/details/99690730 h ...

  3. 批标准归一化(Batch Normalization)解析

    1,背景 网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训 ...

  4. 【深度学习理论】(4) 权重初始化,Batch Normalization

    各位同学好,最近学习了CS231N斯坦福计算机视觉公开课,讲的太精彩了,和大家分享一下. 1. 权重初始化 1.1 相同的初始化权重 神经网络中的所有权重都能通过梯度下降和反向传播来优化和更新.现在问 ...

  5. 深度神经网络中的Batch Normalization介绍及实现

    之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时,网络中会有BN层,即Batch Normalization,在每个Dense ...

  6. 详解Batch Normalization及其反向传播

    ↑ 点击蓝字 关注视学算法 作者丨风行天上@知乎 来源丨https://zhuanlan.zhihu.com/p/45614576 极市导读 本文介绍了Batch Normalization的过程及其 ...

  7. Batch Normalization应该放在ReLU非线性激活层的前面还是后面?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编辑:CVDaily  转载自:计算机视觉Daily https: ...

  8. 原理解释|直觉与实现:Batch Normalization

    https://www.toutiao.com/a6707566287964340747/ 作者:Harrison Jansma编译:ronghuaiyang 在本文中,我会回顾一下batch nor ...

  9. 秋招必考——Batch Normalization精简解析

    https://www.toutiao.com/a6706087127173562888/ 2019-06-24 21:23:02 什么是Batch Normalization? 批量标准化(BN)指 ...

最新文章

  1. MySQL常用运算符详解
  2. android 获取手机SD卡和手机的内部存储
  3. iOS开发 iOS10兼容访问http
  4. kotlin 查找id_Kotlin程序查找圆柱体区域
  5. RTSP播放器或RTMP播放器常用的事件回调设计
  6. python office库使用_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...
  7. 分治——Secret Cow Code S(洛谷 P3612)
  8. Golang连接使用MySql5.7数据库完整步骤
  9. 任务方案思考:句子相似度和匹配
  10. ubuntu如何解压.tar.gz
  11. SQL 动态创建临时表
  12. ugp和千幻魔镜买哪个好_美的空调和格力空调哪个好?这两个牌子您会买哪个?...
  13. 常见显示器PPI备忘
  14. java中hashmap按键排序_HashMap按键值排序方法
  15. Asio驱动开发学习笔记(3)
  16. 怎样写商业计划书 【转载】
  17. wincc服务器不能创建项目,wincc不能创建和打开项目
  18. 卅三先生的工程电磁场讲座.EEm05——边界条件001
  19. java ini_Java读取ini文件 [org.dtools.javaini] | 学步园
  20. RMAN高级应用_pizi.pdf

热门文章

  1. 中科院、百度研究院等联合提出UGAN,生成图片难以溯源
  2. TinyMind邀你写诗!100小时GPU,等你来领取!
  3. @所有人,不服来战!你都认不出的这些汉字,机器能识别吗?
  4. 一个基于SpringBoot + Mybatis + Vue的代码生成器
  5. 项目实践中的一些性能优化指南
  6. 用好 Git 和 SVN,轻松驾驭版本管理
  7. 大厂项目是如何死掉的?太过真实!
  8. 听说程序猿不会撩妹,我笑了
  9. FeignClient源码深度解析
  10. Spring Cloud Sleuth 进阶实战