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

重磅干货,第一时间送达

本篇文章用于总结近年来神经网络中 Normalization 操作的发展历程。其中,包括:Local Response Normalization, Batch Normalization, Weight Normalization, Layer Normalization, Instance Normalization, Consine Normalization, Group Normalization。

目录

  • Local Response Normalization

  • Batch Normalization

  • Weight Normalization

  • Layer Normalization

  • Instance Normalization

  • Consine Normalization

  • Group Normalization

1.Local Response Normalization

LRN 最早应该是出现在 2012 年的 AlexNet 中的,其主要思想是:借鉴“侧抑制”(Lateral Inhibitio)的思想实现局部神经元抑制,即使得局部的神经元产生竞争机制,使其中相应值较大的将变得更大,响应值较小的将变得更小。此外,作者在论文中指出使用 LRN 能减少其 AlexNet 在 ILSVRC-2012 上的 top-1 错误率 1.4% 和 top-5 错误率 1.2%,效果较为显著。

其中,  表示输入中第  个 FeatureMap 中位于  的响应值,  表示输出中第  个 FeatureMap 中位于  的响应值,  都是由验证集所决定的超参数 (Hyper-Parameter)。论文中的设定为:  。

在 2015 年的 VGG 中,该论文指出 LRN 在 VGG 并无任何用处:

此后,随着 Batch Normalization 等不同 Normalization 的出现,LRN 也开始逐渐落寞。

PyTorch 相关文档:

2.Batch Normalization

BN 应该算是目前使用最多的 Normalization 操作了,现在甚至可以说是 CNN 网络的标配。自 2015 年 2 月的 Inception V2(https://arxiv.org/pdf/1502.03167.pdf) 提出之后,也引出了后续许多不同的 Normalization 的提出。

作者在论文中指出,提出 Batch Normalization 是目的为了解决 ‘internal covariate shift’ 现象(这个应该是属于机器学习的问题,我无法进行详细表达,建议查看其他文章),经过测试后,发现使用 BN 能加速神经网络的收敛速度,并使得神经网络对于初始化的敏感度下降。

在 深度学习中 Batch Normalization为什么效果好?(https://www.zhihu.com/question/38102762/answer/85238569)中,答者指出其实 BN 解决的是梯度消失问题(Gradient Vanishing Problem),我感觉其实有点道理的。)

其中,  为输入数据,  为数据平均值,  为数据方差,  和  为学习参数。此外,  和  是统计量,随着 Batch 的迭代不断更新(一般实现都会对其做滑动平均,不然当 Batch Size 较小时,其统计值的波动会很大,导致网络无法收敛的)。

在 BN 中,作者之所以加上  和  这两个仿射参数(Affine Parameter),是为了使得经过 BN 处理后的数据仍可以恢复到之前的分布,从而提升了网络结构的 Capacity,即在做出一定的改变的同时,仍保留之前的能力。

此外,除了 BN 背后的原理这一话题外,大家对 Batch-normalized 应该放在非线性激活层的前面还是后面?这一话题的讨论也比较激烈,并没有达成统一的观点,只是大部分实验表明BN 放在非线性激活层后比较好,不过仍需要具体任务具体分析。

PyTorch 相关文档:

注意,在 PyTorch 中冻结 BN Layer,不仅需要对将其参数的 requires_grad 设为 False,还需要将该层的 training 设为 False,即调用 eval 函数;否则,将会导致统计量不断更新,而仿射参数却一直处于冻结状态。此外,一般都会设置 track_running_state 为 True,以减小 Batch Size 所造成的统计量波动。

3.Weight Normalization

在 2016 年 2 月的 Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks (https://arxiv.org/pdf/1602.07868.pdf)中,作者提出了与 BN 完全不同的 Normalization 操作:Weight Normalization,并指出:相较于 BN,WN 摆脱了对于 Batch 的依赖,这意味这 WN 完全可以用在 RNN 网络中(如:LSTM )以及对于噪声敏感的任务(如:强化学习、生成式模型)中;此外,WN 的计算成本低,可以减少模型的运行时间。

与 BN 不同的是, WN 并不是对输入的特征数据进行归一化操作,而是对神经网络中指定的层的参数做归一化操作。

在论文中,作者将神经网络的层表示为  ,其中,  为权重向量,  为偏置参数,  为输入向量,  为非线性激活函数。而 WN 就是对  做归一化,将  分解为  。其中,  为单位向量,代表  的方向,  为标量,代表  的长度,  为  的欧式范数。

在 详解深度学习中的Normalization,BN/LN/WN https://zhuanlan.zhihu.com/p/33173246中,作者指出:WN 与 BN 其实是相似的。

论文作者同样提到了这一点。

PyTorch 相关文档:

4.Layer Normalization

在 2016 年 7 月的 Layer Normalization (https://arxiv.org/pdf/1607.06450.pdf)中,作者提出了一种类似与 BN 的操作:Layer Normalization,提出 LN 的主要目的是为了解决 BN 对 Batch Size 和内存的依赖以及减少 Normalization 所需时间。

LN 与 BN 的不同之处在于:BN 是对一个 Batch 中的所有样本的不同维度做 Normalization,而 LN 是对单个样本中的所有维度做 Normalization。当然,两者的数学公式长得都一样,都是求平均值、方差,做归一化后在做仿射变换。

Batch Normalization 与 Layer Normalization 的区别:

举例来说,对于  的数据,BN 计算得到的统计量的  为  ,而 LN 计算得到的统计量的  为  。

(左侧:Batch Normalization,右侧:Layer Normalization)

PyTorch 相关文档:

5. Instance Normalization

在 2016 年 7 月的 Instance Normalization: The Missing Ingredient for Fast Stylization (https://arxiv.org/pdf/1607.08022.pdf)中,作者提出与 LN 类似的操作:Instance Normalization。在论文中,作者指出在图像风格迁移任务中,生成式模型计算得到的 Feature Map 的各个 Channel 的均值与方差将影响到所生成图像的风格。故,作者提出了 IN,在 Channel 层面对输入数据进行归一化,再使用目标图像的 Channel 的均值与方差对结果进行 '去归一化'。

值得一提的是,IN 与LN 类似,仅对单个样本进行归一化,但是 IN 并不进行仿射变换。

举例来说,对于  的数据,IN 计算得到的统计量的  为  。

PyTorch 相关文档:

6.Cosine Normalization

在 2017 年 2 月的

Cosine Normalization: Using Cosine Similarity Instead of Dot Product in Neural Networks (https://arxiv.org/pdf/1702.05870.pdf)

中,作者提出了 Cosine Normalization,不对输入数据做归一化,也不对参数做归一化,而是对输入数据与参数的点乘做出改动,改为计算两者的余弦相似度  ,即  变为  。

CN 将模型的输出进行了归一化,使得输出有界,但是也因此丢弃了原本输出中所含的 Scale 信息,所以这个是否值得也有待进一步探讨。

PyTorch 相关文档:

7.Group Normalization

在 2018 年 3 月的 Group Normalization(https://arxiv.org/pdf/1803.08494.pdf)中,作者提出了 Group Normalization,与 BN 相比,GN 的改进有两点:不再依赖 Batch Size,计算成本可由超参数进行调节。

作者在论文中指出,BN 对于 Batch Size 的依赖使得其无法较好的运用在因内存限制而使用较小 Batch Size 的任务上(如:detection, segmentation, video),故作者令 GN 仅对单个样本进行 Normalization 操作。此外,GN 更像是 LN 与 IN 的一般形式,当  时,GN 等价于 LN;当  时,GN 等价于 IN。

在 如何区分并记住常见的几种 Normalization 算法(https://zhuanlan.zhihu.com/p/69659844) 中,作者给出了一张图像,直观的给出了以上 Normalization 的不同之处:

举例来说,对于  的数据,GN 计算得到的统计量的  为  。

PyTorch 相关文档:

参考资料:

如何区分并记住常见的几种 Normalization 算(https://zhuanlan.zhihu.com/p/69659844)

详解深度学习中的Normalization,(BN/LN/WNhttps://zhuanlan.zhihu.com/p/33173246)

神经网络之Normalization(https://zhuanlan.zhihu.com/p/29824075)

深度学习中 Batch Normalization为什么效果好?- 魏秀参的回答 - 知乎(https://www.zhihu.com/question/38102762/answer/85238569)

end

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

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

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

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

下载3:OpenCV实战项目20讲

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

交流群

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

7 大主题!梳理神经网络中 Normalization 的发展历程相关推荐

  1. 综述:神经网络中 Normalization 的发展历程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎  作者丨没头脑 链接丨https://zhuanl ...

  2. 9 大主题卷积神经网络(CNN)的 PyTorch 实现

    Datawhale干货 作者:红色石头,北京大学,Datawhale伙伴 大家还记得这张图吗? 之前,红色石头发文介绍过一份很不错的资源: 52 个深度学习目标检测模型汇总,论文.源码一应俱全! 深度 ...

  3. 【深度学习】9 大主题卷积神经网络(CNN)的 PyTorch 实现

    大家还记得这张图吗? 之前,红色石头发文介绍过一份很不错的资源: 52 个深度学习目标检测模型汇总,论文.源码一应俱全! 深度系统介绍了 52 个目标检测模型,纵观 2013 年到 2020 年,从最 ...

  4. Normalization 的发展历程

    作者丨没头脑@知乎 来源丨https://zhuanlan.zhihu.com/p/75539170 编辑丨极市平台 目录 Local Response Normalization Batch Nor ...

  5. Excel催化剂100+大主题功能梳理导读

    Excel催化剂历经1年4个月的开发时间,终于荣登100+个大主题功能,完成数据领域的功能大矩阵,可以说在日常的数据处理及分析上,绝大部分的共性场景已经囊括其中,是数据工作者难得一遇的优秀作品之一. ...

  6. 神经网络中的批量归一化Batch Normalization(BN)原理总结

    0.概述 深层神经网络存在的问题(从当前层的输入的分布来分析):在深层神经网络中,中间层的输入是上一层神经网络的输出.因此,之前的层的神经网络参数的变化会导致当前层输入的分布发生较大的差异.在使用随机 ...

  7. perplexity 衡量指标_困惑度(perplexity)的基本概念及多种模型下的计算(N-gram, 主题模型, 神经网络)...

    让人困惑的困惑度 发现网络上流传的关于困惑度(perplexity)大多数都是利用了N-gram或者主题模型的例子来阐述的.但是现在这个年代来学习这个指标的人多半都是想研究神经网络的,而两者对困惑度 ...

  8. 深度神经网络中的局部响应归一化LRN简介及实现

    Alex.Hinton等人在2012年的NIPS论文<ImageNet Classification with Deep Convolutional Neural Networks>中将L ...

  9. 30 篇亮点论文、5 大主题带你一览 ECCV 2020研究趋势

    编译 | 陈彩娴.Barack 编辑 | 陈彩娴 转自 | AI科技评论 ECCV 2020已圆满落幕.会议收到了1360篇论文投稿,其中包含104篇Oral论文.160篇Spotlight论文和10 ...

最新文章

  1. 简单网页设计之表格版
  2. 一个简单案例,5 分钟看懂 Java Lamdba 表达式
  3. opencv python destroyAllWindows() destroyWindow() 销毁窗口
  4. boost::safe_numerics::interval相关的测试程序
  5. 基于OpenGL的三种直线生成算法
  6. python培训学习方法_python编程学习方法及技术进阶建议
  7. powerdesigner 导入html,使用PowerDesigner导出Word/HTML的一些配置
  8. 4,表查询语法,表连接,子查询
  9. Sphinx 文档例子
  10. OpenCV C++ 常用功能
  11. 7-汇编大小写字符互相转化+[bx+idata]+SI/DI
  12. 火山图 volcano
  13. Win10中允许UWP应用走代理的操作方法
  14. 手机qq2010java触屏_手机QQ2010(Java触屏)Beta2发布:操作更流畅
  15. eclipse egit_EGit迁移成为Eclipse的要求吗?
  16. 转【JMeter】--JMeter下载及使用
  17. 计算机网络管理员初级是几级,计算机网络管理员初级试卷.pdf
  18. Matlab绘制面积堆叠图/面积图
  19. 一文读懂如何对混合型数据做聚类分析!
  20. 阿里巴巴P6-P8成长笔记

热门文章

  1. 用AI加速物联网落地,安富利的客户洞察和解决之道
  2. 谈谈Python那些不为人知的冷知识(二)
  3. 倒计时1天,2018 AI开发者报名通道即将关闭(附参会提醒)
  4. 升级人脸识别,小鱼易连要打通企业与个人微信,重塑视频会议3.0!
  5. AI一分钟|潘建伟团队首次实现18个量子比特纠缠;特斯拉第二季度共交付40740辆汽车...
  6. 五年之后,你的企业是拥抱AI,还是已被淘汰
  7. Java 8 一行代码解决了空指针问题,太厉害了!
  8. 为什么说Netty是性能之王,因为它用了 Reactor 模型啊
  9. 扒一扒 @SpringBootApplication 注解背后的奥秘!
  10. 谈谈几个 Spring Cloud 常见面试题及答案