一文搞懂BN、LN、IN、GN的区别

批归一化(BN)已经成为许多先进深度学习模型的重要组成部分,特别是在计算机视觉领域。它通过批处理中计算的平均值和方差来规范化层输入,因此得名。要使BN工作,批大小必须足够大,通常至少为32。但是,在一些情况下,我们不得不满足于小批量:

当每个数据样本高度消耗内存时,例如视频或高分辨率图像

当我们训练一个很大的神经网络时,它只留下很少的GPU内存来处理数据

因此,我们需要BN的替代品,它能在小批量下很好地工作。组归一化(GN)是一种最新的规范化方法,可以避免利用批处理,因此与批处理大小无关。

不同的归一化方法
为了促进GN的表述,我们将首先看一下以前的一些标准化方法。

xᵢ ← (xᵢ - ?ᵢ) / √(?ᵢ² + ?)

对于每个系数xᵢ输入特性。?ᵢ和?ᵢ²的均值和方差计算的集合Sᵢ系数,和?是一个小的常数数值稳定,避免除零。唯一的区别是集Sᵢ是如何选择的。
为说明归一化方法的计算,我们考虑一批N = 3,输入特征a, b, c,它们有通道c = 4,高度H = 1,宽度W = 2:

a = [ [[2, 3]], [[5, 7]], [[11, 13]], [[17, 19]] ]
b = [ [[0, 1]], [[1, 2]], [[3, 5]], [[8, 13]] ]
c = [ [[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]] ]

因此批将形状(N、C, H, W) =(3、4、1、2)。我们把?= 0.00001。
Batch Normalization
BN规范化的渠道和计算?ᵢ和?ᵢ沿轴(N、H、W)。批次ᵢ系数被定义为一组的批处理xᵢ相同的频道。

第一系数的ᵢ= 2,i=(0,0,0),相应的?ᵢ和?ᵢ²系数的计算,b和c的第一个频道:

?ᵢ = mean(2, 3, 0, 1, 1, 2) = 1.5
?ᵢ² = var(2, 3, 0, 1, 1, 2) = 0.917

代入归一化公式,

aᵢ ← (2 - 1.5) / √(0.917 + 0.00001) = 0.522

计算a的所有系数:

a ← [ [[0.522, 1.567]], [[0.676, 1.690]], [[1.071, 1.630]], [[1.066, 1.492]] ]

Layer Normalization
层归一化(LN)的设计是为了克服BN的缺点,包括它对批大小的限制。计算?ᵢ和?ᵢ沿着(C、H、W)轴,和Sᵢ定义为所有系数xᵢ属于相同的输入特性。因此,一个输入特征的计算完全独立于批处理中的其他输入特征。

所有的系数是由相同的归一化?ᵢ和?ᵢ²:

?ᵢ = mean(2, 3, 5, 7, 11, 13, 17, 19) = 9.625
?ᵢ² = var(2, 3, 5, 7, 11, 13, 17, 19) = 35.734

计算a的所有系数

a ← [ [[-1.276, -1.108]], [[-0.773, -0.439]], [[0.230, 0.565]], [[1.234, 1.568]] ]

Instance Normalization
实例归一化(IN)可以看作是将BN公式单独应用到每个输入特性(又称实例),就好像它是批处理中的唯一成员一样。更准确地说,在计算?ᵢ和?ᵢ沿轴(H, W)和Sᵢ的系数被定义为一组相同的输入特性和xᵢ也在同一个频道。

由于IN的计算与批大小为1时BN的计算相同,在大多数情况下,IN实际上会使情况变得更糟。而对于样式转换任务,IN在丢弃图像对比度信息方面优于BN。

第一系数aᵢ= 2,i=i(0,0,0),相应的?ᵢ和?ᵢ²只是

?ᵢ = mean(2, 3) = 2.5
?ᵢ² = var(2, 3) = 0.25

aᵢ ← (2 - 2.5) / √(0.25 + 0.00001) = -1.000

得到:

a ← [ [[-1.000, 1.000]], [[-1.000, 1.000]], [[-1.000, 1.000]], [[-1.000, 1.000]] ]

Group Normalization
前面我们说过IN的计算与批大小为1时BN的计算相同,但是是针对对每个输入特性分别应用BN。注意,IN还可以看作是将LN单独应用于每个通道,就像通道的数量为1的LN一样。

组归一化(GN)是IN和LN的中间点。组织渠道分成不同的组,计算?ᵢ和?ᵢ沿着(H, W)轴和一组通道。批次ᵢ然后组系数,在相同的输入特性和同一组xᵢ渠道。

组的数量G是一个预定义的超参数,通常需要它来划分c。为了简单起见,我们将通道按顺序分组。所以频道1,…,C / G属于第一组,频道C / G + 1,…,2C / G属于第二组,以此类推。当G = C时,即每组只有1个信道,则GN变为IN。另一方面,当G = 1时,GN变成LN。因此G控制了IN和LN之间的插值。

在我们的例子中,考虑G = 2。规范化的第一个系数aᵢ = 2,i=(0,0,0),我们使用的系数在4 / 2 = 2通道:

?ᵢ = mean(2, 3, 5, 7) = 4.25
?ᵢ² = var(2, 3, 5, 7) = 3.687

代入归一化公式,

aᵢ ← (2 - 4.25) / √(3.687 + 0.00001) = -1.172

对于a的其他系数,计算方法相似:

a ← [ [[-1.172, -0.651]], [[0.391, 1.432]], [[-1.265, -0.633]], [[0.633, 1.265]] ]

归一化方法比较
蓝色的区域对应的集Sᵢ计算?ᵢ和?ᵢ,然后用来正常化任何系数在蓝色区域。

从这个图中我们可以看到,GN如何在IN和LN之间插入。GN优于IN,因为GN可以利用跨渠道的依赖关系。它也比LN好,因为它允许对每一组通道学习不同的分布。

当批大小较小时,GN始终优于BN。但是,当批处理大小非常大时,GN的伸缩性不如BN,可能无法匹配BN的性能。
引用
https://cloud.tencent.com/developer/article/1651655
A. Kolesnikov, L. Beyer, X. Zhai, J. Puigcerver, J. Yung, S. Gelly, and N. Houlsby. Big Transfer (BiT): General Visual Representation Learning (2019), arXiv preprint.
S. Qiao, H. Wang, C. Liu, W. Shen, and A. Yuille. Weight Standardization (2019), arXiv preprint.
S. Santurkar, D. Tsipras, A. Ilyas, and A. Madry. How Does Batch Normalization Help Optimization? (2018), NIPS 2018.
Y. Wu, and K. He. Group Normalization (2018), ECCV 2018.

一文搞懂BN、LN、IN、GN的区别相关推荐

  1. 计算机科学与技术要机械硬盘,机械硬盘避坑大法:一文搞懂PMR和SMR有什么区别...

    原标题:机械硬盘避坑大法:一文搞懂PMR和SMR有什么区别 存储市场上一直存在固态硬盘(SSD)和机械硬盘(HDD)的竞争.论综合性能,SSD远高于HDD,是大家选购存储设备时的理想选择.早期消费级S ...

  2. 一文搞懂BN的原理及其实现过程(Batch Normalization)

    1. 在讲BN之前我要向大家提出几个问题,就是为什么要引入BN呢?在神经网络训练的时候输入图片不是引入了image normalization吗?所以BN到底是什么呢? Batch Normaliza ...

  3. 面试:一文搞懂String、StringBuilder、StringBuffer 区别

    1.三者之间的区别 区别 String StringBuilder StringBuffer [值] 不可变 可变 可变 [效率 ] 最低 最高 中等 [线程] 非线程安全 非线程安全 线程安全 不同 ...

  4. 一文搞懂JDK8与Java1.8的区别

    什么是Java?  Java是一种广泛使用的计算机编程语言,拥有跨平台.面向对象.泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发.  Java编程语言的风格十分接近C++语言.继承了C+ ...

  5. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  6. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  7. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  8. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  9. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

最新文章

  1. bond-vlan-bridge
  2. jetson nano包安装
  3. c++排序数组下标_看动画学算法之:排序 - 基数排序
  4. android 大华电子秤波特率_大华条码秤对接经验总结
  5. Android一键加群实现
  6. 有10亿个整数,要求选取重复次数最多的100个整数
  7. java mail 群发邮件_javamail群发邮件
  8. Python tkinter 设置主题
  9. 【JavaScript】JS高级-面向对象编程
  10. Python中参数前面的星号
  11. RabbitMq报错 Execution of Rabbit message listener failed
  12. dos版电影 (telnet towel.blinkenlights.nl的奇迹!!)-STAR WARS in ARCII
  13. 产品经理的工资为什么这么高?背后的逻辑是什么?
  14. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)
  15. 操作系统,计算机网络,数据库刷题笔记10
  16. 云服务器对比网站,云主机与普通服务器对比
  17. 11月最新编程排行榜出炉,这个语言超过了C蝉联榜首~
  18. Android Webview加载网页内容不全
  19. swoft 上传图片到 阿里云oss aliyun-oss
  20. FMSoft uniGUI Professional 1.90.0.1564 Crack

热门文章

  1. 安卓微商助手高级版V2.4.6 群发多开检测僵尸粉等功能_海量微商工具
  2. 通用方法配置Windows 10 1909 1903 2004等版本下配置多用户同时远程访问
  3. 2021-06-03:布尔运算。给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、 (AND)、 | (OR) 和 ^ (XOR) 符号组成。
  4. 华为云物联网平台的C#应用开发(基本接口调用)
  5. 图书管理系统python pycharm 数据库
  6. 【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
  7. 迅雷 5.9.14.1246 去广告版补丁
  8. 《棒球大联盟2nd》:青春赛场·棒球1号位
  9. hsqldb 使用简介
  10. CSDN推荐好书:《软件开发的科学与艺术》