Batch Normalization、Layer Normalization、Group Normalization、Instance Normalization原理、适用场景和实际使用经验

Batch Normalization、Layer Normalization、Group Normalization、Instance Normalization原理、适用场景和使用经验

一、 简单介绍各种Normalization

先放一张来自Group Normalization原论文中的图,个人认为这个图很形象,以此图直观感受一下各种归一化的区别:
在这里插入图片描述
(注意:上图中,特征图的长和宽分别为W和H,由于我们的世界是3D的,直观只能展示3个维度,所以这里作者将H和W压缩成一个维度。则上图种每一个大方块展示的是一个Batch的特征图,其长宽高三个维度分别代表通道(Channel, C)、minibatch(BatchSize, N)、特征图(FeatureSize, (H,W)))

(1)Batch Normalization(上图左1):

  • BN在Batch的方向上进行归一化,对于每一个channel的特征执行相同的操作,也就是说,这种归一化是通道间独立的
  • 由于归一化操作会将参与归一化的特征映射到均值为0,方差为1的正态分布上。那么BN归一化之后,不同通道的特征的区分度减小(每个Channel都变成了N(0,1)N~(0, 1)N (0,1)正态分布)。同时Batch内不同样本的特征仍然可区分
  • 根据BN的特性我们很容易理解:由于各个样本间的特征区分度保留,而不同通道的特征区分度降低,这非常符合CV中的分类任务(一张图片里有一只猫,那么不同通道的特征都可以表达该信息,而Batch内另一张图片没有猫,这两个特征的区分度仍然很大)。

(2)Layer Normalization(上图左2):

  • LN在Channel方向进行归一化,对于Batch内每一个样本执行相同操作,即样本间独立的
  • 同样的,与BN相反,LN归一化之后,不同通道的特征的区分度不变。同时Batch内不同样本的特征区分度降低(每个样本都变成了N(0,1)N~(0, 1)N (0,1)正态分布)
  • 根据LN的特性我们很容易理解:由于不同通道的特征区分度保留,各个样本间的特征区分度消失,这非常符合NLP中的语义特征(相同的字在不同的上下文中,有不同的含义,但是每个句子之间不需要有明显的差别)。

(3)Instance Normalization(上图左3):

  • IN在每个样本的每个Channel内部进行归一化,即样本和通道同时独立的
  • 同样的,IN归一化之后,不同像素的特征的区分度不变。同时Batch内不同样本以及同一样本的不同通道的特征区分度都降低(每个样本和通道都变成了N(0,1)N~(0, 1)N (0,1)正态分布)
  • IN一般用于生成任务和风格迁移任务,因为这种任务会对细节特征有高要求,直观可以理解为更细粒度的特征区分要求

(4)Group Normalization(上图左4):

  • GN在Channel方向分组(group),然后在每个group内进行归一化
  • 有了前面的介绍,其实GN直观上像是LN的和IN的折中,当分组数量为1时,GN就变成了LN,分组数量等于通道数时,GN就变成了IN。

二、各种归一化的详细介绍

1. Batch Normalization

(1)论文出处:链接

(2)原理

核心过程即如下算法流程:

  • 对于输入的所有xix_ixi,计算集合B={x1,x2,x3,⋯,xi}B = \{ x_1,x_2,x_3,\cdots,x_i\}B={x1,x2,x3,,xi}的均值μB\mu_BμB和方差σB2\sigma_B^2σB2
  • 进行归一化操作
  • 值得一提的是,BN中最后还有一个线性仿射变换,即有一个缩放参数γ\gammaγ和平移参数β\betaβ,这两个参数是可学习的。这是因为不同的batch的分布可能是不一样的,纵使BN可以将同一个Batch的分布拉到同一分布,但是不能保证对所有batch的数据都合适
    在这里插入图片描述

(3)使用场景

BN可以加快深度神经网络的训练速度(可以在训练时使用更高的学习率,因为数据归一化之后,不会使得梯度有太大的波动),并给网络的权重提供了正则化,可以一定程度上防止过拟合
BN可以在任何场景下使用,你可以把它当作一个默认操作,后面再调整,但是这里要说一下调整的依据:

  • BN不适用于Batchsize很小的情况,这里再放一张GN论文中的图:
    在这里插入图片描述
    随着Batchsize减小,BN的性能越来越差,直观理解起来其实很简单:就是因为小的Batch中的数据并不能很好的表达一个分布,这就导致了梯度波动变大了,所以BN带来的正则防止过拟合性能就会降低。

(4)Pytorch 使用方法

>>> # With Learnable Parameters
>>> m = nn.BatchNorm2d(100)
>>> # Without Learnable Parameters
>>> m = nn.BatchNorm2d(100, affine=False)
>>> input = torch.randn(20, 100, 35, 45)
>>> output = m(input)

前文已经大致描述了其他各种归一化方法的操作,后文就不再赘述了

2. Layer Normalization

(1)论文出处:链接

(2)使用场景

  • LN大部分用于NLP任务,可以作为该类任务的默认选项
  • 当任务本身不需要太多词级语义信息,可以考虑使用BN
  • LN可以用于小Batchsize下的CV任务(风格迁移、图像生成),可以提升效果

(3)Pytorch 使用方法

>>> # NLP Example
>>> batch, sentence_length, embedding_dim = 20, 5, 10
>>> embedding = torch.randn(batch, sentence_length, embedding_dim)
>>> layer_norm = nn.LayerNorm(embedding_dim)
>>> # Activate module
>>> layer_norm(embedding)
>>>
>>> # Image Example
>>> N, C, H, W = 20, 5, 10, 10
>>> input = torch.randn(N, C, H, W)
>>> # Normalize over the last three dimensions (i.e. the channel and spatial dimensions)
>>> # as shown in the image below
>>> layer_norm = nn.LayerNorm([C, H, W])
>>> output = layer_norm(input)

3. Instance Normalization

(1)论文出处:链接

(2)使用场景

  • IN大部分用于图像生成和风格迁移任务,可以作为该类任务的默认选项

(3)Pytorch 使用方法

>>> # Without Learnable Parameters
>>> m = nn.InstanceNorm2d(100)
>>> # With Learnable Parameters
>>> m = nn.InstanceNorm2d(100, affine=True)
>>> input = torch.randn(20, 100, 35, 45)
>>> output = m(input)

4. Group Normalization

(1)论文出处:链接

(2)使用场景

  • GN作为在小Batchsize下的调整选项,可以提升模型性能(亲测有效)

(3)Pytorch 使用方法

>>> input = torch.randn(20, 6, 10, 10)
>>> # Separate 6 channels into 3 groups
>>> m = nn.GroupNorm(3, 6)
>>> # Separate 6 channels into 6 groups (equivalent with InstanceNorm)
>>> m = nn.GroupNorm(6, 6)
>>> # Put all 6 channels into a single group (equivalent with LayerNorm)
>>> m = nn.GroupNorm(1, 6)
>>> # Activating the module
>>> output = m(input)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

blockly自定义中文出问题_[BlocklyNukkit入门]#5自定义物品

自定义物品创建一个木棍item blockitem.buildItem(280, 0, 1);设置名字item.setCustomName("棍");设置信息,用分号隔开换行blockitem.setItemLore(item, "第一行;第二行;第三行;第四行");添加有序合成添加有序合成,设置G为橡木原木的键,G就代表原木.参数1…

收发一体超声波测距离传感器模块_芜湖低功耗超声波液位计物位计设备排名

KUS 超声波液位物位计 8种工作状态设置指导 1), 窗口常开模式(模拟量输出产品为正线性工作模式或者距离测量模式)2), 窗口常闭模式(模拟量输出产品为负线性工作模式或者液位测量模式)3), 单点常开模4), 单点常闭模式。5), 单点常开带大滞回区间模式6), 单点常闭带大滞回区间模式…

学术写作科研工具推荐

最近在写论文,然后过程中觉得一些工具可以提升效率,所以就简单总结一下,以后也会逐渐更新 Ccf deadlines:我该赶哪个ddl呢? 一些主要ccf A、B、C类会议的截稿日期都会被统计显示在此哦,看看你想投哪个会吧…

如何加声调口诀_声母韵母口诀顺口溜歌曲(怎么快速记住声母韵母)

家有一年级的小朋友,或者是孩子即将上小学的爸爸妈妈们,孩子的拼音学习进行得怎么样了?拼音是孩子进行语文学习的第一课,也是基础。但对很多小朋友来说真的是一道拦路虎。很多孩子由于一年级拼音基础不牢,到了四五年级…

pytorch model.train() 和model.eval() 对 BN 层的影响

model.train() BN做归一化时,使用的均值和方差是当前这个Batch的如果这时 track_running_statsTrue, 则会更新running_mean 和 running_var但是,running_mean 和 running_var不用在训练阶段 model.eval() BN 做归一化时,使用的…

联想用u盘重装系统步骤_详解联想如何使用u盘重装win10系统

联想是国内知名的品牌之一,很多朋友都购买了联想品牌的电脑,但是在使用的过程中难免会出现些磕磕碰碰的问题。所以今天小编就大家详细的介绍一下联想电脑使用u盘重装win10系统的方法。联系怎么使用u盘重装win10系统呢?最近有不少朋友在询问这…

笔记本电脑键盘切换_真想本小新13pro搭档,笔记本电脑周边好物清单推荐

原标题:真想本小新13pro搭档,笔记本电脑周边好物清单推荐真想本小新13pro搭档,笔记本电脑周边好物清单推荐 2020-10-24 15:21:493点赞4收藏2评论9月28日 - 11月12日,参与#双11购物攻略#征稿活动,赢取苹果全家桶8888元超…

pytorch 训练模型很慢,卡在数据读取,卡I/O的有效解决方案

多线程加载 在 datalaoder中指定num_works > 0,多线程加载数据集,最大可设置为 cpu 核数设置 pin_memory True, 固定内存访问单元,节约内存调度时间示例如下: loader DataLoader(dataset,batch_sizebatch_size * group_size,shuffleTr…

python达梦数据库_python 操作达 梦数据库

python 达梦数据库操作流程连接数据库 dm.connect( ... )获取游标 dm_conn.cursor()编写SQL语句 sql_str执行SQL语句 dm_cursor.execute()获取结果列表 dt_breakpoint dm_cursor.fetchall()关闭游标 dm_cursor.close()关闭数据库连接 dm_conn.close()代码示例import pandas as…

C++求复数的角度_11.初中数学:方程5x2m=4x的解,在2与10之间,怎么求m的取值范围?...

欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂。所有的视频内容,全部免费,请大家放心关注,放心订阅。初中数学:方程5x-2m-4-x的解,在2与10之间,怎么求m的取值范围…

python3 beautifulsoup 模块详解_关于beautifulsoup模块的详细介绍

这篇文章主要给大家介绍了python中 Beautiful Soup 模块的搜索方法函数。 方法不同类型的过滤参数能够进行不同的过滤,得到想要的结果。文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。前言我们将利用 Beautifu…

python解zuobiaoxi方程_欧式期权定价的python实现

0. pre 在《给你的二叉树期权定价》中就挖了坑要写期权定价的代码,这会有时间来填坑啦。本文将会用python实现欧式期权定价。具体的定价算法分别是基于BS公式的、蒙特卡洛的以及二叉树的。对于二叉树和BS公式还不熟悉的小伙伴可以移步至往期关于二叉树期权定价和BS公…

去除标签_有效去除“狗皮膏药”标签,快学起来吧

去除商品标签向来是比较头疼一件事,有时候在去掉标签后会留下粘性残留物,它会粘上灰尘和其他脏东西,把表面变成脏兮兮的颜色,让人看着太不舒服了。其实去除标签残留粘胶并不难,可能家里就有去除它的工具哦~那今天小编就…

win10很多软件显示模糊_还在使用第三方软件?Win10可以直接显示显卡温度啦

微软刚刚开始向参与快速通道测试的用户推送Windows 10 20H1 Build 18963 版带来部分新功能和优化等。这个版本也是常规优化版本因此带来的新功能很少,但这次更新为任务管理器带来原生的显示显卡温度功能。用户打开任务管理器点击性能选项卡然后找到「独立显卡」即可…

分数怎么化成带分数_小升初数学总复习第三个基础模块:分数的认识

今天我们开始小升初数学总复习第三个基础模块的复习:分数的认识分数的认识一共分为8个知识考点。第一,分数的意义把单位“1”.平均分成若干份,表示这样的一份或者几份的数叫做分数。表示其中一份的数叫做分数单位。第二&#xff0…

active mq topic消费后删除_《我想进大厂》之MQ夺命连环11问

继之前的mysql夺命连环之后,我发现我这个标题被好多套用的,什么夺命zookeeper,夺命多线程一大堆,这一次,开始面试题系列MQ专题,消息队列作为日常常见的使用中间件,面试也是必问的点之一&#xf…

嘀嗒还是滴答_2021年顺风车车主口碑榜!滴滴、滴答、一喂顺风车成TOP3

出行平台烧钱抢用户抢司机,大家都见怪不怪了,只是近期平台为自身利益而牺牲司机的例子层出不穷,在司机刚进入平台补贴多流水多,没多久司机收入都不够交车租的,司机踩坑,全家受罪,很多司机表示自…

wampserver橙色如何变成绿色_实验室如何自建数据库和网站主页

本文首发于微信公众号:火行(ID:firegotech)实验室如何自建数据库和网站主页作者:沐倾(火行科研Club创始成员)编辑:火花(声明:本文适用于非计算机专业领域人士&#xff09…

mysql ( )连接_MySQL中concat函数(连接字符串)

MySQL中concat函数使用方法:CONCAT(str1,str2,…)返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串&…

远程连接电脑_Python黑科技:在家远程遥控公司电脑,python+微信一键连接!

有时候需要远程家里的台式机使用,因为我平时都是用 MAC 多,但是远程唤醒只能针对局域网,比较麻烦,于是我想用微信实现远程唤醒机器。准备工作本程序主要是实现远程管理 Windows10操作系统的开机和关机:在 Windows机器的…