当前位置: 首页 > 编程日记 > 正文

何恺明的GN之后,权重标准化新方法能超越GN、BN吗? | 技术头条

640?wx_fmt=gif点击上方↑↑↑蓝字关注我们~

640?wx_fmt=png

2019 Python开发者日」,购票请扫码咨询 ↑↑↑



作者 | Siyuan Qiao、Huiyu Wang、Chenxi Liu、Wei Shen、Alan Yuille(Johns Hopkins University,约翰霍普金斯大学)

译者 | 刘畅

编辑 | Jane

出品 | AI科技大本营(id:rgznai100)


【导语】继 BN、GN 方法提出后,大家还在不断提出能加速神经网络训练与收敛的方法,而约翰霍普金斯大学几位研究者在论文《Weight Standardization》中提出一种 WS 新方法,那它可以超越 GN、BN 吗?且看本文对研究的初解读,希望能给大家一点新思考!


批归一化(Batch Normalization)是深度学习发展中的一项里程碑技术,它让各种网络都能够进行训练。然而,沿着批次维度的归一化也带来了新问题:当统计不准确导致批次的大小越来越小时,BN 的错误会急剧增加。在训练更大的网络,以及执行将特征迁移至包括探测、分割、视频在内的计算机视觉任务时,BN 的使用就受到了限制,因为它们受限于内存消耗而只能使用小批次。


一年前,FAIR 团队的吴育昕和何恺明提出了组归一化(Group Normalization,简称 GN)的方法,GN 将信号通道分成一个个组别,并在每个组别内计算归一化的均值和方差,以进行归一化处理。GN 的计算与批量大小无关,而且在批次大小大幅变化时,精度依然稳定。


而今天 AI科技大本营要与大家探讨的是近日上传到 arXiv 上的一篇论文《Weight Standardization》,由来自约翰霍普金斯大学的几位研究者发表。作者在文中提出了一种权重标准化(Weight Standardization, WS)的方法,它可以用于加速深度网络的训练,并称稳定优于其它的归一化方法,而这也引起了大家的好奇与讨论,这个 WS 的方法是否真的可以超越 GN 与 BN?


640?wx_fmt=png


接下来,AI科技大本营通过对 WS 方法的介绍、主要贡献与实验结果的展示为大家介绍这个在归一化方法之上的权重标准化的工作。希望能引发关注此研究方向的小伙伴们一些思考与看法!


通常来说,在使用 Batch Normalization(以下将简称 BN)时,采用小批次很难训练一个网络,而对于不使用批次的优化方法来说,效果很难媲美采用大批次BN时的训练结果。当使用 Group Normalization(以下将简称 GN),且 batch size 大小为 1 时,仅需要多写两行代码加入权重标准化方法,就能比肩甚至超越大批次BN时的训练效果。在微批次(micro-batch)的训练中,WS 的方法能稳定优于其它的归一化方法。与其他关注于激活值的归一化方法不同,WS 关注于权重的平滑效果。该方法的实现就是标准化卷积层的权重值,论文通过实验展示了这样的操作能够减少损失值和梯度值的 Lipschitz 常数。并且在多个计算机视觉任务,如目标检测、图像分类、实例分割等,验证了该方法的有效性。


在许多的视觉任务中,大部分深度网络通常都会使用 BN 层去加速训练和帮助模型更好收敛。虽然 BN 层非常实用,但从研究者的角度看,依然有一些非常显眼的缺点。比如(1)我们非常缺乏对于 BN 层成功原因的理解;(2)BN 层仅在 batch size 足够大时才有明显的效果,因此不能用在微批次的训练中。虽然现在已经有专门针对微批次训练设计的归一化方法(GN),但图 1 所示,它很难在大批次训练时媲美 BN 的效果。


640?wx_fmt=png

图1:在Imagenet和Coco上,GN,BN,GN+WS三种方法的实验结果对比


现在关于 BN 有效的一种解释是它能缓解内部协变量转移(Internal Covariate Shift, ICS)的问题。但是有关研究[参考文献 1]也指出 BN 与 ICS 减少的问题无关,相反,BN 层使得相应优化问题的曲线更平衡。因此,根据[参考文献 1]的结论,旨在提出一种归一化技术可以进一步平滑该曲线。

 

与其他关注于激活值的归一化方法不同,WS 关注于权重的平滑效果。本文一共有三个贡献:


  • 理论上,我们证明 WS 方法可以减少损失和梯度的 Lipsschitz 常数。因此,它能平滑损失曲线并提升训练效果。

  • 图1 的实验结果显示,对于能够使用大批次的任务(如 Imagenet 分类),在使用 batch size为 1 的 GN+WS 时,其效果能够比肩甚至超过大批次下的 BN 效果。

  • 图1 的实验结果显示,对于仅能使用微批次训练的任务(如Coco),GN+WS 可以大幅度的提升效果。


WS方法640?wx_fmt=png

图2:归一化和WS方法的比较


给定一个没有偏置项的卷积层表达式如下图所示:


 640?wx_fmt=png


其中 W^ 卷积层的权重,* 是卷积运算。将图2 所示作为一个例子,WS方法不会直接在原始权重上进行优化,而是采用另一个函数 W^=WS(W)来表示原始权重 W^。然后使用 SGD 算法来更新 W。


640?wx_fmt=png


与 BN 类似,WS 方法在卷积层中分别控制输出权重的第一和第二阶段,许多权重初始化方法也是这样做的。不过不同的是,WS 是以可微的方式在反向传播过程中来标准化梯度。但是 WS 方法没有对 W^ 进行仿射转化,因为作者认为 BN 或者 GN 还会对卷积层进行再一次的归一化。


WS规范化梯度


下图是在网络前馈和反馈时,进行权重梯度标准化的计算表达式。


640?wx_fmt=png


此时,在 feed-forwarding 过程中,计算方法变为:


640?wx_fmt=png


banck-propagation 中计算方法为:

  

640?wx_fmt=png


当然,论文的第二部分还通过公式推导了 WS 可以让损失曲线更加平滑,从而加速训练,提升效果的原因。而为了说明 WS 的有效性,作者在多个任务上进行了多个对比实验。


  • 第一个实验:在Imagenet上的图像分类


640?wx_fmt=png


上面表格展示了基于 ResNet50 和 ResNet101 网络结构的图像分类错误率。除了带 BN 层的网络使用大的 batch size,其它的归一化方法均设置 batch size 为 1。可以看出使用 WS 方法能够在 batch size 为 1 的情况下,略好于大批次 BN 的网络结果。在论文中,作者还做了更多与现有归一化方法对比的实验,来证明WS的效果。


  • 第二个实验:在Coco上的目标检测和分割


640?wx_fmt=png


上述表格给出了检测框回归和实例分割的结果。在用的是 Mask R-CNN 框架,RXnet 的 backbone,与图像分类有相似的结果。值得注意的是,当网络变得更复杂时,仅使用 GN 很难提升性能,而加上 WS 后,就可以训练出更好的结果。这说明 WS 的归一化技术可以帮助更轻松的训练深层次网络,而不用担心内存和 batch size 的问题。


  • 第三个实验:在 Something-Something 上的视频动作识别

   

640?wx_fmt=png


在这项任务中,采用 TSM 作为框架,ResNet50 作为 backbone,从表格中可以发现,不管是 BN 是 GN,加上了 WS 方法后,效果均有了提升。


  • 第四个实验:在 PASCAL VOC 上的语义分割


640?wx_fmt=png


在 PASCAL VOC2012 数据集上的实验,采用 DeepLabv3 作为基准模型,Resnet101 为 backbone。实验结果证明,WS 方法针对密集图像预测任务,也能有稳定提升性能的表现。


  • 第五个实验:在ModelNet40上的点云分类


640?wx_fmt=png


采用 DGCNN 作为基准模型,实验结果也显示了 WS 方法能够有效的提升模型性能。


以上五个实验,每个实验的设置参数在论文中均有详细的介绍。从实验方面证明了 WS 方法可以显著的提高性能。尤其是在某些情况下, GN 和 BN 可能无法达到很好的效果,通过结合 WS 的方法可以取得加速模型的训练与收敛;此外,WS 的归一化技术还可以帮助更轻松的训练深层次网络,而不用担心内存和 batch size 的问题。


关于研究介绍到这里后,对权重标准化这个方法,你是怎么看的?是否可以超越 GN、BN 呢?欢迎大家发表自己的看法!


论文地址:

https://arxiv.org/pdf/1903.10520.pdf

参考阅读:

何恺明、吴育昕最新成果:用组归一化替代批归一化


(本文为 AI大本营编译文章,转载请微信联系 1092722531


精彩推荐


「2019 Python开发者日」演讲议题全揭晓!这一次我们依然“只讲技术,拒绝空谈”10余位一线Python技术专家共同打造一场硬核技术大会。更有深度培训实操环节,为开发者们带来更多深度实战机会。更多详细信息请咨询13581782348(微信同号)。

640?wx_fmt=jpeg


推荐阅读:

  • 定了!人社部等发布13项新职业,AI、无人驾驶、电竞上榜

  • 技术头条

  • 何恺明等人提TensorMask框架:比肩Mask R-CNN,4D张量预测新突破

  • 极客头条

  • 争论不休的TF 2.0与PyTorch,到底现在战局如何了? | 技术头条

  • 零门槛!手把手教你打造AI应用

  • 分析11年21部漫威电影,一览导演、主演、口碑票房最佳......

  • 靠找Bug赚了6,700,000元!他凭什么?

  • 30位90后霸榜! 福布斯: 比你年轻、比你有颜、比你有才华, 就是他们了!

  • 程序员深夜逆行被拦后崩溃欲自杀:老板在催我!女朋友在催我!

  • 微软 CTO 韦青:“程序员 35 岁就被淘汰”是个伪概念 | 人物志

  • OpenStack已死?恐怕你想多了 | 技术头条

640?wx_fmt=png

点击“阅读原文”,查看历史精彩文章。


相关文章:

【AI】CelebA数据介绍、下载及说明

1、简介 CeleA是香港中文大学的开放数据,包含10177个名人的202599张图片 官网:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html 下载地址(百度网盘,官方的):http://pan.baidu.com/s/1eSNpdRG 【python】…

Zend Framework Mail通过网易免费邮箱发送邮件

2019独角兽企业重金招聘Python工程师标准>>> 做为一个苦逼的个人站长,做一个小网站,本来愿意来看的人就不多,再弄一个不能找回密码的会员系统?基本上被判死刑了 。阿里云的短信也要钱啊,而且只支持PHP 5.5以…

将shp导入SDE中出现“表或视图不存在”问题

其原因是权限不够,下边代码可以用来检查权限是否够。 private void ESRILicense() { IAoInitialize mAoInitialize new AoInitializeClass(); esriLicenseStatus licenseStatus (esriLicenseStatus)mAoInitialize.IsProductCodeAvai…

【python】使用python脚本将CelebA中同一人的图片捡到对应单独的文件夹中

1、目的 CelebA的所有的照片都在一个文件夹中,为了能在dlib训练人脸识别时,方便使用,将CelebA中同一人的图片捡到对应单独的文件夹中。 【AI】CelebA数据介绍、下载及说明 2、方法 首先创建10178个目录,然后解析Anno/identity_…

仅用语音,AI就能“脑补”你的脸! | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」,购票请扫码咨询 ↑↑↑作者 | Wav2pix 研究团队译者 | 刘畅编辑 | Jane出品 | AI科技大本营(公众号id:rgznai100)【导语】之前我们为大家介绍过一项非常酸爽的研究“Talking…

如何在SAP云平台上使用MongoDB服务

首先按照我这篇文章在SAP云平台上给您的账号分配MongboDB服务:如何在SAP云平台的Cloud Foundry环境下添加新的Service 然后从这个链接下载SAP提供的例子程序。 1. 使用命令行 cf marketplace查看当前SAP云平台的MongoDB的版本号:在我使用的SAP云平台上是…

C#中将dll汇入exe,并加壳

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 1、合并file1.dll、file2.dll到destination.dll ILmerge /ndebug /target:dll /out:C:\destination.dll /log C:\file1.dll C:\file2.dll 2、合并file1.dll、file2.dll以及myApp.exe…

【AI】dlib中图像标注工具 imglab 详细说明

一、基本用法 imglab是一个在图像上标注矩形的工具。基本方法 1> 获取图片列表&#xff1a;./imglab -c mydataset.xml /tmp/images&#xff0c;/tmp/images为保存图像的文件夹 2> 标注每个图片&#xff1a;./imglab mydataset.xml&#xff0c;使用shift鼠标左键拖动来选…

最萌算法学习来啦,看不懂才怪!| 码书

普通程序员&#xff0c;不学算法&#xff0c;也可以成为大神吗&#xff1f;对不起&#xff0c;这个&#xff0c;绝对不可以。可是算法好难啊~~看两页书就想睡觉……所以就不学了吗&#xff1f;就一直当普通程序员吗&#xff1f;如果有一本算法书&#xff0c;看着很轻松……又有…

Redis 缓存设计原则

基本原则 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时…

最强大,最简洁的【禁止输入中文】

方法一&#xff1a;禁止中文输入法 <input type"text" style"ime-mode:disabled">方法二&#xff1a;禁止黏贴&#xff0c;禁止拖拽&#xff0c;禁止中文输入法&#xff01;这种方法是最强的禁止 中文输入 <input type"text" οnpaste…

无监督机器学习中,最常见4类聚类算法总结 | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑编译 | 安然、狄思云来源 | 读芯术&#xff08;ID&#xff1a;AI_Discovery&#xff09;在机器学习过程中&#xff0c;很多数据都具有特定值的目标变量&#xff0c;我们可以用它们来训练模…

自动红眼移除算法 附c++完整代码

说起红眼算法&#xff0c;这个话题非常古老了。 百度百科上的描述&#xff1a; “红眼”一般是指在人物摄影时&#xff0c;当闪光灯照射到人眼的时候&#xff0c;瞳孔放大而产生的视网膜泛红现象。 由于红眼现象的程度是根据拍摄对象色素的深浅决定的&#xff0c;如果拍摄对象的…

【Dlib】在GPU环境中运行dlib中的例子dnn_mmod_ex报错...dlib::cuda_error...Error while calling cudaMalloc...

1、问题描述 在GPU环境下运行dlib中的例子dnn_mmod_ex时&#xff0c;报错&#xff1a; terminate called after throwing an instance of dlib::cuda_errorwhat(): Error while calling cudaMalloc(&data, new_size*sizeof(float)) in file /home/laoer/tools/dlib/dlib…

Exchange 2010正式发布了

2009年11月9号&#xff0c;Exchange 2010正式发布了&#xff0c;下载地址&#xff1a;http://www.microsoft.com/downloa ... 0-879f-d74208d6171d简体中文64位120天试用版转载于:https://blog.51cto.com/287416363/657202

【python】使用python脚本将CelebA中图片按照 list_attr_celeba.txt 中属性处理(删除、复制、移动)

1、目的 CelebA中的照片有四十种属性&#xff0c;参见&#xff1a; 【AI】CelebA数据介绍、下载及说明 根据需求从celebA中获取我们想要的图片&#xff0c;方法是将CelebA中图片按照 list_attr_celeba.txt 中属性执行删除、复制或移动操作。 命令格式&#xff1a; python3 C…

firefly 编译opencv3.3.1, CMake报错

更换gcc编译器可以解决 -D CMAKE_C_COMPILER/usr/bin/gcc-4.8转载于:https://www.cnblogs.com/gabrialrx/p/9001554.html

AI时代,为何机器人公司无法盈利只能走向倒闭?

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | Bram Vanderborght译者 | 弯月责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;导语&#xff1a;机器人专家需要公开诚实地讨论我们的成功&#xff0c;而不…

Google Objective-C Style Guide

看题目就知道了&#xff5e;哪天有空翻译成中文的&#xff5e;不多说了&#xff5e;上链接&#xff5e;Google Objective-C Style Guide转载于:https://blog.51cto.com/lulala/659124

ICPC 2019国际大学生程序设计竞赛,中国高校未能夺冠

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑整理 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;一年一度的国际大学生程序设计竞赛&#xff08;International Collegiate Programming Contest&#xff0c;ICPC&am…

完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能

相关阅读&#xff1a; 完爆Facebook/GraphQL&#xff0c;APIJSON全方位对比解析(二)-权限控制 完爆Facebook/GraphQL&#xff0c;APIJSON全方位对比解析(三)-表关联查询 自APIJSON发布以来&#xff0c;不断有网友拿来和Facebook的GraphQL对比&#xff0c; 甚至有不少人声称“完…

【AI】吴恩达斯坦福机器学习中文笔记汇总

1、吴恩达机器学习和深度学习课程的字幕翻译以及笔记整理参见&#xff1a; 以黄海广博士为首的一群机器学习爱好者发起的公益性质项目&#xff08;http://www.ai-start.com&#xff09;。 2、黄海广博士公益项目介绍 https://www.jianshu.com/p/16a749e332db 3、吴恩达 斯坦…

【C++】C++命名空间重定向

参见博客&#xff1a; namespace使用总结 命名空间的重定向的格式&#xff1a; namespace newName oldName; 在caffe源码走读时&#xff0c;遇到namespace的重定向用法&#xff0c;以前没有用过&#xff0c;源码如下&#xff0c;其中 GFLAGS_GFLAGS_H_是为了检测gflags的版…

宝宝都能看懂的机器学习世界

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑作者 | 武博士、宋知达、袁雪瑶、聂文韬来源 | 大鱼AI&#xff08;ID&#xff1a;DayuAI-Founder&#xff09;人类需要经过各式各样的学习才有办法认识这个世界。 当小朋友第一次看到猫后…

iOS LLDB调试命令(Low Lever Debug)

断点 设置断点 $breakpoint set -n XXX set 是子命令 -n 是选项 是--name 的缩写!查看断点列表 $breakpoint list删除 $breakpoint delete 组号禁用/启用 $breakpoint disable 禁用 $breakpoint enable 启用遍历整个项目中满足Game:这个字符的所有方法 $breakpoint set -r Game…

TCP通信速率与延时关系

刚刚研究了链路延时对TCP速率的影响&#xff0c;占位&#xff0c;有空会写一下。转载于:https://blog.51cto.com/csnas/659983

十三、序列化和反序列化(部分转载)

json和pickle序列化和反序列化json是用来实现不同程序之间的文件交互&#xff0c;由于不同程序之间需要进行文件信息交互&#xff0c;由于用python写的代码可能要与其他语言写的代码进行数据传输&#xff0c;json支持所有程序之间的交互&#xff0c;json将取代XML&#xff0c;由…

【C++】google gflags详解

参考博客&#xff1b;https://blog.csdn.net/lezardfu/article/details/23753741 0、简介 gflags是google的一个开源的处理命令行参数的库&#xff0c;使用c开发&#xff0c;具备python接口&#xff0c;可以替代getopt。gflags使用起来比getopt方便&#xff0c;但是不支持参数…

何恺明等人新作:效果超ResNet,利用NAS方法设计随机连接网络 | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」&#xff0c;购票请扫码咨询 ↑↑↑译者 | 刘畅编辑 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;受人工设计的启发&#xff0c;用于图像识别的神经网络从简单的链状模型发展为具有多个分支的网络。ResN…

网络规划设计师考试命题模式持续在变   你变不变

命题模式持续在变 你变不变深入分析2009下半年&#xff5e;2010下半年3次网络规划设计师考试试卷中项目管理模块&#xff08;约有5~8题&#xff0c;约占总分数的6.67%~10.67%&#xff09;的命题规律&#xff0c;心中最强烈的一份感觉体现在一个字——变。“变”是事物持续发…