声明:原创文章,欢迎转载,但必须经过本人同意。


论文标题:《Group Normalization》

论文链接: https://arxiv.org/pdf/1803.08494.pdf

作为两年一届的计算机视觉顶会ECCV前不久在德国召开,引起了诸多CVer的关注。其中,最佳论文被一个3D朝向的论文斩获,提出了具有普世性价值的AAE。对,想要拿最佳paper,你的paper一定要提出具有普世性价值的东西。

事实上,Kaiming的论文普世性价值应该更大。不过由于是德国主场,最佳论文被德国的科研机构拿到了。开个了玩笑,其实Kaiming这篇论文拿不到best paper的原因是他没有给出数学解释。我们来好好讨论一下Kaiming的新论文。

提示:看本文需要有Batch Normalization基础,不了解BN的可以移步《Batch Normalization》,因为你至少要知道Normalization是在做一件什么事情。


Group Normalization

Batch Normalization的出现带来了一系列的Normalization研究。BN在很多基于深度学习的视觉任务里帮助特别大,到目前为止,BN还存在于各种主流CNN网络(如yolo v2/v3,MegDet等)。

2016年,Hinton发表了关于研究《Layer Normalization》的论文,同年也有一篇叫《Instance Normalization》的文章挂在arxiv上。都渴望能作为BN的代替品,事实上到目前为止,我们可以发现,这些LN和IN都没做到完全代替BN。

在Kaiming的文章里提到:GN是完全比BN有优势的,当然这只是他自己说的(也有数据支撑)。不过,具体能不能吊打BN,还有待时间的验证。

我们直接来分析文章:

BN目前存在的主要问题是:十分依赖batch size。当你的batch size比较小的时候,BN的效果是不太好的。但随着现在视觉任务越来越复杂,输入数据尺寸越来越庞大,网络结构也越来越复杂。举个栗子,以前只是做个几十像素平方图片的分类,现在慢慢到高清图检测,分割等等,再到视频检测分割,再到3D视觉任务。而我们的计算力,现在主要来讲还是GPU,发展得并没那么快。于是乎,计算力不足以撑起很大的batch size。比如,我retrain yolo v3全层网络参数的时候,用GTX1080只能带动的batch size为8,然而不同的batch size是实实在在影响训练结果的

那么,就要考虑解决batch size不够大的问题。Face++给出了一个很好的方案,就是用在COCO2017检测比赛上得冠军的方案,他们用了一个跨GPU计算BN的方案叫CGBN(cross-GPU Batch Normalization),他们是怎么做呢?

他们用了一个超大的Batch Size,256,分部在128块GPU上。其实重点还是在后面,他们有128块GPU,足够土豪。而且一方面还依赖HPC方面的技术专家去铺设这个计算系统。

GN的提出,就解决了BN所遇到的问题。GN对系统的优化程度完全不依赖Batch size有多大。我们来看一张图:

GN在很小的batch size就是稳定的,而BN在batch size不大的情况下,效果就会差很多。 看起来是令人兴奋的。先看看GN是怎么操作的:

上图描述了BN, LN, IN和GN四中norm方式。用更简单的语言来讲,各种Norm之间的差别只是针对的维度不同而已

从最广为人知的BN着手讲解:

在一层层的网络之间传递的数据,我们叫做hidden feature,即隐藏特征图。我们的隐藏特征图通常有4个维度,包括长、宽、depth和batch数。hidden feature的深度由上一参数层的filters数量决定,batch数就是我们设的batch size。

那么,我们的hidden feature就可以看作一个4维张量,包含(W, H, N, C)这四个维度。N对应的就是batch数,而C对应的就是channel数,即depth。注意区分四个维度分别的含义。

如图2所示,BN是在N维度上做的Norm,N越大那么,N维度上Norm的效果就越好。实际上,我认为图2画得不够好,因为一开始我看这张图的时候,就被迷惑了好久,所以为了更好解释这些维度之间的差别,我重新画了一遍图2,用我自己的方式:

对于BN来讲,norm的操作range是下图:

红色标记就是norm的操作range,通过这种方法,可以简单标出LN和IN:

我相信,通过上面这几张图,BN/LN/IN之间的差别是一目了然的。以此来引导出我们今天的主角——Group Norm.

GN也只是在操作维度上进行了一丢丢改进而已。他的做法比较贴近LN,可是比LN成功得多。 看一下图就知道了:

GN并不像LN那样把channel维度所有channel进行一个Normalization,而是以分组的形式获得一个组的Norm即Group Normalization。就像作者自己比较的说法:

       LN和IN只是GN的两种极端形式

我们对channel进行分组,分组数为G,即一共分G组。 当G=1时,GN就是LN了当G=C时,GN就是IN了。这也是一个有趣的比较,类似于GN是LN和IN的一个tradeoff。文章里对G的默认值是32

GN的效果

GN的效果足以用惊人来形容。我们看一下在batch_size=32情况下的各种norm效果对比表格:

GN表现效果比BN次了点儿,但吊打LN和IN是没问题的。重要的是,GN能不依赖Batch size这就是个BN无法企及的优势,可以看下面数据:

可以看出,在小batch-size的时候,GN是可以吊打BN的。当然,对于GN来讲,也存在G的取值不同所带来的结果差异:

这个结果也是很明显。可见GN是存在一个较优的G取值使得GN效果最好。


GN的具体实现

GN的实现,可以说是相当地简便,只需将channel分个组就行了,看论文里给出的tensorflow实现:

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 GN N, C, H, W = x.shape x = 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 

上面这段代码确确实实是论文中直接给出的! Kaiming作为FAIR的代表人物之一,你们自家有caffe和pytorch,居然用tensorflow来实现GN算法。一方面,体现出tf确实便利,另一方面也传达出不太好的信号——tf要侵染FAIR内部了。好了,不扯淡了。继续分析GN的实现。

可以一句话说明这个代码:将(N,C,H,W)四个维度分为(N,G,C/G,H,W)五个维度。多的这个维度G就是组数,从channel数上出来的。然后,分别求出每个组的均值方差,得出各自的Normalization。这就是GN的操作。


个人总结

BN本身带来了很多优势,比如可以加快收敛,提高模型准确率等等。但本身也有致命的缺点,BN的缺点如下:

1,十分依赖Batch size。一定要batch size足够大,BN的效果才会好;

2,不适用序列数据的神经网络比如RNN,因为这类数据不适合做出batch;即,BN的适用范围不够大。

GN能有效解决BN的以上两个问题,同时还带来依然令人惊奇的效果。GN是在channel维度上进行的norm,可以很好适用于RNN,这是GN的巨大优势。虽然文中没做关于RNN的实验,但这无疑提供了一条新思路。这,就是最佳论文提名奖应该做的事情。

说了这么多GN的优点,我来说下个人认为的GN存在的缺陷:

1,GN是否真的能跟大batch size的BN正面刚呢? 文中用于比较的BN所用的batch size都是32,其实这无疑并不是一个很大的batch size。就是说,文中与GN对比的BN并不是BN最强的状态。旷视科技提出的MegDet用了一种超大的batch size=256,激发的BN效果比batch_size=32的时候好很多,并且顺便拿下COCO2017检测的冠军。不知用了GN的MASK R-CNN是否干得过超大batch size的MegDet呢?结果我们可以拭目以待,等待COCO2018的揭晓。

2,通篇论文,作者没有说why。没有说自己为什么要这么做,也没有一个理论支持为什么这么做效果会好。没有任何数学理论解释的操作,都可以划分为“玄学”,就一点一点试,效果好就可以发文章了。先提出来,证明的事儿就交给后人吧

GN能否成功,还需要接受时间的考验。是否能像其他具有普世性价值的trick比如resnet,BN等那么成功,只需看明年的主流结构里,能不能经常看到GN的影子了。

【AI数学】Group Normalization(何恺明ECCV2018最佳论文提名)相关推荐

  1. CVPR 2021大奖出炉!何恺明获最佳论文提名,第一届Thomas S. Huang 纪念奖颁发

    作者 | 陈大鑫.琰琰.青暮 就在刚刚,CVPR 2021最佳论文.最佳学生论文等奖项出炉了! 其实在前不久,CVPR 2021官方推特上就公布了本次CVPR 2021最佳论文奖的32篇候选论文,按照 ...

  2. CVPR 2021大奖出炉!何恺明获最佳论文提名,华人四篇“最佳”!第一届Thomas S. Huang 纪念奖颁发...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者 | 陈大鑫.琰琰.青暮 本文转载自:AI科技评论 就在刚刚,CVPR 2021最佳论文.最佳学生论文等 ...

  3. ICCV 2017奖项公布:最大赢家何恺明获最佳论文,参与最佳学生论文

    当地时间 10 月 22 日,两年一度的计算机视觉国际顶级会议 International Conference on Computer Vision(ICCV 2017)在意大利威尼斯开幕.今日,大 ...

  4. 完整复现何恺明ICCV获奖论文结果并开源 !(附论文开源代码)

    ICCV 作为计算机视觉的顶级会议,2017年共收到2143篇论文投稿,比上一届ICCV2015的1698篇增加了26.2%.共621篇被选为大会论文,录用比例28.9%:poster.spotlig ...

  5. CVPR 2021 最佳论文奖项出炉,何恺明等获最佳论文提名 !

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:AI科技评论,专知 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下 ...

  6. 本周AI热点回顾:何恺明RegNet超越EfficientNet、数学难题“abc猜想”封印终被开启、微软麻将 AI 论文发布

    01 何恺明团队最新力作RegNet: 超越EfficientNet,GPU上提速5倍 还是熟悉的团队,还是熟悉的署名,Facebook AI实验室,推陈出新挑战新的网络设计范式.熟悉的Ross,熟悉 ...

  7. 如何从数学角度解释何恺明新作Masked Autoencoders (MAE)?

    何恺明最新一作论文 Masked Autoencoders(MAE)为自监督学习方法带来了一场革命,自提出以来,在 AI 领域内得到了极大的关注.MAE 不仅在图像预训练上达到了 SOTA 性能,更是 ...

  8. 何恺明的ResNet论文,被引量刚刚突破10万大关

    转载自机器之心 这是一篇计算机视觉领域的经典论文.李沐曾经说过,假设你在使用卷积神经网络,有一半的可能性就是在使用 ResNet 或它的变种. 前几天,人们发现 ResNet 论文被引用数量悄然突破了 ...

  9. 何恺明一作论文 MAE 已有人复现!PyTorch 版!(附链接)

    来源:AI算法与图像处理 本文多图,建议阅读5分钟 CV大神何恺明论文复现. 大家好,我是红色石头.之前介绍过CV大神何恺明又出力作!论文「Masked Autoencoders Are Scalab ...

最新文章

  1. 计算机视觉方向简介 | 阵列相机立体全景拼接
  2. 数据库连接工具datagrip较安全  代替Aqua Data Studio 6.5
  3. Leetcode 剑指 Offer 40. 最小的k个数 (每日一题 20210825)
  4. java不用析构函数,堆栈分配的类--C发生不需要的析构函数调用
  5. 10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...
  6. 几个简单的正则小例子
  7. 爬虫插件-XPath Helper下载与安装
  8. 百度将砸钱100多亿元建云计算中心(2012-09-03)
  9. 继承或者重写django的user model?
  10. Cache的疑惑??
  11. 儿童机器人编程语言_机器人十大流行编程语言的介绍
  12. python画球面_matplotlib中的球面坐标图
  13. 使用maven引用第三方jar包
  14. {转载}与我十年长跑的女朋友就要嫁人了。
  15. 家庭教育中有近一半是由母亲负责孩子学习,占49%,父亲负责仅占10%
  16. Python基础,day2
  17. 单点登录系统设计及实现
  18. Java 遍历 Redis Hash key中所有数据
  19. 即将被社会淘汰的五种人
  20. 球半足球推荐,欧冠杯决赛:利物浦 VS 皇家马德里

热门文章

  1. 观海微Crosstalk Introduction
  2. 一键安装php环境 iis,Windows Server 2008(R2) 一键安装PHP环境(PHP5.3+FastCGI模式
  3. Python 采用Scrapy爬虫框架爬取豆瓣电影top250
  4. Enter passphrase for key
  5. 衍射极限、MTF与相机分辨率(1)
  6. iOS OC 及 Swift 获取手机型号,系统版本
  7. 谷歌模拟器:谷歌浏览器模拟手机调试添加机型
  8. 堡垒机是干什么的? 看完这篇你就懂了
  9. 微信论坛小程序系统设计与实现
  10. SpringBoot自定义starters