【DL】深度残差网络 Residual Network, ResNet

Backto Model Zoo


缘起

  • 直觉上:越深的网络representation能力越好,精度越高
  • 理论上:深层网络应该达到至少不差于浅层网络的精度表现,因为让深层网络一部分与浅层网络等同,多余部分变成恒等 identity,二者效果就等同了。
  • 实践中:随着深度的逐步增大,训练误差和测试误差反而会增大

思路

  • why?: 首先,不是 over-fitting 问题,因为训练误差也变差了。其次,猜测可能是因为训练量/收敛难度 随着 深度指数增长,也就是说只要硬件够硬,时间够长,深层网络一定还是可以超越浅层网络的。但是,这并不具有实际可行性。再之后,具体而言,
  • how?:学啥目标啊,直接学残差好伐!假设网络原本渐进逼近函数 H ( x ) , x H(x), x H(x),x 是 input。当这层网络是一个鸡肋网络的时候,我希望他不做任何操作即 H ( x ) = x H(x) = x H(x)=x。 但是让一个随机初始化(混乱的)的网络自学习成 identity (整齐的),这个难度颇大。转换思路,定义残差 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)x, 那原本的输出 H ( x ) = F ( x ) + x H(x) = F(x) + x H(x)=F(x)+x. 我们只要把残差 F ( x ) F(x) F(x)训练为 0 0 0, 那么 H ( x ) H(x) H(x) 就自动变为 identity。而且不用做任何网络的改动,只是目标从很难学习的 1 1 1 变成了 容易学习的 0 0 0
  • Action! : Res-34, Res101, Res1000+.

模型

  • Resnet 50: network diagram

结果

  • 视觉任务,classification / location / segmentation 全面开花,大幅刷新 SOTA.

拓展

  • ResNet 属于全新的网络架构创新,把之前以 VGG 为代表的细长网络从10层拉长到100层,且参数更少,训练更快。但是,ResNet 在 1000 层这个级别的时候也出现了饱和。而人脑大约有 1000 亿个神经元。那么,下一次站稳 1000 层高地的网络会是什么架构呢? 10000 层呢?

Ref

  • Deep Residual Learning for Image Recognition : 论文原作
  • ResNet网络详解与keras实现: 网络解析和代码实现
  • ResNet变体: wide residual network,ResNext,DenseNet,MobileNet,ShuffleNet, Dual path Network 等
  • pytorch/vision/torchvision/models/resnet.py: PyTorch Vision 的 ResNet 实现代码

你可能感兴趣的:(DL)