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

news/2024/7/8 1:13:05

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

重磅干货,第一时间送达fd7bb44702c20a6f0cf2db027523b7bf.png

来自 | 知乎  作者丨没头脑

链接丨https://zhuanlan.zhihu.com/p/75539170

目录

  • 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%,效果较为显著。

baefb4aa86b6af723d0ddf67854d183d.png

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

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

e69995a4aa9337417509dd0faf0d469a.png

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

PyTorch 相关文档:

20e58d71754b3d27980708a9fef4edf6.png

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),我感觉其实有点道理的。)

ce961961aab86883d5d5d1c854d6dd80.png

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

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

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

PyTorch 相关文档:

b139a2f929642304c76e8984a2364770.png

注意,在 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 并不是对输入的特征数据进行归一化操作,而是对神经网络中指定的层的参数做归一化操作。

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

0a8806c0ad662087a302d6def7f7633a.png

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

d9ede360eaffa5f41918f8b84cb44b25.png

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

680991c1b7f68c6955f2032779a98076.png

PyTorch 相关文档:

49273889963c2f739db1f3b0c17e0ada.png

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。当然,两者的数学公式长得都一样,都是求平均值、方差,做归一化后在做仿射变换。

cb8d18ac04465344b815e2cba6c8320d.png

Batch Normalization 与 Layer Normalization 的区别:

1dced3a3d5c7c27b81f4061fc9129c8e.png

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

4d5ef3ca3ac6c034946e1b91a38db702.png

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

PyTorch 相关文档:

15b4d83271933b71a9f7d39253eeddcf.png


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 并不进行仿射变换。

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

2c0eda750527081cd621b0c95f7635a4.png

PyTorch 相关文档:

a6fcb57f8c43f238a5ff4158f49f0937.png


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,不对输入数据做归一化,也不对参数做归一化,而是对输入数据与参数的点乘做出改动,改为计算两者的余弦相似度 outside_default.png ,即 outside_default.png 变为 outside_default.png 。

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

PyTorch 相关文档:

f48c657464065e8262daa18e39112d43.png


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 的一般形式,当 outside_default.png 时,GN 等价于 LN;当 outside_default.png 时,GN 等价于 IN。

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

d9526db0c7a793762c04acd66cd645fd.png

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

c08c55e8bac00d41530b03686f5b893e.png

PyTorch 相关文档:

129024223e09638543e11a6f1460293b.png

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

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

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

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

下载3:OpenCV实战项目20讲

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

交流群

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

65654041b5b6b5a280b9fd8f512829a0.png

e086c0bf0dd0ee8a0ad5f7cdaa94759a.png


http://lihuaxi.xjx100.cn/news/269260.html

相关文章

《人月神话》——外科手术队伍——笔记!

本章讨论了一个问题“如何在有意义的时间进度内创建大型的系统?” 软件经理测试出来的数据显示“经验和实际的表现没有相互的联系”。 *需要协作沟通的人员的数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟…

知乎多场景内容匹配方案荣获CSDN AI优秀案例奖

7月3日,由CSDN主办的2020 AI开发者大会拉开帷幕,以直播形式进行吸引了上万名技术从业者参与。大会颁发了2020 AI企业及技术应用系列奖项,其中知乎凭借“多场景内容匹配方案”荣获“AI优秀案例奖”。 过去一年,人工智能技术研发和…

atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty  HttpListener...

atitit.跨架构 bs cs解决方案. 自定义web服务器的实现方案 java .net jetty HttpListener 1. 自定义web服务器的实现方案,基于原始socket vs 基于tcpListener vs 基于HttpListener1 2. download1 3. Lib3 4. Code3 5. HttpListener类4 6. Reef5 1. 自定义web服务器…

MySQL数据库介绍、安装(服务端软件安装、客户端软件安装(图形化界面客户端和命令行客户端))

1. MySQL数据库的介绍 MySQL是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件,它是由瑞典MySQL AB 公司开发,目前属于 Oracle …

eviews怎么回归道格拉斯生产函数_【干货分享】Eviews估计方法汇总

1最小二乘法(1)普通最小二乘估计(OLS):这是使用的最为普遍的模型,基本原理就是估计残差平方和最小化,不予赘述。(2)加权最小二乘估计(WLS) Eviews路径:LS模型设定对话框-----options OLS的假设条件最为严格&#xff0…

养猪场招研究生年薪18万起?!你怎么看?

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达本文来源:中国青年报、澎湃新闻、网友评论导读:不少养猪企业扩大养殖规模,且为了适应现代化养殖的需要,广泛招募大学生。据中…

用Python统计分析290种零食,谁能唤起80、90后的童年回忆?

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达嘴里的零食,手里的漫画,心里初恋的童年。——《童年》1块钱能买到什么?对于80、90后的童年来讲,1块钱是4根冰棍&#xff0c…

android中PreferencesActivity的使用(一)

在使用android手机的时候,尤其是在操作软件设置时,我们经常见到这样的界面: 这是怎么来实现的的呢?其实android已经提供了相应的类和方法,当进行简单数据存储时(比如:软件配置参数)a…