文章内容摘自 https://zhuanlan.zhihu.com/p/43200897b

一、激活还是权重的Norm

1. 激活norm:BatchNorm、LayerNorm、InstanceNorm、GroupNorm
2. 权重norm:Weight Norm(L1、L2正则)

至于深度学习中的Normalization,因为神经网络里主要有两类实体:神经元或者连接神经元的边,所以按照规范化操作涉及对象的不同可以分为两大类,一类是对第L层每个神经元的激活值或者说对于第L+1层网络神经元的输入值进行Normalization操作,比如BatchNorm、LayerNorm、InstanceNorm、GroupNorm等方法都属于这一类;另外一类是对神经网络中连接相邻隐层神经元之间的边上的权重进行规范化操作,比如Weight Norm就属于这一类。

二、norm的位置(激活前和激活后)

第一种是原始BN论文提出的,放在激活函数之前;另外一种是后续研究提出的,放在激活函数之后,不少研究表明将BN放在激活函数之后效果更好。

三、Normalization 操作


整个规范化过程可以分解为两步,第一步参考公式(1),是对激活值规整到均值为0,方差为1的正态分布范围内。
第二步参考公式(2),主要目标是让每个神经元在训练过程中学习到对应的两个调节因子,对规范到0均值,1方差的值进行微调。因为经过第一步操作后,Normalization有可能降低神经网络的非线性表达能力,所以会以此方式来补偿Normalization操作后神经网络的表达能力。

集合S:用来计算均值和方差的集合
为什么这些Normalization需要确定一个神经元集合S呢?
原因很简单,前面讲过,这类深度学习的规范化目标是将神经元的激活值 [公式] 限定在均值为0方差为1的正态分布中。而为了能够对网络中某个神经元的激活值 规范到均值为0方差为1的范围,必须有一定的手段求出均值和方差,而均值和方差是个统计指标,要计算这两个指标一定是在一个集合范围内才可行,所以这就要求必须指定一个神经元组成的集合,利用这个集合里每个神经元的激活来统计出所需的均值和方差,这样才能达到预定的规范化目标。

四、几种激活Normalization

1. Batch Normalization

集合S:同一个batch内的n个实例在第K个神经元处的输出
全连接网络中的Batch Normalization

CNN中的Batch Normalization

BatchNorm目前基本已经成为各种网络(RNN除外)的标配,主要是因为效果好,比如可以加快模型收敛速度不再依赖精细的参数初始化过程,可以调大学习率等各种方便,同时引入的随机噪声能够起到对模型参数进行正则化的作用,有利于增强模型泛化能力。
BatchNorm 的几个局限
局限1:如果Batch Size太小,则BN效果明显下降。
是因为在小的BatchSize意味着数据样本少,因而得不到有效统计量,也就是说噪音太大
局限2:对于有些像素级图片生成任务来说,BN效果不佳;
局限3:RNN等动态网络使用BN效果不佳且使用起来不方便
局限4:训练时和推理时统计量不一致。
因为在线推理或预测的时候,是单实例的,不存在Mini-Batch,所以就无法获得BN计算所需的均值和方差,一般解决方法是采用训练时刻记录的各个Mini-Batch的统计量的数学期望,以此来推算全局的均值和方差,在线推理时采用这样推导出的统计量。虽说实际使用并没大问题,但是确实存在训练和推理时刻统计量计算方法不一致的问题。

如何从根本上解决这些问题?一个自然的想法是:把对Batch的依赖去掉,转换统计集合范围。在统计均值方差的时候,不依赖Batch内数据,只用当前处理的单个训练数据来获得均值方差的统计量,这样因为不再依赖Batch内其它训练数据,那么就不存在因为Batch约束导致的问题。在BN后的几乎所有改进模型都是在这个指导思想下进行的。

2. Layer Noramalization

集合S:单个实例在某个隐层的所有神经元的输出
前向网络Layer Noramalization

CNN Layer Noramalization
集合S:对于输入实例Xi,某个卷积层的所有特征图

3. Instance Normalization

集合S:对于实例Xi,在某个卷积层的单张特征图

Instance Normalization对于一些图片生成类的任务比如图片风格转换来说效果是明显优于BN的,但在很多其它图像类任务比如分类等场景效果不如BN。

  1. Group Normalization
    集合S:对于实例Xi,某个卷积层的几个特征图。
    (介于Layer Normalization和Instance Normalization之间)

五、Normalization操作的Re-Scaling(放缩)不变性

权重向量(Weight Vector)Re-Scaling,数据Re-Scaling和权重矩阵(Weight Matrix)Re-Scaling。

六.Batch Normalization为何有效

不是因为内部协变化ICS(Internal Covariate Shift)不变性!!!

那是因为什么?


上图展示了用L-Lipschitz函数来衡量采用和不采用BN进行神经网络训练时两者的区别,可以看出未采用BN的训练过程中,L值波动幅度很大,而采用了BN后的训练过程L值相对比较稳定且值也比较小,尤其是在训练的初期,这个差别更明显。这证明了BN通过参数重整确实起到了平滑损失曲面及梯度的作用

七、总结

不同的Normalization方法在于S集合的划分不同。
BN采用了同一个神经元,但是来自于Mini-Batch中不同训练实例导致的不同激活作为统计范围。而为了克服Mini-Batch带来的弊端,后续改进方法抛弃了Mini-Batch的思路,只用当前训练实例引发的激活来划分集合S的统计范围,概括而言,LayerNorm采用同隐层的所有神经元InstanceNorm采用CNN中卷积层的单个通道作为统计范围,而GroupNorm则折衷两者,采用卷积层的通道分组,在划分为同一个分组的通道内来作为通道范围

Normalization相关推荐

  1. batch normalization

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

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

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

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

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

  4. 几种Normalization算法.md

    神经网络有各种归一化算法,BN,LN,IN,GN. 1. Batch Normalization 实现流程:对Tensor为[N, C, H, W], 把第1个样本的第1个通道,加上第2个样本的第1个 ...

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

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

  6. Normalization 的发展历程

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

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

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

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

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

  9. 7 大主题!梳理神经网络中 Normalization 的发展历程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本篇文章用于总结近年来神经网络中 Normalization 操作 ...

  10. Batch Normalization的诅咒

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Sahil Uppal 编译:ronghuaiyang 导读 ...

最新文章

  1. python 网络编程之Socket通信案例消息发送与接收
  2. alpine 交互sh_在这个免费的交互式教程中学习Alpine JS
  3. redis c客户端 hiredis
  4. php的框架目录,Laravel 框架目录结构
  5. STM32 基础系列教程 32 – Ethnet+Lwip
  6. kubelet启动失败_《蹲坑学kubernetes》之10-1:kubelet原理详解
  7. 老版本fortran语言 内存无效_编程语言的分类
  8. Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
  9. [css] 什么是zoom?它有什么作用?
  10. 实战04_redis-cluster集群搭建
  11. oracle中保留2位小数的写法
  12. 使用CancellationToken——而不是Thread.Sleep
  13. 监听滚动条和浏览器大小变化
  14. [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)
  15. [HTML/CSS]下拉菜单
  16. Installer - 使用Maven自动布署至外部Tomcat
  17. WPE 过滤器 高级滤镜
  18. Kali Linux2021安装搜狗输入法
  19. Overfeat论文笔记
  20. python zipfile压缩_python:用 zipfile 模块压缩文件-压缩文件格式

热门文章

  1. python3.8怎么打开创建_Python3.8有哪些新功能 怎么入行Python开发
  2. linux snmp进程,linux snmpwalk命令详解
  3. java nextintln_Java对正则表达式的支持(二)
  4. document引用图片的src属性能干嘛_如何实现图片懒加载
  5. python3精要(23)-递归与函数列表
  6. 21-5-22校赛G 自行车调度
  7. 【机器学习】Auto-Sklearn:使用 AutoML 加速你的机器学习模型
  8. 【NLP】Transformer的中年危机?
  9. 【Python】双十一,就用turtle画个单身狗送给自己
  10. 【机器学习基础】机器学习模型的度量选择(下)