ResNet (残差) 网络 由He Kaiming、Sun jian等大佬在2015年的论文 Deep Residual Learning for Image Recognition 中提出。
添加了一些直达通道,相当于加入了约束。使得某些原本就应为identity mapping的module,直接获得identity mapping的能力。
2015年之前,在层数不多的深度网络模型中,人们通过 设置 合理的权重初始化、改进激活函数 等等一系列手段,有效缓解了梯度消失,使得深度网络训练变得可行。
于是炼丹师们觉得,简单地累加网络层,训练误差(低误差意味着更强大的表达能力)在模型收敛后maybe会进一步降低。结果不仅没有,误差反而更大了(下图为20层和56层的常规网络在CIFAR-10数据集上的 训练错误率[左图] 和 测试错误率[右图]):
研究发现,原来 如果继续加大网络的层数,梯度消失这货就会又跑出来作祟了。原来那些对应措施已经不够用了,是时候开始鸟枪换炮了。
于是 ResNet (残差) 网络 在2015年便应运而生:
残差网络是由下面这种 残差模块 垒叠而成:
残差模块 又分为 常规残差模块[左图]
和 瓶颈残差模块 (bottleneck residual block)[右图]
:
瓶颈残差模块 中的1×1卷积能够起到升降维的作用,从而令3×3卷积可以在较低维度的输入上进行。在非常深的网络中,该设计可大幅减少计算量。
由于 残差模块 的引入,有效缓解了梯度消失的影响,使得网络模型层数可以大大增加。
下图为 ResNet-34网络 与 VGG-19网络 的深度对比:
下图为 ResNet-152网络 与 VGG-19网络 的深度对比。深度差距就更夸张了:
随着层数的加深,模型的表达能力自然跟着水涨船高:
ResNet横扫当年 ILSVRC 和 COCO 等竞赛一系列子任务的第一名,成为网络结构的主流,并影响至今。
ResNet自身也有多个版本。基本上是层数越深,误差越小,模型表达能力越强: