← 返回 PaperDaily
视觉与图像
何恺明团队这篇ResNet论文证明:跳连别乱改,1000层才能稳住
这篇论文不靠花活,专盯一个老问题:为什么残差网络一加深就训练不顺。结论很直接——跳连和加法后激活别乱动,保持“直通车”最重要,1000层网络才有机会真的跑起来。
龙哥读论文
发布于 2026-08-17 00:20:03
阅读 5
查看原文
原论文信息如下:
如果把这篇论文的核心意思压缩成一句大白话,那就是:1000层残差网络不是“堆出来”的,而是“放行”出来的 。别让跳跃连接和加法后的激活函数把信号卡住,网络才有机会一路直通到底。
1 当你把激活函数提前,一个1000层的残差网络就能轻松训练了
残差网络最早火起来,靠的是一个朴素但非常狠的想法:不必强迫每一层都从头学新东西,只要学“增量”就行 。这样一来,深层网络不至于像传统网络那样,层数一多就开始“梯度失踪、训练摆烂”。
但这篇论文问了一个更扎心的问题:既然残差网络已经有“捷径”,为什么加深到 1000 层时还是会训练困难? 答案不在“层数太多”这么简单,而在于捷径本身是不是足够干净。这里的“干净”不是玄学,指的是跳跃连接尽量别掺杂缩放、门控、卷积或 dropout 这类会改写信号的操作。
论文的核心动作其实很克制:把原来残差单元里“加完再激活”的顺序,改成“先激活、再进权重层”,也就是所谓的预激活(pre-activation) 。这样一来,加法之后不再立刻被 ReLU 截断,捷径路径就更像一条真正的高速公路,而不是“刚通车就设红绿灯”。
这里顺手把一个缩写讲清楚。BN 是 Batch Normalization ,中文通常叫批归一化 ;它的作用是把每层输入的分布拉得更稳定。ReLU 是 Rectified Linear Unit ,中文是修正线性单元 ,简单理解就是“只保留正数,负数直接归零”。本文讨论的关键,不是这些模块谁更高级,而是它们摆放的位置会不会把信息流堵住。
2 为什么恒等映射这么重要?前向与后向信号的“高速公路”
论文先做了一个很漂亮的推导。若残差单元满足两个条件:跳跃连接是恒等映射 ,并且加法后的激活也是恒等映射 ,那么前向传播时,深层特征可以写成“浅层特征 + 一串残差项”的形式;反向传播时,梯度也能绕开中间很多层,直接往浅层传回去。
这件事听起来像数学小把戏,实际意义却很大。普通深层网络最怕两件事:一是前面的信息被后面层层变形,最后面目全非;二是反向梯度在深层里要么越来越小,要么越来越乱。恒等映射的价值就在于,它相当于给信号留了一条不拐弯、不收费、不限速 的路径。
从工程角度看,这种“直通”非常值钱。因为深层网络训练不稳定,很多时候不是模型表达能力不够,而是优化器根本走不到那个好解。本文的判断很明确:先把信息流打通,再谈模型够不够强 。这个顺序,很多人写网络时经常弄反。
具体来说,如果第l个残差单元的输出为x_{l+1} = x_l + F(x_l, W_l),其中F是残差函数,x_l是输入,W_l是权重。那么对于任意更深的层L,有x_L = x_l + Σ_{i=l}^{L-1} F(x_i, W_i)。这个公式表明,深层特征x_L可以分解为浅层特征x_l加上一系列残差项的和。反向传播时,损失函数ε对x_l的梯度为∂ε/∂x_l = ∂ε/∂x_L * (1 + ∂/∂x_l Σ_{i=l}^{L-1} F(x_i, W_i))。这里的“1”就是恒等映射带来的直通梯度项,它确保梯度不会消失。如果捷径不是恒等映射,比如乘以一个标量λ,那么梯度项就变成λ^{L-l},当λ<1时梯度指数级衰减,λ>1时梯度指数级爆炸,两者都会破坏训练。这就是为什么恒等映射如此关键——它让梯度传播的系数始终为1,不受深度影响。
3 实验揭秘:对跳跃连接动手脚会怎样?——不仅是减慢收敛
论文没有停留在推导上,而是直接拿 CIFAR-10 上的 110 层 ResNet 开刀,逐个改跳跃连接,看看会发生什么。这里的设计非常老练:不是只改一个点,而是把各种“看起来很合理”的改法都试了一遍,包括常数缩放、门控、仅门控捷径、1×1 卷积捷径、dropout 捷径。结果相当一致:只要捷径不再是纯恒等,训练就开始变难 。
最有意思的是,某些改法从表达能力上看并不差,甚至参数更多、形式更复杂,按理说应该“更能学”。但实验结果偏偏不买账。这就说明问题不在“模型够不够灵活”,而在“优化能不能走到那个灵活的地方”。论文在这里狠狠补了一刀:训练误差更高,往往意味着优化更差,而不是模型容量更小 。
尤其是缩放和 dropout 这类操作,听上去像是在做正则化,实际上却可能把捷径路径的“直通”属性破坏掉。门控和 1×1 卷积也一样,虽然更灵活,但一旦中间多了可学习变换,最短路径都不再“零负担”,深层网络就会变成一场体力活。这个结论很朴素,却很重要:残差网络的关键,不只是“有捷径”,而是“捷径尽可能别折腾” 。
具体实验设置如下:所有模型在CIFAR-10上训练,使用标准数据增强(随机翻转和裁剪),权重衰减为0.0001,动量0.9,初始学习率0.1,在32000和48000次迭代时除以10,总迭代次数为64000。对于常数缩放捷径,论文尝试了λ=0.5和λ=0.01两种缩放因子。门控捷径使用一个可学习的标量门控参数,初始化为0。仅门控捷径则只对捷径路径进行门控,残差路径保持不变。1×1卷积捷径引入额外的可学习参数,dropout捷径以0.5的概率随机丢弃捷径路径上的元素。结果显示,恒等捷径的测试误差为6.61%,而常数缩放(λ=0.5)误差升至8.72%,门控捷径误差为7.61%,仅门控捷径误差为8.22%,1×1卷积捷径误差为12.35%,dropout捷径误差为7.84%。这些结果清晰地表明,任何对捷径路径的干扰都会显著损害性能。
4 预激活残差单元:一个微小改动,带来全面胜利
前面只是在修捷径,后面则轮到激活函数出场。原始 ResNet 的结构里,BN 和 ReLU 大多放在卷积后面,而加法之后还有一个 ReLU。这个顺序看起来很自然,但它会让加法后的信号再被截一刀,导致“直通车”不再完全直通。
本文的解决方式是把 BN 和 ReLU 前移,形成预激活残差单元 。直观理解就是:先把输入整理好,再送进权重层;加法之后尽量不要再加一道“后门过滤”。这样做的妙处有两个。第一,信息流更干净,优化更容易;第二,BN 的归一化和正则化效果能更直接作用在每个权重层的输入上,而不是被加法打散。
这篇论文的厉害之处在于,它不是发明了一堆新模块,而是把原来“默认正确”的顺序重新审了一遍。很多深度学习结构就是这样,大家习惯了“卷积后接 BN,再接 ReLU”,但一旦网络足够深,这种习惯就可能开始拖后腿。预激活的思路看起来只是挪了几个层的位置,实际却把训练难度明显压下去了。
论文进一步分析了不同激活顺序的影响。除了预激活(BN-ReLU-Conv-BN-ReLU-Conv),还对比了ReLU-only预激活(ReLU-Conv-BN-ReLU-Conv-BN)、full预激活(BN-ReLU-Conv-BN-ReLU-Conv)以及无激活的捷径。实验表明,full预激活效果最好,在CIFAR-10上1001层ResNet达到4.62%的测试误差,而原始后激活版本在同样深度下训练发散。ReLU-only预激活虽然也能训练,但误差略高(4.71%)。这说明BN的归一化作用在预激活中同样重要——它确保了激活前的输入分布稳定,从而让ReLU更有效地过滤负值。
5 从CIFAR到ImageNet,1000层网络不再是难题
实验部分最能说明问题。先看 CIFAR-10 和 CIFAR-100。本文在相同参数量附近,把原始 ResNet 和预激活 ResNet 做对比,结果相当整齐:同样的深度下,预激活版本几乎总是更好;而在极深的 1001 层网络上,这种优势更明显。换句话说,深度这张牌,终于能打出来了 。
更关键的是 ImageNet。很多论文在小数据集上能打,到了大数据集就开始露馅;这篇工作没有回避这个问题,而是直接把 200 层 ResNet 拉上来。结果显示,预激活版本不仅训练更顺,验证误差也更低。更有意思的是,原始 200 层版本已经出现过拟合迹象,说明单纯加深并不总是有用,真正需要的是让更深的网络“学得进去,也泛化得出去” 。
从工程实现上看,这篇工作也不算“轻巧”。1001 层网络在 CIFAR 上训练要花不少时间,在 ImageNet 上更是要多卡训练。也就是说,它不是那种“随便拿一块小显卡就能跑”的玩具方案。但它的价值在于把一个重要边界往前推了一大截:深度本身并没有死,死的是不合理的连接方式 。
在CIFAR-10上,预激活ResNet-164(约164层)的测试误差为5.46%,而原始ResNet-164为5.71%。预激活ResNet-1001的测试误差为4.62%,而原始ResNet-1001由于训练发散无法收敛。在CIFAR-100上,预激活ResNet-1001的测试误差为22.71%,同样显著优于原始版本。在ImageNet上,预激活ResNet-200的top-1验证误差为21.3%,原始ResNet-200为21.8%。当使用更强的数据增强(如尺度抖动和颜色增强)时,预激活ResNet-200的top-1误差进一步降至20.7%。这些数字表明,预激活带来的改进是系统性的,且随着深度增加而更加明显。
6 总结与展望:何恺明这项工作的“非显然”智慧
这篇论文最值得记住的,不是“又多了一个残差变体”,而是它把残差网络为什么好训练这件事讲透了:信息流要顺,捷径要纯,激活别乱插队 。它没有靠堆更复杂的模块赢,而是靠对结构细节的精准修正赢,这种思路很像高手修机器:不是猛加零件,而是先把卡顿的轴承抹顺。
如果把这项工作的意义放到今天看,它仍然很实用。很多深层模型、检测骨干、分割骨干、各种残差变体,底层都还在吃这套逻辑:别让主干信息在中间被过度加工。预激活的思想后来也成了很多架构设计里的默认选项之一。它不是“惊天动地的新名词”,但它确实解决了一个老问题,而且解决得很干净。
从复现角度看,项目仓库的价值也很明确:它提供了一个能把 1000 层 ResNet 真的跑起来的参考实现,便于研究者验证预激活设计在 CIFAR-10 上的效果。对做实验的人来说,这类代码比“只看论文图”有用得多,因为它让人知道:这不是纸上谈兵,而是可以落到训练脚本里的结构选择 。
论文还讨论了预激活对正则化的影响。由于BN被提前到卷积之前,它实际上对每个权重层的输入都进行了归一化,这相当于施加了更强的正则化效果。实验观察到,预激活ResNet在训练集上的损失下降更平滑,且验证集上的过拟合现象更轻。例如,在ImageNet上,原始ResNet-200在训练后期验证误差开始上升,而预激活版本则持续下降。这表明预激活不仅改善了优化,还间接提升了泛化能力。
龙迷三问
这篇论文到底解决了什么问题? 它解决的是“残差网络一旦特别深,训练会变得不顺”这个问题。论文证明,关键不只是有残差连接,而是跳跃连接尽量保持恒等、加法后不要立刻再截断信号,这样梯度和特征才能更顺畅地传播。
“预激活”是什么意思? 就是把 BN 和 ReLU 放到卷积之前,而不是放在加法之后。这样做以后,加法后的输出不再被 ReLU 立刻处理,信息可以更直接地往后传,训练也更容易稳定下来。
为什么非恒等跳跃连接会变差? 因为它们会在最短路径上引入缩放、门控、卷积或随机丢弃,信息不再能“原封不动”地穿过去。深层网络最怕这种层层加码,结果往往不是更强,而是更难优化。
如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~
龙哥点评
论文创新性分数: ★★★★☆
创新点不是“发明新世界”,而是把残差网络最关键的结构顺序重新理顺了。看似微调,实则抓住了深层优化的命门。
实验合理度: ★★★★★
消融做得很扎实,改跳跃连接、改激活顺序、跨数据集验证,逻辑链完整。最重要的是,训练误差和测试误差一起看,能较好地区分“优化问题”和“泛化问题”。
学术研究价值: ★★★★★
这篇工作把残差网络为何好训练说清楚了,对后续大量残差变体、超深网络设计都有基础意义。属于“不是最花哨,但很关键”的那类论文。
稳定性: ★★★★☆
在 CIFAR 和 ImageNet 上都观察到一致趋势,说明方法不只是小数据集上的偶然现象。但训练超深模型仍然有资源门槛,不算“随处可用”。
适应性以及泛化能力: ★★★★☆
对残差类架构的适应性很强,很多视觉任务都能借鉴。局限是它主要解决的是深层优化问题,不是对所有模型结构都天然有效。
硬件需求及成本: ★★★☆☆
方法本身不增加太多推理负担,但训练 1001 层和 200 层网络都需要相当资源。对研究复现友好,对低算力部署则意义有限。
复现难度: ★★★★☆
论文给了清晰的结构思路,相关代码也有开源参考,复现门槛不算离谱。但要把超深模型训稳,还是需要一定工程经验和算力。
产品化成熟度: ★★★★☆
作为视觉骨干网络设计原则已经很成熟,现实中可直接借鉴到很多残差结构里。但如果目标是极深网络的低成本大规模部署,还要继续做压缩、加速和稳定性验证。
可能的问题: 论文非常强,但也有一点“结构洁癖”味道:它证明了恒等路径很重要,却没有解决所有深层网络的训练成本问题;超深模型依旧不便宜,工程落地还得看算力和任务规模。
主要参考文献
He, K., Zhang, X., Ren, S., Sun, J. Identity Mappings in Deep Residual Networks. arXiv:1603.05027, 2016.
He, K., Zhang, X., Ren, S., Sun, J. Deep Residual Learning for Image Recognition. CVPR, 2016.
项目代码:https://github.com/KaimingHe/resnet-1k-layers
*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击 "阅读原文", 查看更多原论文细节哦!
欢迎加入龙哥读论文粉丝群,
扫描下方二维码或者添加龙哥助手微信号加群 :kangjinlonghelper。
一定要备注:研究方向+地点+学校/公司+昵称(如 图像处理+上海+清华+龙哥) ,根据格式备注,可更快被通过且邀请进群。
残差网络、图像分类、深度学习复现 都可以来聊,1000层网络到底怎么训稳,群里继续掰开揉碎讲。