ResNet、Transformer、GAN、BERT
一、 ResNet
论文地址:Deep Residual Learning for Image Recognition
参考:bilibili视频《撑起计算机视觉半边天的ResNet【论文精读】》、动手深度学习《残差网络ResNet》、
1.0 摘要,论文导读
摘要主要内容:
深度神经网络很难训练,我们使用residual(残差结构)使得网络训练比之前容易很多在ImageNet上使用了152层的ResNet,比VGG多8倍,但是计算复杂度更低,最终赢下了ImageNet2015的分类任务第一名,并演示了如何在cifar-10上训练100-1000层的网络。(通常赢下ImageNet比赛且提出很不一样网络架构、方法的文章会被追捧。)
对很多任务来说,深度是非常重要的。我们仅仅是把之前的网络换成残差网络,在coco数据集上就得到了28%的改进。同样也赢下了ImageNet目标检测、coco目标检测和coco segmentation的第一名。
主要图表:

上面这张图是没有使用残差结构的网络,更深的层训练误差比浅层更高,即深层网络其实是训练不动的。下面这张图,是是否使用resnet结构的网络效果对比图。可以看到右侧使用残差结构后,34层的网络训练和测试的误差都更低。
18 layers 27.94 27.88
34 layers 28.54 25.03

后面还会有不同结构的resnet网络和VGG等其他网络的效果对比图。
1.1 导论
1.1.1 为什么提出残差结构?
深度卷积神经网络是非常有效的,因为可以堆叠很多层,不同层可以表示不同level的特征。但是学一个好的网络,就是简简单单的把所有网络堆在一起就行了吗?如果这样,网络做深就行了。
我们知道,网络很深的时候,容易出现梯度消失或者梯度爆炸,解决办法之一是一个好的网络权重初始化,使权重不能太大也不能太小;二是加入一些normalization,比如BN。这样可以校验每个词之间的输出,以及梯度的均值和方差,这样比较深的网络是可以训练的(可以收敛)。但同时有一个问题是,深层网络性能会变差,也就是精度会变差。
深层网络性能变差,不是因为网络层数多、模型变复杂而过拟合,因为训练误差也变高了。那为什么会这样呢?从理论上来说,往一个浅层网络中加入一些层,得到一个深一些的网络,后者的精度至少不应该变差。因为后者至少可以学成新加的层是identity mapping,而其它层直接从前者复制过来。但是实际上做不到,SGD优化器无法找到这个比较优的解。
identity mapping可以理解成恒等映射吧,也就 是网络输入x,输出也是x。网络权重简单学成输入特征的1/n。
所以作者提出,显式地构造一个identity mapping,使得深层模型的精度至少不会变得更差。作者将其称为deep residual learning framework。
假设我们要学的是 ,在原有层上 添加一些新的层时,新的层不是直接学 ,而是学习 ,这部分用表示。(其中,是原有层的输出。)即,新加入的层不用全部重新学习,而是学习原来已经学习到的和真实的之间的残差就行 。最后模型的输出是。这种新加入的层就是residual,结构如下图所示:

在数学上就是直接相加,在神经网络中是通过shortcut connections’实现(shortcut就是跳过一个或多个层,将输入直接加到这些跳过的层的输出上)。shortcut其实做的是一个identity mapping(恒等映射),而且这个操作不需要学习任何参数,不增加模型的复杂度。就多了一个加法,也不增加计算量,网络结构基本不变,可以正常训练。
1.1.2 实验验证
接下来作者在imagenet上做了一系列实验进行验证。结果表明,加了残差的网络容易优化,而且网络堆的更深之后,精度也会提高,所以赢下了比赛。在cifar-10上,作者尝试了训练超过1000层的网络。至此,论文的核心就讲完了,下面就是ResNet网络的设计。
1.2 相关工作
其实ResNet不是第一个提出
residual的。最早的线性模型的解法,就是通过不断迭代residual来求解的,而且在机器学习中,GBDT中,就是通过残差residual来不断学习的,把弱分类器叠加起来,成为一个强的分类器。只不过GBDT是在label上做残差,ResNet是在特征上做残差。ResNet也不是第一个提出
shortcut的,比如在highway networks中就有用到shortcut,但不是直接做加法,而是更复杂一些。一篇文章之所以是经典,不一定是原创的提出很多东西,而有可能是把很多东西很巧妙的放在一起,能很好地解决问题;甚至大家都不记得之前谁还做过类似的工作。所以很多想法前人大多就想过了发表了,但是没关系,可以是用同一个东西解决新的问题,旧的技术有新的应用新的意义。
ResNet34比起VGG19,计算复杂度更低,只有前者的18%。其它是一些训练的细节,学习率优化器等等之类,就不细讲了。
1.3 实验部分
1.3.1 不同配置的ResNet结构

- 网络输入是ImageNet图片,短边在[256,480]中随机选取,然后resize到224×224尺寸,输入网络
- conv2_x:表示第二个卷积模块,x表示模块里有很多层。
- :[]内的是一个残差块,其卷积核大小为3*3,channel=64。×3表示有两个这样的残差层。
对照下面ResNet34结构图:(3+4+6+3)=16个残差模块,每个模块两层卷积层。再加上第一个7×7卷积层和最后一个全连接层,一共是34层。
