深度学习论文:Deep Residual Learning for Image Recognition_deep residual learning for image recognition ieee-程序员宅基地

技术标签: Deep Learning  

论文:

He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

Abstract

深度神经网络难以训练,本文提出残差块来简化比以往深很多网络的训练,我们明确的重新定义了把输入作为参照的残差函数层,并提供了全面的证据表明残差网络更容易优化,在ImageNet数据集使用152层的残差网络(比vgg还深8倍),但仍有较低的复杂度,这些残差网络的集成在ImageNet测试集上取得了3.57% error。

表征深度对许多视觉识别任务非常重要,仅由于我们的表征非常深,在coco目标检测数据集上得到了28%的相对改进。 深度残差网络是我们参加ILSVRC & COCO 2015 竞赛上所使用模型的基础,并且在ImageNet检测、ImageNet定位、COCO检测以及COCO分割上均获得了第一名的成绩。

1. Introduction

深度卷积神经网络在图像识别上取得了一些列突破,深度网络通常集成low/mid/high level的特征,而特征的“level”可以通过堆叠层的数量(深度)来丰富,最近的证据表明网络深度十分重要,在富ImageNet数据集比赛上的领先结果都用了非常深的模型,深度为16至30。许多其他重要(nontrivial)的视觉识别任务也从非常深的模型中获益良多。

在深度的重要意义的驱动下,有一个问题:学习更好的网络就像堆叠更多的层一样简单吗?回答问题有一个障碍:可恶(notorious)的梯度消失/爆炸问题,这个问题在一开始就妨碍着收敛,但是它们已经在很大程度上被归一初始化和中间的归一化层解决,使得数十层的网络在反向传播的随机梯度下降中开始收敛。

当更深的网络能够开始收敛,暴露出一个退化(degradation )问题:随着深度增加,准确率达到饱和(这可能不足为奇),然后迅速下降。出乎意料的是,这种退化并不是由过度拟合造成的。我们的实验已经完全证实,在一个合适的深度模型上增加更多的层会导致更高的training error,图1给出了一个典型的例子。

这种训练集准确率的退化表明:不是所有系统都同样容易优化。让我们考虑一个较浅的结构和更深的对应结构,它在上面添加了更多的层,对于更深的模型,存在一个解决方案:添加的层是恒等映射(identity mapping),其他层是从更浅层中复制,恒等映射的存在表明,较深的模型不应该比较浅的模型产生更大的训练误差。但实验表明,我们手中现有的solver无法找到和恒等映射一样好或更好的解(或在可行时间内无法找到)。

(可以认为ResNet的目的,是让网络至少有恒等映射的能力,这样堆叠更多层时,网络至少不会产生退化。)

在本文中,我们通过引入一个深度残差学习框架来解决退化问题。我们不希望每个堆叠的几个层直接拟合(fit)一个期望的底层映射,而是显式地让这些层拟合一个残差映射(residual mapping)。我们将期望的底层映射表示为H(x),我们让堆叠的非线性层拟合另一个映射 F(x) = H(x) − x 。原始映射被重新映射为 F(x) + x 。我们假设优化残差映射比优化原始的、unreferenced的映射更容易,在极端情况下,如果恒等映射是最优的,那么将残差推到零要比通过一堆堆叠的非线性层更容易拟合一个恒等映射。

F(x) + x 可以通过前馈神经网络的“ 跳接(shortcut connections)”来实现(图2)。跳接是跳过一个或多个层的连接。在本例中,跳接只简单的执行恒等映射,它们的输出被添加到叠加层的输出中。它既不增加额外的参数,也不增加计算的复杂性。整个网络仍然可以使用反向传播的SGD进行端到端的训练,并且可以使用公共框架(例如caffe)来实现,而无需修改 solvers。

(残差函数F(x) = H(x) - x是学习的目标,即输入和输出的差。如果F(x)=0,残差块就构成了一个恒等映射H(x) = x。 拟合残差比拟合恒等映射容易许多。)

类似的现象也出现在CIFAR-10上,这表明优化的困难和我们方法的效果不仅仅适用于特定的数据集。我们在这个超过100层的数据集中展示了成功训练的模型,并探索了超过1000层的模型。 

在ImageNet分类数据集上,我们通过极深的残差网络得到了很好的结果。152层残差网络是迄今为止在ImageNet上出现的最深的网络,但仍然比VGG的复杂度低。我们的ensemble在ImageNet测试集的top-5 error为3.57%,在2015 ILSVRC分类竞赛中获得第一名。极深的表征在其他识别任务上也有很好的泛化性能,并带领我们在2015 ILSVRC & COCO竞赛中进一步获得了第一名:ImageNet检测、ImageNet定位、COCO检测、COCO分割。这一有力的证据表明,残差学习原理是通用的,我们希望它能适用于其他视觉和非视觉问题。

2. Related Work

残差表示(Residual Representations):在图像识别中,VLAD是一种对字典的残差向量进行编码的表示,Fisher Vector可以表示为VLAD的概率版本,它们都是图像检索和分类任务中有力的浅层表示法。在向量量化方面,对残差向量进行编码比对原始矢量进行编码更有效。

在低水平视觉和计算机图形学中,为了求解偏微分方程(Partial Differential Equations,PDEs),广泛使用的多重网格方法将系统重新表述为多个尺度上的子问题,其中每个子问题负责较粗和较细尺度之间的残差解(residual solution)。替代多重网格的一种方法是分层基础预处理(hierarchical basis preconditioning),它依赖于表示两个尺度之间的残差向量的变量。研究表明,这些solver比不知道the residual nature of the solutions的标准solver收敛得快得多。这些方法表明,一个好的的重新定义或预处理可以简化优化过程。

跳接(Shortcut Connections):跳接的实践和理论已经被研究了很长时间。早期训练多层感知器(multi-layer perceptrons, MLPs)的一个实践是添加一个从网络输入连接到输出的线性层。在GoogleNet中,一些中间层直接连接到辅助分类器,用于处理消失/爆炸梯度。文献[38,37,31,46]提出了通过跳接来调整层响应、梯度和传播误差的方法。在[43]中,“inception”层由一个shortcut分支和几个更深的分支组成。

与此同时,“highway networks” [41,42]将跳接与门函数(gating functions)结合,这些“门”是依赖数据的并且有参数,但是我们的跳接是没有参数的(input x),当一个gated shortcut关闭(接近0),highway networks中的层就表示非残差函数,与之相反,我们的公式总是学习残差函数,identity shortcuts永远不会关闭,所有的输入信息总是被传递,还有额外的残差需要学习,此外,highways networks并没有随着深度的增加显示出精度的提高。

3. Deep Residual Learning

3.1. Residual Learning

考虑H(x)作为一个底层映射(underlying mapping),由几个堆叠的层(不一定是整个网络)拟合,x代表这些层的输入,如果假设多个非线性层可以逼近复杂的函数,那么它们就也能逼近残差函

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a906958671/article/details/104150520

智能推荐

软件模拟IIC从机_模拟i2c从机-程序员宅基地

文章浏览阅读8.5k次,点赞9次,收藏93次。由于ic性能有限,没有硬件的iic外设,项目上有需要使用iic从机,所以自己写了个iic从机模块,执行效率还行可以10m主频的单片机最快可以接收到100K的速度。该模块需要资源,2个外部中断配置-上升下降沿中断,来模拟iic时序,芯片编译器的问题,对结构体不是很友好,所以这边没有使用结构体对变量打包,目前只实现了简单的接受和发送,不支持eeprom那种读写方式。两组io口配置,总共有4种状态:1 SDA下降沿中断SCL高电平 – 起始信号SCL低电平 – 数据0 或 ACK2 SDA上升沿中断_模拟i2c从机

Swish & hard-Swish_swish和hardswish-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏18次。当β = 0时,Swish变为线性函数f(x)=x/2β → ∞, σ(x)=(1+exp(−x))−1σ(x)=(1+exp⁡(−x))−1为0或1. Swish变为ReLU: f(x)=2max(0,x)所以Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数. beta是个常数或者可以训练的参数。其具有无上界有下界、平滑、非单调的特性。其在模型效果上优于ReLU。ha..._swish和hardswish

交叉编译 Qt5.12.2_qt5.12 arm 交叉编译-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏59次。来自QQ群 Linux && 技术分享 311078264打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。参考文章:https://doc.qt.io/qt-5/linux.html交叉编译工作在Ubuntu18.04上进行,..._qt5.12 arm 交叉编译

/deep/ 深度作用选择器作用及使用_/deep/ span-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏6次。之前在开发中遇到一个问题,vue项目结合 element ui 使用。但是 element ui 的样式不一定符合我们的需求,这时我们就需要改变它的样式。比如博主使用到了element ui 的对话框,我想要改变这个对话框标题的颜色,所以我需要在页面中审查元素找到对应的标签。但是当我找到并且复制,然后试图去改变它的样式时,怎么都没办法改变。我以为是权重的问题,所以我加 ! important,但是也毫无作用。当我审查元素发现此样式就没有作用到,就相当于它没有找到这个元素,所以也就不存在改_/deep/ span

MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]_lambdaquery() 无法缓存实体类-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏3次。项目有用到mybatis-plus还是挺香的,但是遇到一个坑com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [dbName] of entity []意思是实体类enetity及其字段没有缓存或者说指定字段没有缓存这个需要具体问题具体分析,得先找到在哪缓存的?什么时候缓存的?问题和解决方案我这里的问题是因为继承太多正常是一个mapp_lambdaquery() 无法缓存实体类

FP-growth_fp-growth工作流程-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏6次。FP-growthFP-growth 算法能够更有效地挖掘数据,但不能用于发现关联规则。FP-growth 基于 Apriori 算法构建,但在完成相同任务时采用了一些不同的技术。Apriori:在每次循环的连接步中都要扫描数据集,来计算当前组合而成的项集的支持度。FP-growth:只需要对数据库进行两次扫描,并将数据集存储在一个特定的称作 FP 树的数据结构。这种做法能够使得算法的执..._fp-growth工作流程

随便推点

CSS选择器小结(python使用css方式定位)_python可以用css来调节位置吗-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏29次。学习Python写爬虫的时候,遇到css定位问题,故小结一下css选择器定位的方式通配符选择器:* {color:red;}CSS 类选择器匹配所有class = ‘important’*.important {color:red;}去掉前面通配符也是一样的。结合元素选择器匹配所有p标签下class = ‘important’p.important {color:red;}CSS 多类选择器匹配c..._python可以用css来调节位置吗

C#多维数组的维数长度求解_多维数组长度 c#-程序员宅基地

文章浏览阅读2.4k次。C#多维数组的维数长度求解string[,] datalst = new string[,] { { “11”, “12”, “13” }, { “21”, “22”, “23” } };int row = datalst.GetLength(1); //第一维的长度(即行数)int col = datalst.GetLength(0); //第二维的长度(即列数)Console.Wri..._多维数组长度 c#

C# System.Threading.Timer如何停止_system.timers.timer如何停止-程序员宅基地

文章浏览阅读6.7k次。Threading.Timer 属于100% 多线程Timers.Timer 默认多线程,可设置为单线程既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 n..._system.timers.timer如何停止

爬取汽车之家所有汽车参数配置_汽车之家参数配置怎么导出-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏18次。效果预览汽车之家参数配置的页面无法右键查看网页源代码,不太好爬取,网上相关教程方法比较复杂,这里采用了两步走的爬取方法。即先获取所有车型的网页,再分别解析,逐步拆解。代码实现第一步,导入相关库import bs4import requests as reqimport reimport jsonimport csv第二步,下载出所有车型的网页def mainMethod(): li = [chr(i) for i in range(ord("A"), ord("Z") _汽车之家参数配置怎么导出

​【原创】基于SSM的学院排课管理系统(排课管理系统毕业设计源代码)_培训机构 排课系统 源码-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏20次。后端采用SSM框架。前端使用的是Layui的一个网站模板。通过3种角色使用,实现了包括了教师、学生、班级、专业、课程、排课、数据统计等多个不同的模块。本系统的排课逻辑是为不同学院下不同班级的每一天课程进行安排,并不是传统的固定课程形式。每一天的课程可以是不同的。_培训机构 排课系统 源码

vue-amap中使用官方轨迹回放功能_vue-amap passedpolyline-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏7次。// vue-amap中使用官方轨迹回放功能<template> <div class="page"> <div>MAP TRACK</div> <div class="map-container"> <el-amap :center="center" :amap-manager="amapManager" _vue-amap passedpolyline

推荐文章

热门文章

相关标签