Batch Normalization、Instance normalization简单理解
1. Batch Normalization
首先,简短介绍一下Batch Normalization,通常Batch Normalization更为大家所知,所以在此简要介绍BN来引入Instance Normalization。
引入BN层主要是为了解决"Internal Covariate Shift"问题,关于这个问题李宏毅老师有个视频讲解比较形象[4],可以参考。Batch Normalization主要是作用在batch上,对NHW做归一化,对小batchsize效果不好,添加了BN层能加快模型收敛,一定程度上还有的dropout的作用。
BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。
在BN论文中有下面这样一幅图,比较清楚的表示了BN具体是怎么操作的:
前三步就是对一个batch内的数据进行归一化,使得数据分布一致:沿着通道计算每个batch的均值,计算每个batch的方差,对XXX做归一化。重点在第四步,**加入缩放和平移参数γ,β\gamma,\betaγ,β **。这两个参数可以通过学习得到,增加这两个参数的主要目的是完成归一化之余,还要保留原来学习到的特征。
总结如下:
- 沿着通道计算每个batch的均值μ\muμ
- 沿着通道计算每个batch的方差σ2\sigma ^ 2σ2
- 对x做归一化,x′=(x−μ)/σ2+ϵx' = (x-\mu) / \sqrt{\sigma ^2 + \epsilon}x′=(x−μ)/σ2+ϵ
- 加入缩放和平移变量γ\gammaγ和β\betaβ ,归一化后的值,y=γx′+βy=\gamma x' + \betay=γx′+β
2. Instance Normalization
IN和BN最大的区别是,IN作用于单张图片,BN作用于一个batch。IN多适用于生成模型中,例如风格迁移。像风格迁移这类任务,每个像素点的信息都非常重要,BN就不适合这类任务。BN归一化考虑了一个batch中所有图片,这样会令每张图片中特有的细节丢失。IN对HW做归一化,同时保证了每个图像实例之间的独立。
论文中所给的公式如下:
总结如下:
- 沿着通道计算每张图的均值μ\muμ
- 沿着通道计算每张图的方差σ2\sigma ^ 2σ2
- 对x做归一化,x′=(x−μ)/σ2+ϵx' = (x-\mu) / \sqrt{\sigma ^2 + \epsilon}x′=(x−μ)/σ2+ϵ
- 加入缩放和平移变量γ\gammaγ和β\betaβ ,归一化后的值,y=γx′+βy=\gamma x' + \betay=γx′+β
def Instancenorm(x, gamma, beta):# x_shape:[B, C, H, W]results = 0.eps = 1e-5x_mean = np.mean(x, axis=(2, 3), keepdims=True)x_var = np.var(x, axis=(2, 3), keepdims=True0)x_normalized = (x - x_mean) / np.sqrt(x_var + eps)results = gamma * x_normalized + betareturn results
pytorch中使用BN和IN:
class IBNorm(nn.Module):""" Combine Instance Norm and Batch Norm into One Layer"""def __init__(self, in_channels):super(IBNorm, self).__init__()in_channels = in_channelsself.bnorm_channels = int(in_channels / 2)self.inorm_channels = in_channels - self.bnorm_channels self.bnorm = nn.BatchNorm2d(self.bnorm_channels, affine=True)self.inorm = nn.InstanceNorm2d(self.inorm_channels, affine=False) # IN,多用于风格迁移def forward(self, x):bn_x = self.bnorm(x[:, :self.bnorm_channels, ...].contiguous()) in_x = self.inorm(x[:, self.bnorm_channels:, ...].contiguous()) return torch.cat((bn_x, in_x), 1)
下图来自何凯明大神2018年的论文Group Normalization[3],可以说很直观了。
Reference:
[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[C]//International conference on machine learning. PMLR, 2015: 448-456.
[2] Ulyanov D, Vedaldi A, Lempitsky V. Instance normalization: The missing ingredient for fast stylization[J]. arXiv preprint arXiv:1607.08022, 2016.
[3] Wu Y, He K. Group normalization[C]//Proceedings of the European conference on computer vision (ECCV). 2018: 3-19.
[4] 【深度学习李宏毅 】 Batch Normalization (中文)
[4] *深入理解Batch Normalization批标准化
[5] Batch Normalization原理与实战
[6] *BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结
GroupNorm、SwitchableNorm总结](https://blog.csdn.net/liuxiao214/article/details/81037416)
Batch Normalization、Instance normalization简单理解相关推荐
- 优化方法总结 Batch Normalization、Layer Normalization、Instance Normalization 及 Group Normalization
目录 从 Mini-Batch SGD 说起 Normalization 到底是在做什么 Batch Normalization 如何做 3.1 前向神经网络中的 BN 3.2 CNN 网络中的 BN ...
- Batch Normalization的一些个人理解
简单说一说Batch Normalization的一些个人理解: 1.要说batch normalization不得不先说一下梯度消失和梯度爆炸问题 梯度消失一是容易出现在深层网络中,二是采用了不合适 ...
- PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization
PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...
- Batch Nomalization,Group Normalization,Cross-Iteration Batch Normalization分析
BatchNomalization 发表于第32届机器学习国际会议 PMLR,2015年 前言 由于深度神经网络每层输入的分布在训练过程中随着前一层的参数变化而变化,因此训练深度神经网络很复杂.由于需 ...
- AdaIN(Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization)——论文阅读
1. Introduction 在这篇文章中,作者提出了一种简单但是有效的方用来首次实现任意样式的实时风格转换,方法的核心是加入了一个adaptive instance normalization ( ...
- HINet | 性能炸裂,旷视科技提出适用于low-level问题的Half Instance Normalization
编辑:Happy 首发: AIWalker 大家好,我是Happy. 一直以来,甚少有normalization技术在low-level得到广泛应用并取得优异性能,就算得到应用其性能也会受限或者造成异 ...
- 论文复现-Half Instance Normalization Network
HINet HINet: Half Instance Normalization Network for Image Restoration 论文复现 官方源码 AI Studio项目地址 1. 简介 ...
- Instance Normalization
最近在看论文<Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization>,发现里面提到了 Ins ...
- Towards Ultra-Resolution Neural Style Transfer via Thumbnail Instance Normalization
碎碎念:毕设打算做风格迁移的,然而没有接触过这方面,记录一下qwq Abstract 基于现有的风格迁移框架处理高分辨率有以下缺点: 内存成本 笔触过小 针对上述两点问题,本文提出Ultra-Reso ...
最新文章
- Flink从入门到精通100篇(二)-在Linux中完整安装flink并做Flink文件的配置
- 广播电视加速技术迭代,用新技术拥抱行业转型
- echarts 地图实现轮播(一)
- 远程办公的一天:魔幻24小时
- php7设置最大连接数,sybase 15.7 修改 number of user connections 最大连接数
- [导入]关于OllyDbg 2.0的消息..
- c#中的socket(tcp)
- mysql表空间不足_MySQL Innodb表空间不足的处理方法 风好大
- java打印unicode_java程序实现Unicode码和中文互相转换
- 摩托罗拉MT788刷机
- 明解C语言。初级版 部分练习代码
- 傅里叶(一):傅里叶分析
- 如何将Web of Science中的题录及文章导入NoteExpress?
- flag--命令行参数定义多标签示例
- php 设置斜体字体,斜体 - FontForge 教程 | BootWiki.com
- bem css_CSS体系结构:块元素修饰符(BEM)和原子CSS
- lightroom 闪退_【Lightroom教程】3种校正白平衡的方法
- 南昌大学航天杯第二届部分题解
- vue如何搭建脚手架,超详细
- 用Unity开发2D消除类游戏的素材资源精选