【深度学习】论文导读:图像识别中的深度残差网络(Deep Residual Learning for Image Recognition)

来源:互联网 发布:核聚变 知乎 编辑:程序博客网 时间:2024/05/18 00:09

论文下载:

Deep Residual Learning for Image Recognition

CVPR2016最佳论文,夺得ImageNet recognition, ImageNet detection, ImageNet localization, COCO detection, and COCO segmentation五项第一。

这篇论文由微软研究院的四人团队:Kaiming He、Xiangyu Zhang、Shaoqing Ren、Jian Sun发表,解决了深层网络训练和测试误差低的问题。

摘要

提出了一种残差学习方式,让训练比以往更深的网络更为简单。在大量的实验仿真基础上,证实了这种残差网络确实更易于优化并且通过增加层数获得更准确的结果。这种方法可用于图像识别的各个方面(image classification,object detection等等)

但是这里我觉得这种方法还可以用于其他地方,比如训练一个全连接的网络,不一定是CNN,普通的网络应该也能提升效果

介绍

深度卷积网络已经取得了一系列的成就,因为他能很好的结合图像底层到高层语义上的各个特征。最新的研究表明网络深度还是一个至关重要的因素,在ImageNet数据集上,领先的几个模型都使用了很深的模型(16-30层不等),其他数据集上同样也是,深层模型会有更好的表现。

但是深层模型同样带来了问题:第一就是著名的梯度弥散和爆炸问题,导致结果不会收敛。但是这个问题通过normalized initialization和intermediate normalization layers可以解决(我在后面的博客中会解释讨论这个问题)。同时,作者还发现了一个问题,深层网络会导致“精度下降”,但是这种“精度下降”并不是过拟合导致的(下图显示了作者的结果)


于是就产生了这样一个问题:假设我们训练了一个浅层网络,它的error已经稳定,然后我们在它的基础上又添加了多个层,但是error增加了。

作者考虑到了某一种特殊情况,假设添加进去的多个层不改变原先的输出,相当于做一个恒等映射(实际上这就是当前网络的一个solution),那么这

一个solution应该与原网络的error一样,而实际中却并不能找到这样的solution。

作者在论文中提出了一个深度残差学习框架来解决这个“精度下降”问题,即不通过堆叠一些层直接学习从input到output的映射,而是让他们学习一个残差映射,具体结构图如下:F(x)是在x基础上的残差,如果用H(x)表示目标映射的话,那么F(x)=H(x)-x。在这个前提下,我们知道最后的目标输出就是F(x)+x,x这个量通过输入端的一个shortcut connection连接到输出,这种形式就构成了短路结构。这一个短路连接,实现的是x的恒等映射,而且它并没有带入任何参数,也没有增加任何的计算复杂性。


相关工作

残差表示的思想在之前就比较广泛了,作者列举了一些前人使用残差表示的例子:VLAD和Fisher Vector都是有效的图像分类方法,偏微分方程的数值解法多重网格法,就是把问题分为在不同尺度上的子问题,然后通过求解粗尺度和细尺度上的差分量来估计方程的解。(多重网格法很有意思,有兴趣的同学可以研究一下,它很好的贯彻了残差和迭代的思想)。而且往往求解残差会比求解原解收敛得更快。

短路连接的思想来源于早期训练多层感知机时会添加一个从input到output的线性层来进行优化。当然,早期也使用在中间层添加一个额外的分类器来解决梯度弥散爆炸问题。作者还提到了“高速公路网络”,它用门限函数来作为短路连接的映射,与之对比,本文的网络实现恒等映射而且不需要额外的参数,当断开时,shortcut就不起作用了,原先的映射就不再是残差映射而退化成input到output的映射,反观自己的网络,连接永远不会断开。在深层结构下,“高速公路网络”的精确度并不会提升。(这里就是对“高速公路网络”的思想一顿批……

实现

这一部分作者再次讨论了残差学习的实现细节。之所以选择学习一个残差,是因为残差有时候会比原映射更容易学习,设想一个特殊的情况:

如果我们的目标映射就是恒等映射,那么残差学习的结果就会简单地把所有的权值置为0,以获得恒等映射。然而在原来的网络,这个步骤将会很复杂,恒等映射通过多个非线性层去学习,不仅耗费计算,而且必然会产生误差。作者认为,深层网络之所以会产生精度下降问题,就是这些误差累加所导致的。

在现实中,显然恒等映射不会是目标映射了,但是短路结构为后续的学习提供了一个先验信息,我们只需要处理这个信息上的扰动,而不用重新学习一个新的映射,这就是本文思想的核心所在。

短路连接还需要解决一个问题就是input和output维度不同的问题,F(x)和x的维度不同,就意味着x需要升维或者降维

假设W是一个线性变换矩阵

使用y=F(x)+Wx来进行维度的匹配

那么W到底怎么确定呢?文中没有给出一个明确的解答,这也是我阅读这篇论文的最大疑问。


最后展示一下论文中的34-layer residual大致结构,与普通的CNN34-layer plain和VGG-19的对比。


普通网络和ResNet的error对比


这个误差表证明了论文的观点,确实ResNet可以随着深度的增加而变得精确,看到152层网络有点害怕,训练一个这么大的网络,需要调度多少的高性能GPU。。。这年头搞科研也要用钱砸啊快哭了

ResNet-A、B、C代表了0填充升维、projection升维,其他的用恒等映射、全部用projection三种方法,C的准确度最高,不过文章也说了,W不管怎么取值,都可以解决“精度下降”的问题,所以W并不是关键点。




4 0
原创粉丝点击