IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度深度网络设计中各种归一化方法总结 -> 正文阅读

[人工智能]深度深度网络设计中各种归一化方法总结

前言

狭义的归一化指对输入特征进行归一化, 这在经典的机器学习中用的比较多,目的是为了消除不同特征量纲的差异。常用的归一化方法包括: Z-score, Min-Max scaler等等。

这里,我们主要总结深度学习中的一些归一化的技巧。深度学习中的归一化已经不仅仅局限于输入数据的归一化,而是网络各个层的归一化,因为每个层相当于一个非线性变换, 随着网络层数的加深,数据分布会发生较大变化(即internal covariate shift)。归一化实际上起到正则化的作用,能够大大促进网络的训练和收敛, 减轻了对参数处置的敏感性, 允许模型以更大的学习率进行训练。

批量归一化 BN

Batch Normalization顾名思义就是对每个min-batch samples进行归一化,

下图为一个BN变换的伪码, 其中 m m m为Batchsize的大小, x i x_{i} xi?实际上就是就是第i个样本feed forward到某个层的某个神经元节点的input(也就是上一层的输出的加权和)
可以看到:
1.BN操作实在Batch维度上进行的,具体:每个Batch包含m个样本,基于这m个samples为每个feature独立计算均值和方差,然后进行类似于Z-Score的操作,最后通过trainable parameters进行伸缩和平移,目的是为了保证BN变换为恒等变换

实际上BN操作可以看作一个独立的网络层。
在这里插入图片描述
下面是BN变换更加抽象的一种写法,增益参数 g i l g_{i}^{l} gil?, 这里的 a i l a_{i}^{l} ail?表示第l层的第i个节点的输入,它实际上就是由上一层输出 h l h_{l} hl?经过Linear projection得到:
在这里插入图片描述
在这里插入图片描述

那么在网络训练和推断的过程中如何使用BN呢?
以前是每层的输入 x x x直接作为该层的Input,有了BN以后,x首先用于计算BN的输出 y y y,然后再把y作为该层Input, 这样以来,网络修改完毕 (见下图伪码2-5)。

网络修改完成后就可以再进行训练以同时优化原始模型参数和BN操作的参数( λ , β \lambda, \beta λ,β)了。

训练完成后,就可以将其用于推断了,这里的问题是: 推断时Batch=1, 如何来估计均值和方差呢?
这里使用所有mini-batches的samples来估计均值和方差,其在整个Inference的整个过程中是保持不变的,具体:
E [ x ] ← E B [ μ B ] E[x] \leftarrow E_{B}[\mu_{B}] E[x]EB?[μB?]
V a r [ x ] ← m m ? 1 E B [ σ B 2 ] Var[x]\leftarrow \frac{m}{m-1}E_{B}[\sigma_{B}^{2}] Var[x]m?1m?EB?[σB2?]

这样以来,对于测试样本 x x x, 它的normalized input可以估计为:
x ^ = x ? E [ x ] V a r [ x ] + ? \hat{x}=\frac{x-E[x]}{\sqrt{Var[x]+\epsilon }} x^=Var[x]+? ?x?E[x]?

相应的BN变换可以写为:
y = λ x ^ + β = λ v a r [ x ] + ? x + ( β ? λ E [ x ] v a r [ x ] + ? ) y=\lambda \hat{x}+\beta=\frac{\lambda}{\sqrt{var[x]+\epsilon}}x+(\beta-\frac{\lambda E[x]}{\sqrt{var[x]+\epsilon}}) y=λx^+β=var[x]+? ?λ?x+(β?var[x]+? ?λE[x]?)
在这里插入图片描述
BN如何应用到卷积网络中呢?
原文中有这样的表述: we let B be the set of
all values in a feature map across both the elements of a
mini-batch and spatial locations,可见对于一个尺寸为(B, C, H,W)的Tensor, B,H,W这三个维度是共享归一化参数的,换句话说,BN操作逐Channel独立进行的,更严格的数学定义如下:
在这里插入图片描述
在这里插入图片描述
归一化参数( μ , σ \mu, \sigma μ,σ)总共有2C个。

缺点
1.Batchsize的设置对BN的效果有很大影响;
2.BN主要是应用的前馈神经网络,尚不清楚如何用到循环网络中(RNN是按timestep展开的深度神经网络,假定RNN中使用BN的话,需要为每个timestep存储相关的统计信息,如果test sequence的长度比training sequence的长度还长,这显然会出问题);

层归一化LN

Layer Normlaization 顾名思义就是对每个Layer内各个神经元的输入进行归一化,换句话说,Leyer内的各个神经元共享归一化参数,并且这些参数与Batchsize的大小无关,从而克服了BN中对BatchSize的依赖,可以用到Online Scenario (例如RNNs)。

上述参数的计算如下,H为某隐层的神经元节点的数量,
在这里插入图片描述
对于RNN, LN的定义如下, 其中 g g g b b b分别代表增益参数和偏置参数:
在这里插入图片描述
其中第 t t t步的输入 a t a^{t} at计算如下:
在这里插入图片描述
众所周知,标准的RNN极易出现梯度爆炸和梯度消失的问题,加入了LN以后,LN使得对某一层所有的Summed inputs的缩放不会引起average summed input产生变化,这使得隐藏层之间的动态变化、信息流更加稳定;

LN是在RNN背景下提出的,也可以将其应用到全连接前馈神经网络(FFNN)中, 具体上面公式中的H表示隐层节点的数量, 那么如何将其用到卷积网络CNN中呢?

由于每个卷积核用于从Input中提取某种Pattern,因此对于一个尺寸为(B,C, H,W)的Tensor, LN实际上是在C, H, W三个维度上进行的,其数学定义如下:
L N ( x ) = λ ( x ? μ ( x ) σ ( x ) ) + β LN(x)=\lambda(\frac{x-\mu(x)}{\sigma(x)}) + \beta LN(x)=λ(σ(x)x?μ(x)?)+β
μ b ( x ) = 1 H W C ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C x b c h w \mu_{b}(x)=\frac{1}{HWC}\sum_{h=1}^{H}\sum_{w=1}^{W}\sum_{c=1}^{C}x_{bchw} μb?(x)=HWC1?h=1H?w=1W?c=1C?xbchw?
σ b ( x ) = 1 H W C ∑ h = 1 H ∑ w = 1 W ∑ c = 1 C ( x b c h w ? μ b ( x ) ) 2 + ? \sigma_{b}(x)=\sqrt{\frac{1}{HWC}\sum_{h=1}^{H}\sum_{w=1}^{W}\sum_{c=1}^{C}(x_{bchw}-\mu_{b}(x))^{2}+\epsilon} σb?(x)=HWC1?h=1H?w=1W?c=1C?(xbchw??μb?(x))2+? ?
LN的归一化参数量为2B。

实例归一化IN

Instance normalization (IN), 顾名思义是在Instance level进行归一化, 实际上它与BN的区别也在于此: BN是在整个samples上进行归一化,Batch维度共享归一化参数,而IN是在逐个Sample内进行归一化。 其数学定义如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于尺寸为(B,C, H,W)的Tensor, 总的归一化参数( μ , σ \mu, \sigma μ,σ)的数量为:2BC (而BN只有2C个).。

提到IN, 有必要提及著名的自适应实例归一化(Adaptive Instance Normalization, AdaIN), AdaIN在很多经典的Style transfer的研究中都有使用。 什么是AdaIN?
AdaIN基于所谓的Conditioned Instance Normalization (CIN)进一步发展而来,主要作用是直接使用Target style的统计信息(对应 λ , β \lambda, \beta λ,β)来对Normalized Content image的style进行迁移,其数学与IN操作非常类似,定义如下:
在这里插入图片描述
可以看到,括号里面是对Input image进行Normalize操作, 在IN中, λ , β \lambda,\beta λ,β分别对应scale和shift的参数, 也是网络需要去学习的参数。而在AdaIN里面,对应的参数 σ , μ ) \sigma, \mu) σ,μ)表示的是任意Style Image的统计信息, 不需要通过训练获得。简而言之, AdaIN通过在Feature spapce 迁移Feature statistics进行Style Transfer

组归一化GN

Group Normalization (GN)与Layer Normalization之间的关系就像分组卷积相比于常规卷积。简单来说,就是把Chanel维度分为G(G为预定义的超参数)个组, 然后组内独立进行Layer Normalization。 对于尺寸为(B,C,H,W)的Tensor, GN的归一化参数( μ , σ \mu, \sigma μ,σ)的数量为2BG (是LN归一化参数的G倍)。

局部响应归一化LRN

Local Response Normalization (LRN)最早在AlexNet中被提出, 与上面几种归一化技术不太一样,LRN实际上仿造了生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),其数学定义如下:
在这里插入图片描述
其中 a x , y j a_{x,y}^{j} ax,yj?表示将第j个Kernel应用到位置(x,y)后的非线性激活值, b x , y j b_{x,y}^{j} bx,yj?即为其对应的LRN后的值。

可以看到LRN实际上就是在Channel方向上进行局部响应归一化, 具体来说:对于第i个channel的任意位置,基于其前n/2和后n/2对应位置的信息进行局部归一化,示意图如下:
在这里插入图片描述

总结->各种归一化的统一数学表达形式

在这里插入图片描述
如上图,不同的归一化方式的区别仅在于共享归一化参数的维度不同,具体来说:
BN是逐Channel进行的,
LN是逐Sample进行的
IN 逐Channel, 逐Sample进行的
GN是逐Sample, 且Channel维度逐Group进行的

上面4中归一化的统一数学表达形式为 (此处忽略Scale和Shift操作):
在这里插入图片描述
在这里插入图片描述
区别就在于集合 S i S_{i} Si?的定义上, 具体:
BN中,
在这里插入图片描述
LN中,
在这里插入图片描述
IN中,
在这里插入图片描述

GN中,
在这里插入图片描述
Ok.

References

  1. ImageNet Classification with Deep ConvolutionalNeural Networks;
  2. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift;
  3. Layer Normalization;
  4. Instance Normalization: The Missing Ingredient for Fast Stylization;
  5. Group Normalization;
  6. Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization;
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:28:32  更:2022-03-08 22:29:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:31:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码