Normalization 的发展历程
作者丨没头脑@知乎
来源丨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%,效果较为显著。
其中, 表示输入中第 个 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)
觉得有用麻烦给个在看啦~
Normalization 的发展历程相关推荐
- 7 大主题!梳理神经网络中 Normalization 的发展历程
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本篇文章用于总结近年来神经网络中 Normalization 操作 ...
- 综述:神经网络中 Normalization 的发展历程
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎 作者丨没头脑 链接丨https://zhuanl ...
- 2020-10-18 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程
本文转自:https://blog.csdn.net/aBlueMouse/article/details/78710553 超分辨率技术(Super-Resolution, SR)是指从观测到的低分 ...
- 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程(转)
超分辨率技术(Super-Resolution, SR)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备.卫星图像和医学影像等领域都有重要的应用价值. 本文针对端到端的基于深度学习的单张 ...
- 【超分辨率】从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程
此文转自 知乎专栏 棉花糖的工坊 作者 棉花糖 (侵删) 一直在学习图像超分辨率和深度学习,看到此文写得很好,故此转载分享.如有侵权,私信联系我,我将作删除. 超分辨率技术(Super-Resolut ...
- 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程 2018.11 写的还可以
超分辨率技术(Super-Resolution, SR)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备.卫星图像和医学影像等领域都有重要的应用价值. 本文针对端到端的基于深度学习的单张 ...
- 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程
超分辨率技术(Super-Resolution, SR)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备.卫星图像和医学影像等领域都有重要的应用价值. 本文针对端到端的基于深度学习的单张 ...
- 百度PHP高级顾问惠新宸:PHP在百度的发展历程
惠新宸,百度PHP高级顾问,年二十有八,好追根究底,有不良嗜好, 幸性本善.乙酉年识互联网,丁亥年入雅虎,翌年入百度.虽性好安稳,然经变无数,唯常叹"人生,菠菜汤尔". 大家好,今 ...
- vue 发展历程时间轴动画_PPT时间轴如何做出创意感?海量素材免费分享,网友:收藏...
时间轴页面,是工作型PPT中常见的页面之一.个人述职或者公司介绍PPT中,使用时间轴,能够让观众更加清晰地了解公司的发展历程. 但是,很多人在制作时间轴页面时,往往是这样的效果: 只有几行字和一根线, ...
最新文章
- Script that build Dual Stack route
- php 类示例,PHP类实例教程(二十二):类型提示
- (4opencv)OpenCV PR 成功的收获和感悟
- stream() 求和_Java教程:Java8统计list中指定属性的最大、最小、平均值、求和
- iPhone Development Blog系列: 如何制作服务条例窗口
- 大型科技公司架构:中台模式的爱与恨
- php测试插入,php – 使用Symfony测试数据库插入
- 寡头时代——新的希望还是?
- URAL - 1966 - Cycling Roads(并检查集合 + 判刑线相交)
- js的ctrl+s保存功能
- Sql 正确删除用户过期的数据
- PLSQL Developer详细安装步骤
- matlab 求矩阵奇异值,MATLAB矩阵特征值和奇异值.
- 物理模拟重力 斜抛运动计算 抛物线计算
- linux英文论文范例,Argument essay官方主题范文三十六篇-经典英文议论文范例
- 【48. 贪心(区间选点)】
- 自媒体全是带节奏的标题党,不是创作者不行,而是用户们想看
- 去千户苗寨为什么说不要为了节约钱住普通客栈,而要住商务酒店
- RabbitMQ 限流 流量削峰
- java.exe 关闭后自动重启
热门文章
- 【NCEPU】徐韬:街景字符编码识别比赛
- 技术图文:Python 位运算防坑指南
- Matlab与线性代数--矩阵的奇异值和奇异值分解
- 【ACM】杭电OJ 1284(待更)
- android system window,Android控件的fitSystemWindows属性
- 中文版开源!这或许是最经典的Python编程教材
- “不会Linux,怎么当程序员?”骨灰级程序员:干啥都不行。
- 「2019嵌入式智能国际大会」 399元超值学生票来啦,帮你豪省2600元!
- 姚班三兄弟3万块创业八年,旷视终冲刺港股
- Google AI骗过了Google,工程师竟无计可施?