session://14:29:33
~/ / posts / 2015-12-resnet.md

ResNet:把网络做到 152 层的那个“恒等捷径”

2015-12-10· 1 min read · [论文解读]
// TL;DR
  • 核心问题:网络加深后训练误差反而上升(退化问题),这不是过拟合。
  • 解法:让每层学残差 F(x) = H(x) − x,恒等映射走捷径直通。
  • 152 层、3.57% top-5 错误率,横扫分类/检测/定位/分割全部冠军。

退化问题:深不一定好

今年 ILSVRC 的结果出来了,微软亚研何恺明团队的 ResNet 把所有项目的冠军拿了个遍。论文针对的问题很反直觉:把网络从 20 层堆到 56 层,训练误差不降反升。注意是训练误差——这不是过拟合,是更深的网络压根训不动。理论上深网络至少不该比浅的差(多出来的层学成恒等映射就行),但 SGD 就是学不出来。

解法朴素得让人想拍桌子

既然“学恒等映射”难,那就把恒等映射直接修成一条捷径:每个模块的输出改成 F(x) + x,其中 x 原封不动地跳过去,网络只需要学残差 F(x)。要是这层没用,把 F 学成 0 就行——学 0 可比学恒等容易多了。

# 残差块(示意)
def residual_block(x):
    out = conv_bn_relu(x)
    out = conv_bn(out)
    return relu(out + x)   # 关键就这一行:+ x

就靠这一行加法,152 层的网络训练得比 VGG 的 19 层还稳,ImageNet top-5 错误率 3.57%,第一次超过人类(约 5%)。

我的看法

最好的想法往往简单到让所有人懊恼“我怎么没想到”。残差连接解决的是梯度和优化的通路问题,这个思路不挑任务——我赌它会变成所有深度网络的标配组件,不管做视觉还是做语言。另外注意一个趋势:网络深度从 8 层(AlexNet)到 19 层(VGG)到 152 层只用了三年,“规模”这个变量的红利,似乎远远没到头。

深度学习计算机视觉论文解读
cat newsletter.txt

每周一封,<5 分钟读完

把这一周我读过、想过、动手做过的东西,压缩成一封信。订阅者目前 5210+ 人,0 干扰。