ResNet学习笔记
相关论文
- Deep Residual Learning for Image Recognition
- Identity Mappings in Deep Residual Networks
ResNet基础
1.Abstract
- 显示地使用了残差函数作为训练目标
- 残差函数易于优化;增加深度网络准确率更高
2.Introduction
- 问题1:近来,有很多很深的神经网络模型取得了很好的效果。但是,单纯的增加层数就能训练出更好的网络吗?
- 增加层数会遇到非常烦人的问题:梯度消失、梯度下降。解决方法是:初始化正则化、正则化层
- 问题2:烦人的问题解决了,但是实验证明,当深度增加时,训练效果反而更差,而这个更差的效果并不是因为过拟合造成的。这就表示深层的网络并不是那么好优化的。
- 作者提出了一种优化深层网络的方案:deep residual learning framework。一般的网络模型输入与输出本质上是一种函数映射关系,即 。我们训练权重就是为了逼近函数 。而作者提出训练权重去逼近残差函数 ,并提出假设:这种残差函数更容易逼近。
- deep residual learning framework的构块见Figure 2。右边跨越层的连接称为shortcut connect。当 和 维度相同时,网络不加入新的参数;维度不同时只会增加一个线性映射带来的参数。
3. Related Work
- 关于残差表示:Vector of Locally Aggregated Descriptors (VLAD)、Fisher Vector
- 关于shortcut connect:在之前的论文中也有类似的,但是作者提出的shortcut是identity的,即没有参数的,是直连
4.Deep Residual Learning
- 作者认为残差学习的有点在于:当函数 趋近于自身映射()时,训练更容易逼近0
- 对比普通的网络与残差网络:见Figure 3
- 普通CNN有两点设计原则:(1)feature map大小不变,则filter数量不变;(2)feature map大小减半,filter数量加倍——为了保证每层的运算复杂度不变(但是难道不应是乘4么?)
- 普通CNN最后加入global average pooling层、1000维full connect层(softmax)
- 残差网络只比普通的CNN多几条shorcut connect,对于shortcut connect维度(feature map和filter)不一致时的两种方法:(1)补零;(2)使用1*1带strides=2的卷积层映射
- 残差网络实现:在convolution和activation之间加入batch normalization(BN);不使用dropout
- 几种不同深度的残差网络结构:见Table 1
5. Experiment
- 在ImageNet数据集上:证明resnet层数增加效果更好,而plain(普通网络)层数增加效果反而会变差。见Figure 4
- 在plain网络中,使用了BN,所以问题不出在收敛性上。而具体的原因,作者也无法解释。
- 18层plain和resnet结果相对接近,作者认为原因在于18层还不够深,体现不出resnet的优势;但是resnet相比plain具有更快的收敛速度
- 作者对比了不同的shortcut connect连接方法(直连称为identity,映射连接称为projection):(A)维度不同时补零,相同时identity;(B)维度不同时使用projection,相同时identity;(C)全部projection
- 效果差距差距不大:(C)>(B)>(A),且都比plain好。
- Deeper Bottleneck Architecture:见Figure 5。这三层分别是1* 1 、3* 3,和1* 1的卷积层,其中1* 1层负责先减少后增加(恢复)尺寸的,使3* 3层具有较小的输入和输出尺寸。这样增加了深度,且保持几乎一样的复杂度。经过试验,bottleneck效果更好,这也是ILSVRC 2015夺冠使用的设计。
在CIFAR10数据上对resnet进行分析:
- 继续对比了plain和resnet,结果和ImageNet的结果类似
- 分析每个卷积层的响应:见Figure 7。resnet的卷积层输出的标准差更小。作者试图通过这个说明当函数 趋近于自身映射()时,训练更容易逼近0 。但是难道不应该再考察一下输出的平均值是不是接近0呢?况且BN操作的作用就是将数据调整到均值接近于0,标准差接近1?
对ResNet中构块的研究
1. Abstract
- 提出了一种新的更优秀的residual unit结构,用这种unit构建的ResNet拥有一条贯穿首尾的直连路径(路径上只有add操作),可以使得在任意两个unit之间信号可以直接正向传播和反向传播
2. Introduction
- 首先先记住这个公式——ResNet的一般表示:
- 当满足如下两个条件时,作者(通过实验)发现,因为此时存在直连路径,所以模型更容易训练: 和 是identity mapping(自身映射)
- proposed ResNet和original ResNet对比,见Figure 1
- 文章主要通过实验,研究对identity mapping(自身映射/直连结构)和pre-activation的重要性
3. ResNet分析
- 当满足上述的两个两个条件时,可以推出公式(4)。这展示了之前提到的贯穿首尾的正向直连特性。
- 误差对 求偏导,可以得到公式(5)。这展示了之前提到的贯穿首尾的反向直连特性。这里之所以对 求偏导是因为这里想要研究的是 对误差的贡献,而不是推导反向传播公式。
- 这里作者解释了为什么新的结构可以在很深的神经网络中得到很好训练的原因:前面一项保证了信息的直连传播;后面一项中因为偏导项不太可能一直都是-1,所以后面一项不会是0,保证梯度不会消失。
4. Identity Mapping的重要性
- 作者使用不同的mapping策略进行了比较,比较结果见Figure 2和Table 1。
- 结论与发现:(1)只有在和直连相近时才能达到较好的结果;(2)1* 1的卷积层在上一篇论文中与identity没什么差距,那是因为层数较少,当层数较多时差距明显。从理论上讲,卷积层连接参数更多,表达能力更强。但是,参数过多的时候,根据模型,有些模型并不是那么好训练,所以问题的瓶颈现在是优化方法上。
5. 激活函数重要性
- 作者使用不同的activation策略进行了比较,比较结果见Figure 4和Table 2。
- 为了保证直连,将激活函数和BN只用于卷积路径上。然后在此基础上又产生了pre-activation的想法,通过实验发现full pre-activation效果最好。作者给出的解释是:relu在BN后面效果更好
- 结论与发现:(1)优化速度快(error降低的快)(原因解释没看懂)(2)减少了过拟合。从Figure 6中可以看出,proposed resnet训练的loss高,但是预测结果好。作者认为归功于BN的正则化效果。在新resnet中,所有卷积层之前都是经过BN的,这点与原始的resnet不同。
6. 模型实战结果
- 在CIFAR10/100和ImageNet数据集上,效果都很好
个人总结
- 个人认为第一篇论文主要就是提出一种新的深度神经网络结构(结构单元),使得网络在层数很深的情况下仍然可以获得良好的训练效果
- 第二篇论文主要是通过很多的实验与比较,改进了第一篇论文中的结构单元(改为直连方式),并试图说明identity(直连)路径的良好训练特性
源代码
- keras-resnet(keras实现的resnet,并加入了第二篇论文中的直连结构,样例为CIFAR10):https://github.com/raghakot/keras-resnet