Ioffe S. and Szegedy C. Batch normalization: accelerating deep network training by reducing internal covariate shift. In International Conference on Machine Learning (ICML), 2015.

Ba J., Kiros J. and Hinton G. Layer normalization. In Advances in Neural Information Processing Systems (NIPS) 2016.

Ulyanov D., Vedaldi A. and Lempitsky V. Instance normalization: the missing ingredient for fast stylization.arXiv preprint arXiv:1607.08022, 2016.

Wu Y. and He K. Group normalization. In Proceedings of the European conference on computer vision (ECCV), 2018.

整理一下各种normalization方法.

主要内容

对于每一层, 可以简化的理解为:

\[h^l = f(Wh^{l-1} + b),
\]

其中\(h^{l}\)是前一层的输入, \(W, b\)分别为该层的权重和偏置, \(f\)是对应的激活函数.

但是仅按照这种方式搭建的网络训练不稳定还非常慢, 这也是为什么各种normalization方法被提出的初衷.

这些方法可以统一为:

\[h^{l} = f(g(Wh^{l-1} + b)),
\]

这里用\(g(\cdot)\)表示某种normalization方法.

为了方便起见, 另外令

\[x = Wh^{l-1} + b, \\
y = g(x).
\]

总的示意图如下(图片来自Group Normalization):

Batch Normalization

该normalization方法思想是最朴素的, 即每一次我们都recentering一下数据:

\[y = g(x) = \frac{x - \mu}{\sigma},
\]

这里\(\mu,\sigma\)分别表示\(x\)的均值和标准差.

但是上述的标准化存在均值和标准差的估计问题, 故在训练中我们取一个batch作为估计:

\[y = \frac{x - \hat{\mu}}{\hat{\sigma}}, \quad \hat{\mu}:= \frac{1}{n} \sum_{i=1}^n x^i, \hat{\sigma} := \sqrt{\frac{1}{n}\sum_i (x^i - \hat{\mu})^2}.
\]

其中\(x^i, i=1,2,\cdots, n\)为一个batch的数据.

在实际中, 为了安全和可扩展, 采取如下形式:

\[y = \frac{x - \hat{\mu}}{\sqrt{\hat{\sigma}^2+\epsilon}} \cdot \gamma + \beta,
\]

其中\(\gamma, \beta\)为weight 和 bias, \(\epsilon\)常取1e-5.

在训练中, 每次forward pass都会更新running_mean \(\mu\), running_var \(\sigma^2\):

\[\mu = (1 - m) \cdot \mu + m \cdot \hat{\mu} \\
\sigma^2 = (1 - m) \cdot \sigma^2 + m \cdot \hat{\sigma}^2.
\]

这里\(m\)是用于滑动平均的momentum, 这里采取这种形式是为了和Pytorch的实现保持一致, 其选择\(m=0.1\).

在evaluation中, 我们变使用\(\mu, \sigma^2\)来normalization:

\[y = \frac{x - \mu}{\sqrt{\sigma^2+\epsilon}} \cdot \gamma + \beta.
\]

注: 在处理\(dim=1\)(即向量数据)的时候, 均值和方差的计算就是普通的, 但是\(dim=2\)的时候, 比如常见的卷积mapping, 其结构为\(N \times C \times H \times W\), 则其均值方差是对于每一个通道计算的, 即\(\mu,\sigma \in \mathbb{R}^C\), 同理\(\gamma, \beta \in \mathbb{R}^C\).

Layer Normalization

显然, batch normalization的batch size 不能太小, 而layer normalization 可以处理这一点, 因为它是针对单个样本而言的.

其同样采取

\[y = \frac{x - \hat{\mu}}{\sqrt{\hat{\sigma}^2+\epsilon}} \cdot \gamma + \beta,
\]

的形式, 只是

\[\hat{\mu} := \frac{1}{H} \sum_{i}^H x_i,\: \hat{\sigma}:= \sqrt{\frac{1}{H}\sum_{i=1}^H (x_i - \hat{\mu})^2},
\]

这里\(x_i\)表示\(x\)的第\(i\)个分量, 特征维度为\(H\).

注: 在Pytorch的实现中, \(\gamma, \beta\)都是element-wise的, 即如果我们选取\(C \times H \times W\), 则\(\gamma, \beta \in \mathbb{R}^{C \times H \times W}\).

Instance Normalization

instance normalization 主要是用于消除图片之间的contrast而提出的:

\[y = \frac{x - \hat{\mu}}{\sqrt{\hat{\sigma}^2+\epsilon}} \cdot \gamma + \beta,
\]

注意, instance的normalization同样是基于单个样本而言的, 对于卷积层而言\(N \times C \times H \times W\):

\[\hat{\mu} := \frac{1}{HW}\sum_i \sum_j x_{ij}, \\
\hat{\sigma} := \sqrt{\frac{1}{HW}\sum_i \sum_j (x_{ij} - \hat{\mu})^2},
\]

显然\(\hat{\mu}, \hat{\sigma} \in \mathbb{R}^C\). 对于向量数据而言, 和layernorm其实是一致的.

注: instance normalization 通常没有放射变换(即舍弃\(\gamma, \beta\)).

Group Normalization

GN则是根据通道\(C\)分成\(G\)个group, 对每一个group沿着\(H, W\)方向估计:

\[\hat{\mu}_g := \frac{1}{(C / G) \cdot HW} \sum_{i=1}^H\sum_{j=1}^W\sum_{k=(g - 1)\cdot \frac{C}{G} + 1}^{g * \frac{C}{G}} x_{kij}, \\
\hat{\sigma}_g := \sqrt{\frac{1}{(C / G) \cdot HW} \sum_{i=1}^H\sum_{j=1}^W\sum_{k=(g - 1)\cdot \frac{C}{G} + 1}^{g * \frac{C}{G}} (x_{kij} - \hat{\mu}_g)^2}, \\
g = 1, 2, \cdots, G.
\]

注: 这里假设\(C\)能够整除\(G\).

注: 当\(G=C\)的时候, GN 就是 IN, \(G=1\)的时候, GN就是LN.

Normalization Methods的更多相关文章

  1. 机器学习中的标准化方法(Normalization Methods)

    希望这篇随笔能够从一个实用化的角度对ML中的标准化方法进行一个描述.即便是了解了标准化方法的意义,最终的最终还是要:拿来主义,能够在实践中使用. 动机:标准化的意义是什么? 我们为什么要标准化?想象我 ...

  2. JabRef 文献管理软件

    JabRef 文献管理软件简明教程 大多只有使用LaTeX撰写科技论文的研究人员才能完全领略到JabRef的妙不可言,但随着对Word写作平台上BibTeX4Word插件的开发和便利应用,使用Word ...

  3. 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015

    Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...

  4. LaTeX 的对参考文献的处理

      LaTeX 的对参考文献的处理实在是非常的方便,我用过几次,有些体会,写出来供大家 参考.当然,自己的功力还不够深,有些地方问题一解决就罢手了,没有细究.     LaTeX 对参考文献的处理有这 ...

  5. BIBTeX制作参考文献

    一篇关于Latex的参考文献的好文章!基本问题都能解答~ 文章来源:http://www.cnblogs.com/longdouhzt/archive/2012/06/21/2557965.html ...

  6. latex bib format

    LaTeX 的对参考文献的处理实在是非常的方便,我用过几次,有些体会,写出来供大家参考.当然,自己的功力还不够深,有些地方问题一解决就罢手了,没有细究. LaTeX 对参考文献的处理有这么一些优点: ...

  7. Spiking-YOLO : 前沿性研究,脉冲神经网络在目标检测的首次尝试 | AAAI 2020

    论文提出Spiking-YOLO,是脉冲神经网络在目标检测领域的首次成功尝试,实现了与卷积神经网络相当的性能,而能源消耗极低.论文内容新颖,比较前沿,推荐给大家阅读   来源:晓飞的算法工程笔记 公众 ...

  8. Video processing systems and methods

    BACKGROUND The present invention relates to video processing systems. Advances in imaging technology ...

  9. 数据预处理中归一化(Normalization)与损失函数中正则化(Regularization)解惑

    背景:数据挖掘/机器学习中的术语较多,而且我的知识有限.之前一直疑惑正则这个概念.所以写了篇博文梳理下 摘要: 1.正则化(Regularization) 1.1 正则化的目的 1.2 正则化的L1范 ...

随机推荐

  1. 《Scala编程》课程作业

    第一题.百元喝酒 作业要求:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒.100元最多可喝多少瓶啤酒?(不允许借啤酒) 思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数 /** ...

  2. linux vi(vim)常用命令汇总(转)

    前言 首先解析一个vim vi是unix/linux下极为普遍的一种文本编辑器,大部分机器上都有vi的各种变种,在不同的机器上常用不同的变种软件,其中vim比较好用也用的比较广泛.vim是Vi Imp ...

  3. SpringMVC(1):SpringMVC入门

    一,MVC 概述 MVC:模型,视图,控制器,是一种软件设计规范,本质是将业务逻辑,数据,显示,分离的方式来编写代码:前后端分离 Model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来. ...

  4. 深入浅出 Docker

    一.什么Docker 从作用的角度: Docker是一个为开发人员和系统管理员开发.迁移和运行应用程序的平台.应用程序通过Docker打包成Docker Image后,可以实现统一的方式来下载.启动. ...

  5. JavaXML解析的四种方法(连载)

    1. xml简介 XML:指可扩展标记语言, Extensible Markup Language:类似HTML.XML的设计宗旨是传输数据,而非显示数据. 一个xml文档实例: 1 <?xml ...

  6. jenkins实例 nodejs项目

    目录 一.案例1 二.案例2 一.案例1 使用shell方式 #清理上一次版本,拉取新代码 rm -rf /server/admin-web cd /server git clone http://g ...

  7. EmmyLua 注解功能

    前言 网上配置 EmmyLua 的方法很多,此处就不做赘述(因此前提是你已经安装配置完EmmyLua) 本文仅是对 EmmyLua插件 内 注解功能 用法的代码演示.因为网上大部分EmmyLua配置教 ...

  8. Set数据结构基本介绍

    构造 const set = new Set([1, 2, 3, 4, 4]); 可接受的参数为所有具有iterable 接口的数据 特性: 类似数组,无重复值. const set = new Se ...

  9. smbclient 使用方法

        1,列出某个IP地址所提供的共享文件夹 smbclient -L 198.168.0.1 -U username%password   2,像FTP客户端一样使用smbclient smbcl ...

  10. house of force----gyctf_2020_force!!

    做这道题前线学习一下house of force的用法 Linux下堆溢出利用2-House of force基本原理_haibiandaxia的博客-CSDN博客 老样子例行检查(这里我就不放了) ...