0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ResNet原始结果无法复现?大神何恺明受到了质疑

DPVg_AI_era 来源:lp 2019-04-19 11:21 次阅读

ResNet原始结果无法复现?大神何恺明的经典之作受到了网友质疑,不过何恺明本人现身解答之后,让真理越辩越明。

大神何恺明受到了质疑。

今天,Reddit上一位用户对何恺明的ResNet提出质疑,他认为:

何恺明2015年的原始残差网络的结果没有被复现,甚至何恺明本人也没有。

网友称,他没有发现任何一篇论文复现了原始ResNet网络的结果,或与原始残差网络论文的结果进行比较,并且所有的论文报告的数字都比原始论文的更差。

论文中报告的top1错误率的结果如下:

ResNet-50 @ 20.74

resnet - 101 @ 19.87

resnet - 152 @ 19.38

何恺明等人在2015年提出ResNet之后,ResNet很快成为计算机视觉最流行的架构之一,这篇论文已经被引用了超过20000次。

不过,网友称,DenseNet(https://arxiv.org/abs/1608.06993,3000+引用)和WideResNets(https://arxiv.org/abs/1605.07146,~1000引用)都没有使用这个结果。甚至在何恺明最近的一篇论文中,也没有使用这个结果。

按理说,何恺明这篇论文应该是这个领域被引用最多的论文之一,原始ResNet的结果真的没有被复现出来吗?在继续讨论之前,让我们先来回顾一下ResNet的思想,以及它之所以强大的原因。

重新审视ResNet:计算机视觉最流行的架构之一

2015年,ResNet大大吸引了人们的眼球。实际上,早在ILSVRC2012分类竞赛中,AlexNet取得胜利,深度残差网络(deepResidualNetwork)就成为过去几年中计算机视觉和深度学习领域最具突破性的工作。ResNet使得训练深达数百甚至数千层的网络成为可能,而且性能仍然优异。

由于其表征能力强,ResNet在图像分类任务之外的许多计算机视觉应用上也取得了巨大的性能提升,例如对象检测和人脸识别。

自2015年以来,许多研究对ResNet架构进行了调整和改进。其中最著名的一些ResNet变体包括:

何恺明等人提出的ResNeXt

康奈尔大学、清华大学和Facebook联合提出的DenseNet

谷歌MobileNet

孙剑团队ShuffleNet

颜水成团队的双通道网络DPN

最近南开大学、牛津大学等提出的 Res2Net

……

那么ResNet 的核心思想是什么呢?

根据泛逼近定理(universalapproximationtheorem),如果给定足够的容量,一个单层的前馈网络就足以表示任何函数。但是,这个层可能是非常大的,而且网络容易过拟合数据。因此,研究界有一个共同的趋势,就是网络架构需要更深。

从AlexNet的提出以来,state-of-theart的CNN架构都是越来越深。虽然AlexNet只有5层卷积层,但后来的VGG网络和GoogLeNet分别有19层和22层。

但是,如果只是简单地将层堆叠在一起,增加网络的深度并不会起太大作用。这是由于难搞的梯度消失(vanishinggradient)问题,深层的网络很难训练。因为梯度反向传播到前一层,重复相乘可能使梯度无穷小。结果就是,随着网络的层数更深,其性能趋于饱和,甚至开始迅速下降。

网络深度增加导致性能下降

在ResNet之前,已经出现好几种处理梯度消失问题的方法,例如,2015年C.Szegedy等人提出的GoogLeNet在中间层增加一个辅助损失(auxiliaryloss)作为额外的监督,但遗憾的是,没有一个方法能够真正解决这个问题。

ResNet的核心思想是引入一个“恒等捷径连接”(identityshortcutconnection),直接跳过一层或多层,如下图所示:

一个残差块

何恺明等人于2015年发表的论文《用于图像识别的深度残差学习》(DeepResidualLearningforImageRecognition)中,认为堆叠的层不应该降低网络的性能,因为我们可以简单地在当前网络上堆叠identity映射(层不处理任何事情),并且所得到的架构性能不变。这表明,较深的模型所产生的训练误差不应比较浅的模型的误差更高。作者假设让堆叠的层拟合一个残差映射(residualmapping)要比让它们直接拟合所需的底层映射更容易。上面的残差块(residualblock)显然仍让它做到这点。

ResNet 的架构

那么这次质疑“不能复现”的结果是什么呢?讨论点集中在原始论文中的表3和表4:

表3:ImageNet验证集上10-crop测试的错误率

表4:ImageNet验证集上sigle-model的错误率结果

由于其结果优异,ResNet迅速成为各种计算机视觉任务最流行的架构之一。

新智元昨天发表的文章《对 ResNet 本质的一些思考》,对ResNet做了较深入的探讨。作者表示:

不得不赞叹KaimingHe的天才,ResNet这东西,描述起来固然简单,但是对它的理解每深一层,就会愈发发现它的精妙及优雅,从数学上解释起来非常简洁,非常令人信服,而且直切传统痛点。

ResNet本质上就干了一件事:降低数据中信息的冗余度。

具体说来,就是对非冗余信息采用了线性激活(通过skipconnection获得无冗余的identity部分),然后对冗余信息采用了非线性激活(通过ReLU对identity之外的其余部分进行信息提取/过滤,提取出的有用信息即是残差)。

其中,提取 identity 这一步,就是 ResNet 思想的核心。

何恺明回应ResNet结果不能复现

再回到文章开头的讨论:原始ResNet的结果真的无法复现吗?

针对网友的质疑,不少人在帖子下回复,可以总结为两个方面:

ImageNet有多种测试策略,后来的论文在复现ImageNet时采用的是当时流行的策略,而非ResNet原始论文的策略;

后来的论文在训练时采用了一些与原始论文不同的优化技巧,使得结果甚至比原始ResNet 论文的结果更好

何恺明本人也第一时间作出回复:

ImageNet上有几种测试策略:(i)single-scale,single-crop测试;(ii)single-scale,multi-crop或fully-convolutional测试;(iii)multi-scale,multi-crop或fully-convolutional测试;(iv)多个模型集成。

在这些设置下,这篇论文的ResNet-50模型的top-1错误率为:(i)24.7%(1-crop,如我的GitHubrepo所展示),(ii)22.85%(10-crop,论文中的表3),(iii)20.74%(full-conv,multi-scale,论文中的Table4)。论文中使用的(ii)和(iii)的描述见第3.4节。

当时是2015年,(ii)和(iii)是最流行的评估设置。策略(ii)是AlexNet的默认值(10-crop),(ii)和(iii)是OverFeat、VGG和GoogleNet中常用的设置。Single-crop测试在当时并不常用。

2015/2016年后,Single-crop测试开始流行。这在一定程度上是因为社区已经变成一个对网络精度的差异很感兴趣的环境(因此single-crop足以提供这些差异)。

ResNet是近年来被复现得最多的架构之一。在我的GitHubrepo中发布的ResNet-50模型是第一次训练的ResNet-50,尽管如此,它仍然十分强大,并且在今天的许多计算机视觉任务中仍然是预训练的骨干。我认为,ResNet的可复现性经受住了时间的考验。

Reddit用户ajmooch指出:

你忘记了测试时数据增强(test-timeaugmentation,TTA)。表4中的数字来自于不同scales的multi-crop的平均预测(以计算时间为代价优化精度),而其他论文中的数字是single-crop的。

表3列出了10-crop测试的数据。表4的数字更好,所以它肯定不是singlecrop的数字。我的猜测是n-crop,可能还包括其他增强,比如翻转图像。

这个帖子读起来有点像指责,我不喜欢。ResNet因为在ImageNet测试集上表现出色而著名,而ImageNet测试集隐藏在服务器上,他们没有办法在那里处理这些数字。ResNet是我能想到的被复现最多的架构之一。它显然是合理的。在开始批评别人之前,我们应该先了解我们在批评什么。

谷歌大脑工程师hardmaru也回复道:

在何恺明加入FAIR之前,FAIRTorch-7团队独立复现了ResNet:https://github.com/facebook/fb.resnet.torch

经过训练的ResNet18、34、50、101、152和200模型,可供下载。我们包括了使用自定义数据集,对图像进行分类并获得模型的top5预测,以及使用预训练的模型提取图像特征的说明。

他们的结果如下表:

经过训练的模型比原始ResNet模型获得了更好的错误率。

但是,考虑到:

这个实现与ResNet论文在以下几个方面有所不同:

规模扩大(Scaleaugmentation):我们使用了GooLeNet中的的规模和长宽比,而不是ResNet论文中的scaleaugmentation。我们发现这样的验证错误更好。

颜色增强(Coloraugmentation):除了在ResNet论文中使用的AlexNet风格的颜色增强外,我们还使用了AndrewHoward提出的的亮度失真(photometricdistortions)。

权重衰减(Weightdecay):我们将权重衰减应用于所有权重和偏差,而不仅仅是卷积层的权重。

Stridedconvolution:当使用瓶颈架构时,我们在3x3卷积中使用stride2,而不是在第一个1x1卷积。

何恺明的GitHub有Caffe模型训练的原始版本和更新版本的resnet,而且报告的也不同:

(https://github.com/KaimingHe/deep-residual-networks/blob/master/README.md)

也许他的GitHub报告中的方法与论文不一致,但为了可重复性而不使用相同的方法也有点奇怪。

也许arxiv或repo应该使用一致的数字进行更新,或者更好的是,使用多次独立运行的平均值。

但是随着SOTA的改进和该领域的发展,其他人花费资源来产生旧的结果的动机就更少了。人们宁愿使用他们的资源来复现当前的SOTA或尝试其他新想法。

许多人引用它是因为它的概念本身,而不是为了报告排行榜分数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 梯度
    +关注

    关注

    0

    文章

    30

    浏览量

    10311
  • 计算机视觉
    +关注

    关注

    8

    文章

    1696

    浏览量

    45929
  • resnet
    +关注

    关注

    0

    文章

    12

    浏览量

    3156

原文标题:经典ResNet结果不能复现?何恺明回应:它经受住了时间的考验

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ADS1259工作一段时间后转换结果饱和怎么解决?

    时,当增加到92%左右,ADS1259就会输出一个饱和值,这个时候reset单片机没有任何效果,只有重新掉电再上电,ADS1259的输出结果又恢复正常。 反复试验,很容易复现这个现象。 实在是想不明白,求大神指教
    发表于 11-22 07:38

    基于改进ResNet50网络的自动驾驶场景天气识别算法

    ResNet50网络4组模块内加入SE模块,以便更好地拟合通道间复杂的鲁棒性。基于自动驾驶汽车路测图像数据对所提算法进行Python编程实现,结果表明:SE模块的加入能够增加算法的鲁棒性和准确性,提高了自动驾驶的天气识别精度。
    的头像 发表于 11-09 11:14 841次阅读
    基于改进<b class='flag-5'>ResNet</b>50网络的自动驾驶场景天气识别算法

    用IO模拟I2C时序读写ADC3101寄存器,果无论写入什么值还是读默认的值都显示255,为什么?

    根据手册时序 用IO模拟I2C时序 读写ADC3101寄存器 手册时序如下图 最后结果无论写入什么值 还是读默认的值都显示255,求解答
    发表于 10-22 06:05

    果无线充发射端接收端磁吸组件——轻松充电,享受便捷生活

    果无线充发射端接收端磁吸组件——轻松充电,享受便捷生活
    的头像 发表于 10-08 09:29 183次阅读

    SIM卡座二合一的设计受到了广大用户的青睐

    SIM卡座二合一连接器设计以其节省空间、便捷切换、增强安全性、支持多样化网络制式、促进技术创新以及环保节能等诸多优势,成为了当前智能手机市场的一大亮点。它不仅提升了用户体验,还推动了移动通信产业的持续发展。其中SIM卡座二合一的设计便是近年来备受瞩目的创新之一。这种设计不仅优化了手机内部空间结构,还带来了诸多使用上的优势,同时能极大地提升了用户体验。
    的头像 发表于 09-18 17:22 422次阅读
    SIM卡座二合一的设计<b class='flag-5'>受到了</b>广大用户的青睐

    LM6703照着datasheet里面撘了一个电路,设定Rf为300放大10倍结果无论怎样都只放大2倍左右,为什么?

    照着datasheet里面撘了一个电路,设定Rf为300放大10倍结果无论怎样都只放大2倍左右,另外改了Rf为900欧一样没有改变只有两倍,SD管脚我是悬空的。
    发表于 09-06 08:26

    半导体发布专为低压供电的电机驱动芯片

    在现今日新月异的电子科技领域中,电机驱动芯片作为电子设备的核心部件之一,其性能和应用范围直接影响到产品的整体性能和用户体验。数半导体公司近期推出的SLM8837电机驱动芯片,凭借其高效节能和专为低压供电应用而设计的特性,在市场中脱颖而出,受到了广泛的关注和好评。
    的头像 发表于 06-29 11:33 618次阅读

    把NVS_KEY_NAME_MAX_SIZE这个宏修改后,结果无法正常写入和读取了怎么解决?

    应用需要一个轻量化的数据库,现在是用NVS实现的,但是key的最大长度太短了,不够用,我试着把NVS_KEY_NAME_MAX_SIZE这个宏改成64(默认是16),结果无法正常写入和读取了。请问有什么办法解决呢?
    发表于 06-06 07:40

    stm8l discovery IAR无法调试的原因?

    新手刚接触,某宝买了块stm8l discovery 评估板,用IAR开发。结果无法调试下载程序。调试信息如下: 调试模式启动不了了,请问是怎么回事啊,JP1跳线帽接在on上,ST-LINK两个跳线
    发表于 05-08 07:42

    STM32F103C8T6 STOP模式无法通过RTC唤醒是为什么?

    使用如下函数 RTC_SetAlarm(RTC_GetCounter()+10); //设置待机时间 PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入低功耗结果无法通过RTC唤醒,是为啥啊
    发表于 03-25 06:12

    晶丰源2023业绩下滑 库存回归理性

    对于公司在过去一年中的困境,晶丰源解释道,这是因为受到了包括上游产能松动、下游需求萎缩以及渠道库存压力增大等多重因素的影响。为应对这些问题,公司相应地采取了库存清理和产品成本结构优化措施。
    的头像 发表于 02-26 15:36 530次阅读

    无法使用MATLAB中的Position2 Go雷达套件提取原始数据怎么解决?

    无法使用 MATLAB 中的 Position2 Go 雷达套件提取原始数据。 MATLAB 错误: 使用串行时出错(第 99 行)指定了 无效的端口。 RadarSystem(第 10 行)中
    发表于 01-31 06:15

    【先楫HPM5361EVK开发板试用体验】PWM输出

    个LED灯。 4. 通过MCU控制PWM波形的输出,使LED灯呈现呼吸灯的效果。 实验结果: 通过示波器观测到PWM波形的输出情况,记录数据。同时,通过外接LED灯,直观地感受到了PWM变化对LED灯
    发表于 12-21 00:14

    新作RCG:无自条件图像生成新SOTA!与MIT首次合作!

    它有望超越条件图像生成,并推动诸如分子设计或药物发现这种不需要人类给注释的应用往前发展(这也是为什么条件生成图像发展得这么好,我们还要重视无条件生成)。
    的头像 发表于 12-10 10:24 909次阅读
    <b class='flag-5'>何</b><b class='flag-5'>恺</b><b class='flag-5'>明</b>新作RCG:无自条件图像生成新SOTA!与MIT首次合作!

    LTC2984将RTD配置为热电偶的冷端时,无法得到正确的结果是什么原因呢?

    您好!我最近在做一个热电偶的测量系统,采用LTC2984。用RTD(PT1000)作为冷端补偿,在测量过程中遇到了麻烦:直接对RTD测量时可以得到正确的结果。将RTD配置为热电偶的冷端时,无法得到
    发表于 12-06 07:48