论文阅读 - Group Normalization

文章目录

  • 1 概述
  • 2 几种normalization的方法
    • 2.1 Batch Norm
    • 2.2 Layer Norm
    • 2.3 Instance Norm
    • 2.4 Group Norm
  • 3 效果对比
  • 参考文献

1 概述

Group Nomralization的提出是为了解决一张GPU上能容纳的batch_size很小,导致模型训练效果显著变差的问题。随着深度学习的快速发展,我们所使用的模型越来越大了,这也就导致了在训练时,一个batch所占用的显存越来越大了,也i就导致了一张卡上的batch_size会很小,最终导致了模型最终效果大幅变差。这里之所以强调一张卡,并不是因为穷,而是因为batch normalization在计算batch的mean和variance的时候,只能是以一张卡上的batch_size为单位去算的,多卡之间不会对此进行通信。

如下图所示,batch normalization的效果受batch size的影响很大,但是group nomalization完全不受batch size的影响(其计算压根就和batch没关系),效果也不逊色于batch normalization,而且batch size越小,优势越大。
1

2 几种normalization的方法

normalization是为了解决Internal Covariate Shift以及梯度弥散和爆炸的问题,这两个都是深度学习模型中非常关键的问题,因此normalization这步是逃不掉的。说到这里了,不妨说两句Internal Covariate Shift是个啥,我个人最直观的理解就是,模型的输入经过一层层的计算之后,每一层的输入的数据分布是不一样的,这就导致了结果的不准确,covariate shift现象的解释这篇博客很形象地举例说明了这个问题,这里点到为止。

目前主流的有四种normalization的方法,分别是Batch Norm,Layer Norm,Instance Norm以及Group Norm,其操作其实都很简明易懂。下图是这四种方法主要区别的一个对比示意图。下面会详细说一说这几种方法。
2

2.1 Batch Norm

假设我们的输入是一个shape为(N,C,H,W)的向量,其中N表示Batch size的大小,C表示channel数量,H为height,W为width。那么Batch Norm就会在整个batch的每个channel上计算一次均值和方差,并对每个channel进行归一化。
3
其详细计算过程为
4
要再次强调的是,上面的计算都是在每个channel上进行的,有几个channel就会算出几个均值和方差。另外值得一提的是,这里有一个γ\gammaγβ\betaβ,他们是模型可以学习的参数。并不是模型的每一层都需要进行归一化,当γ=σ2+ϵ\gamma = \sqrt{\sigma^2 + \epsilon}γ=σ2+ϵ,且 β=μ\beta = \muβ=μ时,就还原成了没有归一化的数据。ϵ\epsilonϵ是为了预防分母为0而加的一个很小的数。

不过这里有个问题就是inference的时候该咋办,inference的时候如果时计算输入数据的均值和方差的话,那岂不是我一张一张图片输入和多张图片一起输入的结果还不一样了。放心,inference的时候,Batch Norm用的均值和方差时训练时候,记录下来的整个训练数据的均值和方差的期望。

2.2 Layer Norm

Layer Norm的目的和本文开头所讲的Group Norm的目的是一样的。不过它的做法比较极端,它是在一个数据的所有channel上计算均值和方差的,这干想想也有点问题,不同channel代表的特征是不同的,把他们归一化到同一个均值和方差上,未免有些强人所难。
5
这是group norm的一种极端形式,当group的大小刚好等于C时,就是Layer Norm了。

2.3 Instance Norm

Instance Norm和Layer Norm对着干,它也知道不同意义的channel不能一起归一化,于是就干脆用一条数据一个channel上的数据进行归一化。不过这也过于极端,一条数据一个channel上计算出来的均值和方差,未免有些不太靠谱,难以表征这个channel的数据分布。
6
这也是group norm的一种极端形式,当group的大小刚好等于1时,就是Instance Norm了。

2.4 Group Norm

Group Norm是个和事佬,设置了一个叫做group的东西,取一部分的channels作为一个group进行归一化,既不得罪Layer Norm,也不得罪Instance Norm,因为一些经典的,比如SIFT和HOG这样的特征,的确是以group为单位的。事实也证明,这个和事佬做的很成功。
7
Group Norm的代码也很简单,只需要短短几行就可以了

def GroupNorm(x, gamma, beta, G, eps=1e−5):# x: input features with shape [N,C,H,W]# gamma, beta: scale and offset, with shape [1,C,1,1]# G: number of groups for GNN, C, H, W = x.shapex = tf.reshape(x, [N, G, C // G, H, W])mean, var = tf.nn.moments(x, [2, 3, 4], keep dims=True)x = (x − mean) / tf.sqrt(var + eps)x = tf.reshape(x, [N, C, H, W])return x ∗ gamma + beta

另一个好处就是,它在inference时不需要依赖训练时的均值和方差。

3 效果对比

(1)相同batch size,不同normalization
当batch size都是32时,Batch Norm的效果时最好的,Group Norm其次,Layer Norm和Instance Norm就没有什么竞争力了,可以忽略不计了。
8

(2)不同batch size,Batch Norm和Group Norm对比
当batch size比较大时,Batch Norm是占优势的,但当batch size变小时,Batch Norm的效果就越来越差了。而Group Norm的效果不受batch size的影响。
9
(3)Group Norm在不同Group size下的表现
当只有一个group时,Group Norm就变成了Layer Norm,当每个group只有一个channel时,就变成了Instance Norm。实验证明,group的大小在32或者16个channel左右时比较优的一个值,一般的框架中默认的都是32。
10
Group Norm虽然解决了单卡batch size小时模型表现部好的问题,但是也带来了一个需要调节的超参数group size。这也意味着要做更多的实验。

参考文献

[1] Group Normalization
[2] Group Normalization (Paper Explained)
[3] Implementing Batch Normalization in Python

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

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

相关文章

十六、PHP框架Laravel学习笔记——构造器的增删改

一.增删改操作 使用 insert()方法可以新增一条或多条记录; //新增一条记录 DB::table(users)->insert([ username > 李白, password > 123456, email > libai163.com, details > 123 ]); //新增多条记录 DB::table(users)->insert…

git如何切换分支_拜托,不要再问我Git分支如何使用

今天来讲讲我使用Git分支的一些经验,记录一下,希望对大家有帮助。阐述在平常开发中,一般都会对应三种环境,本地环境、测试环境、线上环境。开发的基本流程都是先在本地环境开发好,再把代码发布到测试环境测试,最后再发…

搞懂HMM

文章目录1 概述2 符号说明3 两点假设4 Evaluation4.1 前向算法(forward algorithm)4.2 后向算法(backward algorithm)5 Learning6 Decoding参考资料1 概述 本文是B站上机器学习-白板推导系列(十四)-隐马尔可夫模型HMM的学习笔记&…

书店售书最低价格问题

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:本数 折扣 2 5% 3 10% 4 …

十七、PHP框架Laravel学习笔记——模型的定义

一.默认设置 框架可以使用 Eloquent ORM 进行数据库交互,也就是关系对象模型; 在数据库入门阶段,我们已经创建了一个 User.php 模型,如下: php artisan make:model Http/Models/User //默认在 app 目录 …

centos 启动一个redis_基于prometheus+grafana体系监控redis缓存服务

概述前面已经介绍了怎么用prometheus监控mysql数据库,今天主要分享下怎么去监控redis服务。由于没有redis环境,所以用docker模拟了一下。一、Docker部署1、下载sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.…

十八、PHP框架Laravel学习笔记——模型的增删改

一.增删改操作 新增方法如下,注意:默认模型接管 created_at 和 updated_at; $users new User(); $users->username 辉夜; $users->password 123; $users->email huiye163.com; $users->details 123; $use…

搞懂语音去噪

文章目录1 概述2 传统语音去噪2.1 谱减法2.2 维纳滤波法3 深度语音去噪参考资料1 概述 语音去噪(noise reduction)又被称为语音增强(speech enhancement),主要是针对于有人声的音频进行处理,目的是去除那些背景噪声,增强音频中人声的可懂性(…

软件架构设计案例_透过现象看本质:常见的前端架构风格和案例

所谓软件架构风格,是指描述某个特定应用领域中系统组织方式的惯用模式。架构风格定义一个词汇表和一组约束,词汇表中包含一些组件及连接器,约束则指出系统如何将构建和连接器组合起来。软件架构风格反映了领域中众多系统所共有的结构和语义特…

十九、PHP框架Laravel学习笔记——批量赋值和软删除

一.批量赋值 上一节增删改中,新增中我们发现需要进行批量赋值的许可;一般情况下,是为了防止提交过来的字段在部分场景中不需要或不能;所以,我们需要通过黑白名单机制进行过滤掉必要的字段; //通…

speech production model

文章目录1 概述2 source model3 filter model4 小结参考资料1 概述 本文的目的是为了厘清在speech production model中source model和filter model所扮演的角色,不涉及具体公式的推导或者模型的建立,只是为了把这两个model在干什么事情说明白。文中用到…

二十、PHP框架Laravel学习笔记——模型的作用域

一.本地作用域 很多情况下,我们在数据查找时有一部分条件会被重复且大量使用;而这个条件,可能只是在这个模型对应的数据表使用,别的表并不使用;那么这种情况,可以使用本地作用域的方式&#xf…

论文阅读 - Joint Beat and Downbeat Tracking with Recurrent Neural Networks

文章目录1 概述2 信号预处理3 分类神经网络4 动态贝叶斯网络(HMM)4.1 原始的bar pointer model4.2 原始的bar pointer model的缺点4.3 改进后的模型5 预测参考资料1 概述 最近在做音乐卡点相关的项目,需要对音乐的基本特征进行理解&#xff…

二十一、PHP框架Laravel学习笔记——模型的访问器和修改器

一.访问器 访问器:就是在获取数据列表时,拦截属性并对属性进行修改的过程;比如,我们在输出性别时,在性别左右加上括号,或给邮件转换为大写; //访问器,前固定 get&#…

python将txt转json_Python控制乐高EV3,以及VSCODE环境配置

乐高EV3的可扩展性很强,但如何用pc连接ev3,并用python代码来控制EV3,资料太少了,试着做了一次,记录在这里。需要的硬/软件硬件准备一、乐高EV3二、PC,win10系统三、TF卡(我用的是64G的&#xff…

移动文件读/写指针----lseek

头文件&#xff1a;#include<sys/types.h>、#include<unistd.h> 函数原型&#xff1a;off_t lseek(int fildes,off_t offset,int whence) 参数说明&#xff1a;fildes:文件描述符 offset:偏移量&#xff0c;正数表示正向偏移&#xff0c;负数表示负向偏移。 whence…

Yolo系列知识点梳理(Yolov1-v5)

文章目录1 概述2 Yolo系列模型2.1 基石 - Yolov12.1.1 Yolov1的网络结构2.1.2 Yolov1的feature map2.1.3 Yolov1的训练2.1.4 Yolov1的预测2.1.5 Yolov1小结2.2 Yolo9000 - Yolov22.2.1 Better2.2.1.1 引入了Batch normalization2.2.1.2 高分辨率的分类器2.2.1.3 加入了anchor机…

二十二、PHP框架Laravel学习笔记——集合的使用

一&#xff0e;创建集合 什么是集合&#xff1f;即&#xff1a;它是一种更具读取性和处理能力的数组封装&#xff1b;比如&#xff0c;我们从数据库得到的数据列表&#xff0c;它就是一种集合&#xff1b;数据集合&#xff0c;提供了大量的方法方便我们进行各种操作&#xff1…

二十三、PHP框架Laravel学习笔记——集合的常用方法

一&#xff0e;常用方法 all()方法&#xff0c;转换为属性形式输出&#xff0c;使用 dd 方法看类型&#xff1b; $collection collect([1, 2, 2, 3, 4, 4, 4]); dd($collection->all()); PS&#xff1a;$collection->dd()方法可以以 dd()模式输出&#xff0c;还有 du…

mac看图软件哪个好用_细数Mac上那些好用且免费的软件(三)

许多朋友购买了Mac电脑之后发现很多软件都没有&#xff0c;而且苹果商店好多软件都是收费的。那有没有免费的软件也能满足日常的需求呢&#xff1f;macw小编就为大家推荐一些免费且超级好用的软件&#xff0c;赶快来看看有没有你需要的吧&#xff01;细数Mac上那些好用且免费的…