【AI数学】Group Normalization(何恺明ECCV2018最佳论文提名)
声明:原创文章,欢迎转载,但必须经过本人同意。
论文标题:《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最佳论文提名)相关推荐
- CVPR 2021大奖出炉!何恺明获最佳论文提名,第一届Thomas S. Huang 纪念奖颁发
作者 | 陈大鑫.琰琰.青暮 就在刚刚,CVPR 2021最佳论文.最佳学生论文等奖项出炉了! 其实在前不久,CVPR 2021官方推特上就公布了本次CVPR 2021最佳论文奖的32篇候选论文,按照 ...
- CVPR 2021大奖出炉!何恺明获最佳论文提名,华人四篇“最佳”!第一届Thomas S. Huang 纪念奖颁发...
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者 | 陈大鑫.琰琰.青暮 本文转载自:AI科技评论 就在刚刚,CVPR 2021最佳论文.最佳学生论文等 ...
- ICCV 2017奖项公布:最大赢家何恺明获最佳论文,参与最佳学生论文
当地时间 10 月 22 日,两年一度的计算机视觉国际顶级会议 International Conference on Computer Vision(ICCV 2017)在意大利威尼斯开幕.今日,大 ...
- 完整复现何恺明ICCV获奖论文结果并开源 !(附论文开源代码)
ICCV 作为计算机视觉的顶级会议,2017年共收到2143篇论文投稿,比上一届ICCV2015的1698篇增加了26.2%.共621篇被选为大会论文,录用比例28.9%:poster.spotlig ...
- CVPR 2021 最佳论文奖项出炉,何恺明等获最佳论文提名 !
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:AI科技评论,专知 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下 ...
- 本周AI热点回顾:何恺明RegNet超越EfficientNet、数学难题“abc猜想”封印终被开启、微软麻将 AI 论文发布
01 何恺明团队最新力作RegNet: 超越EfficientNet,GPU上提速5倍 还是熟悉的团队,还是熟悉的署名,Facebook AI实验室,推陈出新挑战新的网络设计范式.熟悉的Ross,熟悉 ...
- 如何从数学角度解释何恺明新作Masked Autoencoders (MAE)?
何恺明最新一作论文 Masked Autoencoders(MAE)为自监督学习方法带来了一场革命,自提出以来,在 AI 领域内得到了极大的关注.MAE 不仅在图像预训练上达到了 SOTA 性能,更是 ...
- 何恺明的ResNet论文,被引量刚刚突破10万大关
转载自机器之心 这是一篇计算机视觉领域的经典论文.李沐曾经说过,假设你在使用卷积神经网络,有一半的可能性就是在使用 ResNet 或它的变种. 前几天,人们发现 ResNet 论文被引用数量悄然突破了 ...
- 何恺明一作论文 MAE 已有人复现!PyTorch 版!(附链接)
来源:AI算法与图像处理 本文多图,建议阅读5分钟 CV大神何恺明论文复现. 大家好,我是红色石头.之前介绍过CV大神何恺明又出力作!论文「Masked Autoencoders Are Scalab ...
最新文章
- 计算机视觉方向简介 | 阵列相机立体全景拼接
- 数据库连接工具datagrip较安全 代替Aqua Data Studio 6.5
- Leetcode 剑指 Offer 40. 最小的k个数 (每日一题 20210825)
- java不用析构函数,堆栈分配的类--C发生不需要的析构函数调用
- 10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...
- 几个简单的正则小例子
- 爬虫插件-XPath Helper下载与安装
- 百度将砸钱100多亿元建云计算中心(2012-09-03)
- 继承或者重写django的user model?
- Cache的疑惑??
- 儿童机器人编程语言_机器人十大流行编程语言的介绍
- python画球面_matplotlib中的球面坐标图
- 使用maven引用第三方jar包
- {转载}与我十年长跑的女朋友就要嫁人了。
- 家庭教育中有近一半是由母亲负责孩子学习,占49%,父亲负责仅占10%
- Python基础,day2
- 单点登录系统设计及实现
- Java 遍历 Redis Hash key中所有数据
- 即将被社会淘汰的五种人
- 球半足球推荐,欧冠杯决赛:利物浦 VS 皇家马德里
热门文章
- 观海微Crosstalk Introduction
- 一键安装php环境 iis,Windows Server 2008(R2) 一键安装PHP环境(PHP5.3+FastCGI模式
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
- Enter passphrase for key
- 衍射极限、MTF与相机分辨率(1)
- iOS OC 及 Swift 获取手机型号,系统版本
- 谷歌模拟器:谷歌浏览器模拟手机调试添加机型
- 堡垒机是干什么的? 看完这篇你就懂了
- 微信论坛小程序系统设计与实现
- SpringBoot自定义starters