博客
关于我
经典论文系列 | Group Normalization & BN的缺陷
阅读量:584 次
发布时间:2019-03-10

本文共 2059 字,大约阅读时间需要 6 分钟。

前言:

本文是何凯明在18年发表的论文,论文提出了BN中存在的问题,即模型性能受到Batch Size的影响,当batch size比较小时,模型性能退化严重,且BN的存在使得在受到内存限制的应用很难使用预训练。

本文基于这些问题提出了Group Normalization,GN很好地避免了这些问题,模型性能不会受到BatchSize的影响。

此外,在论文中作者将两者与其它一些归一化方法(如Layer Normalization、Instance Normalization)进行了介绍与实验对比。

 

论文:Group Normalization

 

主要思想

Batch Normalization(BN)是深度学习发展中的一个里程碑式技术,它使各种网络都可以进行训练。然而,沿batch维度进行归一化会带来问题:由于批次统计信息估算不准确,当batch size变小时,BN的误差会迅速增加。这限制了BN用于训练更大的模型以及将特征转移到计算机视觉任务(包括检测,分割和视频)的应用,这些任务需要小批量,并且受内存消耗的限制。

在本文中,我们提出了Group Normalization(GN)作为BN的一种简单替代方案。

GN将通道分为几组,并在每组内计算均值和方差以进行归一化。GN的计算不受批次大小的影响,并且其精度在各种批次大小中都是稳定的。在使用ImageNet训练的ResNet-50上,当使用2的批次大小时,GN的错误比其BN低10.6%;

当使用常用的batch size时,GN与BN性能接近,并且胜过其他归一化方法。 而且,GN可以自然地从预训练过渡到fine-tuning。 GN在COCO中的目标检测和分割以及Kinetics中的视频分类方面,可以胜过其基于BN的同类模型,这表明GN可以在各种任务中有效替代功能强大的BN。 

只需几行代码即可轻松实现GN。

 

一些细节

为方便基础薄弱的读者理解,先简单回顾一下Batch Normalization。

在公众号模型解读系列里《》(点击进入)中有对Batch Normalization进行完整解读。

 

BN算法如上图所示,BN算法计算同一个batch中数据的均值和方差,再进行归一化,最后进行尺度缩放和偏移。注:BN只计算一个batch中同一个通道上的数据,每个通道都会计算一次的均值和方差,这也就是为什么代码中(如nn.BatchNorm2d)中需要输入通道数。

可以看到上面这个算法是依赖于m(也就是batchsize)的,且ɣ和β都是在训练中学习的参数,这两个因素也是导致BN存在问题的关键所在。

 

回到本文,如下图所示,当batch size变小时,ImageNet 分类错误率急剧增加。这是因为小batch size下均值和方差代表的样本数量少,相比于大batch,随机性更大。尺度缩放和偏移的估计也没那么准确。在一些需要大分辨率的计算机视觉任务上(如目标检测,语义分割)由于内存限制而只能使用小batchsize,这也导致了预训练模型在ImageNet这种小分辨率图像上的预训练后得出的尺度缩放系数和偏移系数不够准确。

 

作者将几种归一化方法用如下示意图进行了对比,这个图很好地体现了这几种方法的区别。这里为了表示方便,把HxW reshape成了H*W。

可以看到,Batch Norm是将一个batch下同一通道下进行归一化;Layer Norm是在同一个样本下所有通道进行归一化;Instance Norm是每个样本的每个通道进行归一化;Group Norm是将一个样本下的通道分成G组,对每组进行归一化。

Layer Norm和Instance Norm可以当成是Group Norm的两种特殊情况,即G取C通道大小时,Group Norm就变成了Instance Norm,G取1时,就变成了Layer Norm。

从图中可以看出,除了Batch Norm,后面三个都与Batch Size无关,因此这三种归一化都不会受到Batch Size的影响。

结合前面对Batch Norm算法的简要回顾,介绍到这里,Group Norm其实就已经很清楚了,因为它使用的归一化公式也是Batch Norm的公式,只是在计算均值和方差所用到的数据的范围不一样。其实这三种方法的区别也都是这个。

 

实现代码

如下所示是GroupNorm用tensorflow实现的代码:

 

实验结论

 

 

如上图所示,在训练阶段,GN的错误率略低于BN,而在验证阶段,BN的错误率略低于GN,但都明显优于LN和IN。

 

如上图和下表所示,当使用不同的batch Size,BN的性能明显退化,而GN的模型始终都一致。

 

下一篇将对所有归一化方法做一个技术总结,将放在CV技术总结系列。

 

本文来源于公众号CV技术指南的论文分享系列,更多内容请扫描文末二维码关注公众号。

最近把公众号(CV技术指南)所有的技术总结打包成了一个pdf,在公众号中回复关键字“技术总结”可获取。

转载地址:http://uazvz.baihongyu.com/

你可能感兴趣的文章
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置自带的stub状态实现活动监控指标
查看>>
nginx配置详解、端口重定向和504
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
Nginx配置限流,技能拉满!
查看>>
Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
查看>>
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>