Batch Normalization、Instance normalization简单理解

article/2025/8/15 23:06:18

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的方差,对 X X X做归一化。重点在第四步,**加入缩放和平移参数 γ , β \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' + \beta y=γ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' + \beta y=γ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)


http://chatgpt.dhexx.cn/article/y8tsjon0.shtml

相关文章

Normalized Mutual information

在写论文做数据测试时有用到一个nmi(normalized mutual information)评价聚类的一种方法,不是很清楚,然后上网找了一下资料。 首先在理解nmi前,先说说mutual information这个东西。 我们先举个例子: 比如说,标准结果…

Cesium 定位到图层(ImageryLayer)报错 DeveloperError: normalized result is not a number

Cesium 定位到图层(ImageryLayer)报错 DeveloperError: normalized result is not a number 错误原因调试定位问题过程问题解决总结 2023年4月19日更新—搞了一个 Cesium 镜像,欢迎使用:沙盒示例 和 API 在使用 Cesium 封装代码的…

normalize 函数

2. normalize 函数介绍 函数原型: void normalize(InputArray src,OutputArray dst, double alpha1, doublebeta0, int norm_typeNORM_L2, int dtype-1, InputArray masknoArray() ) 该函数归一化输入数组使它的范数或者数值范围在一定的范围内。 Parameters: src …

(六)Normalization

(六)Normalization why 从图中可以看出,当输入太小或者太大的时候,函数的取值随着输入的变化几乎为0。这样就会发生梯度离散的情况,因此我们很有必要把输入控制在一个小一点的区间内。所以我们通过normalization操作&…

【C++】Eigen中norm、normalize、normalized的区别

参考: https://blog.csdn.net/m0_56348460/article/details/117386857https://blog.csdn.net/huangjunsheng123/article/details/119274776?spm1001.2101.3001.6650.7&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7E…

理解各种 Normalization

引言 Batch Normalization(BN)似乎已经成为构建网络不可缺少的一部分,它是如此“熟悉”以至于我天天使用却不明白原理。对此,本文梳理了 BN 的意义,实现以及一系列变体:Layer Norm,Instance No…

Layer Normalization解析

原论文名称:Layer Normalization 原论文地址: https://arxiv.org/abs/1607.06450 之前有讲过Batch Normalization的原理,链接,今天来简单讲讲Layer Normalization。Layer Normalization是针对自然语言处理领域提出的,…

Eigen中norm、normalize、normalized的区别

Eigen中norm、normalize、normalized的区别 norm() 对于Vector&#xff0c;norm返回的是向量的二范数&#xff0c;即 例如&#xff1a; Vector2d vec(3.0,4.0); cout << vec.norm() << endl; //输出5 对于Matrix&#xff0c;norm返回的是矩阵的弗罗贝尼乌斯范数…

归一化函数 normalized()

1. 归一化定义与作用 归一化就是要把需要处理的数据经过处理后&#xff08;通过某种算法&#xff09;限制在你需要的一定范围内。 首先归一化是为了后面数据处理的方便&#xff0c;其次是保证程序运行时收敛加快。归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间…

手机锁屏后微信收款语音不播报?-by:nixs

荣耀10&#xff0c;之前用荣耀7x就没这毛病&#xff01; 我确认与设置无关&#xff0c;微信语音播报是开启状态&#xff0c;通知设置都是允许的&#xff0c;我更不会二到把手机关静音&#xff01; 反正就是黑屏待机时&#xff0c;没有任何声音&#xff0c;一但点亮屏幕就有语音…

App微信小程序测试流程及要点

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c;一般测试时间为两三周&#xff08;即15个工作日&#xff09;&#xff0c;根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源…

微信小程序,分享如何封装一个全局支持暂停,拖动等各类操作的音视频等多媒体管理器

不知不觉埋头于业务已许久&#xff0c;距离上一篇分享应该很久很久以前&#xff0c;具体何时&#xff0c;已无从知晓。慢慢的开始觉得锅有点热&#xff0c;感觉呼吸有点困难&#xff0c;温水里面的青蛙趁着腿还没完全麻木的时候&#xff0c;也想着开始重拾旧梦&#xff0c;稍微…

html微信登录密码输入密码,不用输密码,只要8个数字就能登录你的微信

不知道大家有没有遇到过这样的问题&#xff0c;就是当我们换新手机之后&#xff0c;在登录微信的时候就需要密码了。 打开凤凰新闻&#xff0c;查看更多高清图片 可是有些人记性不好&#xff0c;经常忘记微信登录密码&#xff0c;这该怎么办呢&#xff1f;今天小Q来教大家一招可…

微信上隐藏着6个功能,实在是太厉害了,真令人相见恨晚

很多人都说微信不太好用,那是因为你还没有找到好用的功能,如果你只会聊天和付款那就太out了,今天才知道,微信上隐藏着6个功能实在是太厉害了。 一、无线极速传输 微信不仅方便了生活,在办公上也是一个小能手,无需数据线就能与电脑相互传输文件,找到文件传输助手,将文件…

基于微信小程序音乐播放器的设计与实现毕业设计源码271156

Springboot音乐播放小程序的设计与实现 摘 要 本文设计了一种基于微信小程序的音乐播放器&#xff0c;系统为人们提供了方便快捷、即用即搜的音乐搜索播放服务&#xff0c;包括音乐资讯、音乐库推荐、交流论坛、注册登录、最近播放列表功能等&#xff0c;用户不仅能够方便快捷地…

微信按钮翻译中英对照表

申明&#xff1a;发文方便自己查阅&#xff0c;当然如对看到的朋友有所帮助&#xff0c;也是乐事一件。 代码中需要调用微信&#xff0c;翻译连续翻车&#xff0c;比如朋友圈&#xff0c;做个记录方便查阅&#xff1a; /** * 微信 中英文对照 * 微信 wechat * 朋友圈…

微信更新了 版本8.0.30

这次新功能包括&#xff1a; 朋友圈扩展文字输入区域&#xff1a;发朋友圈或朋友圈评论时&#xff0c;编辑文案&#xff0c;文本区域会随文字数量而增大。长按订阅号可以取消关注&#xff1a;在订阅号列表中&#xff0c;此前长按封面只有悬浮功能&#xff0c;更新后现在加入了…

android微信消息无提醒,OPPO手机微信消息不提醒怎么办?(附多种解决方法)

微信来新消息不提醒&#xff0c;不能第一时间看到微信消息&#xff0c;一般是设置不到位。现在就可以通过以下几步来进行排除解决。 小编以R9手机为例&#xff0c;这就告诉你们相关设置哈&#xff0c;一起来学习吧~~ OPPO手机微信消息不提醒怎么办&#xff1f;(附多种解决方法)…

ipad如何与手机微信连接服务器地址,如何设置微信在手机和ipad同步 - 卡饭网

微信怎么设置空白头像和昵称?iPhone手机设置微信空白头像和昵称的方法介绍 微信怎么设置空白头像和昵称?iPhone手机设置微信空白头像和昵称的方法介绍 iPhone手机应该如何设置微信空白名字和头像?微信头像往往能反映出一个人的性格,让自己的微信头像和别人不一样,彰显出自己…

苹果微信密码服务器,苹果微信怎么记住密码的登录

满意答案 tanwandewo 2020.09.14 采纳率&#xff1a;48% 等级&#xff1a;6 已帮助&#xff1a;210人 在进行手机各类密码设置的时候&#xff0c;总是会有一种这辈子不会忘的错觉&#xff0c;于是怎么复杂怎么来&#xff0c;忘记密码就崴泥了&#xff0c;悔恨啊…… 是不是看…