上图为单个模型

VGGNet, GoogleNet 都说明了深度对于神经网络的重要性. 文中在开始提出: 堆叠越多的层, 网络真的能学习的越好吗? 然后通过神经网络到达足够深度后出现的退化(degradation problem)问题, 从而引出残差学习!

退化问题有何引起?

臭名昭著的梯度消失和梯度爆炸问题已经通过提出的标准初始化(如 Xavier)和中间层标准化(BN)解决.

退化问题也不是由于 overfitting 造成, 毕竟是由于 training error 在上升. 而不是training error 在下降, testing error 上升

(作者推测,退化问题可能是由于深度传统卷积网络的收敛速度可能呈指数级低, 当前的计算能力没法等到它收敛)

那退化问题有何引起?

于是论文提出:退化问题(of train accuracy)表明并非所有系统都同样易于优化。

让我们考虑一个更浅的架构和更深层次的架构,后者在前者上添加更多层。 在深层模型中存在这样一个优化方案:增加的层是使用恒等映射(identity mapping),其他层是从学习的浅层模型复制的。这种构建解决方案的存在表明,深层模型不应该比浅层模型产生更高的训练误差。 然而, 实验表明,我们目前的求解器(solver)无法找到与构建的解决方案一样好或更好的方案.

于是作者提出, 既然网络不能找到与构建的解决方案相当的方案, 我们就手动在不同层间加入恒等映射, 然后让网络学习残差映射(residual mapping). 并假设网络优化残差映射比优化原始映射要简单, 比如说,就拿极端情况来说, 如果恒等映射是最优的, 让残差(f(x)=0)为零要比让堆叠的几个非线性层去学习恒等映射要简单.

恒等映射的好处: 既不增加额外的参数也不增加计算复杂度
残差定义: 数理统计上, 残差表示实际观测值与估计值(拟合值)的差, 蕴含模型的重要信息.

残差学习(Residual Learning)

如果假设多个非线性层可以渐近地逼近复杂函数,那么可以假设它们也可以渐近地逼近残差函数,即 H(x)-x(假设输入和输出具有相同的维数)。 因此,不是期望堆叠层接近H(x),我们明确地让这些层接近剩余函数F(x)=H(x)-x。 原始函数因此变成 F(x)+x。 尽管两种形式都应该能够渐近地接近理想的功能(如同假设),但学习的难易可能不同。

实验证据:

在实际情况下,恒等映射不太可能是最优的,但我们的重定义可能有助于预先解决这个问题。 如果最优函数比零映射更接近恒等映射,那么求解器(solver)应该更容易找出参照恒等映射的扰动,而不是将函数学习为新映射。 实验显示,通常所学习的残差函数具有很小的响应,这表明恒等映射提供了合理的预处理。

网络架构

VGGNet 哲学:

  1. 卷积层主要是 3×3 卷积核(filter)
  2. 具有有相同的输出特征图(feature maps)大小的层,具有相同数量的 filter
  3. 如果特征图大小减半, filter 的数量加倍以保持每层的时间复杂度。

网络==直接采用跨度为2的卷积层执行下采样==, 网络以 Global Average Pooling 和具有1000路 softmax 的完全连接层结束。

虚线残差连接为残差块输入输出维度不同. 当维度相同时, 使用恒等映射; 当输出维度升高(stride=2)时, 使用 Zero-Padding 或者 Projection Shortut(通过 1×1 卷积升维)

实现

基础学习率 lr: 0.1, 每次训练到达平原, 除以10
weight decay(L2正则项): 0.0001
momentum: 0.9

\(\color{red}{Deeper Bottleneck Architectures}\)

Identity Mapping

Residual Units 可以表示为如下形式:

如果 h(x)和 f(y) 都是恒等映射,则信号可以直接从一个单位传播到任何其他单位,无论是信息前向出还是误差反向传递。 我们的实验证明,当架构更接近上述两个条件时,训练总体上会变得更容易。

pre-activation

定义: To construct an identity mapping f(y) = y, we view the activation functions (BN 和 ReLU) as “pre-activation” of the weight layers, in contrast to conventional wisdom of “post-activation”. 结构如下图, (b)部分

好处:

  1. 让优化更简单(由于 f 变为了恒等映射), 加快模型训练速度
  2. 提升模型的正则化. 在原来的 Residual Unit(下图(a)部分) 中, 虽然 BN 标准化了 signal, 不过标准化结果会与 shortcut 相加, 因此合并的 signal 并没有被正则化.

Identity Skip Connections 的重要性

如果将恒等映射换成一个简单修改版 \(h(x_l) = \lambda_l x_l\), 那么, 梯度传递如下

\[
\begin{align}
x_{l+1} &= \lambda_lx_l + F(x_l, W_l) \\
\frac{\partial L}{\partial x_l} &= \frac{\partial L}{\partial x_L}\left( \prod _{ i=l }^{ L-1 }{ \lambda _{ i } } + \sum _{ i=l }^{L-1 }{ \hat F(x_i, W_i) }\right)
\end{align}
\]

\(\prod _{ i=l }^{ i=L-1 }{ \lambda _{ i } }\) 对于一个极深的网络(L很大),如果对于所有 i,\(λ_i > 1\) ,则该因子可以是指数级大的; 如果对于所有 i,\(λ_i < 1\),则该因子可以呈指数规律地变小并消失,这阻止了从捷径中反向传播的信号并迫使它通过重物层流动。这导致了我们通过实验显示的优化难题。

ResNet的更多相关文章

  1. #Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet

    CNN的发展史 上一篇回顾讲的是2006年Hinton他们的Science Paper,当时提到,2006年虽然Deep Learning的概念被提出来了,但是学术界的大家还是表示不服.当时有流传的段 ...

  2. 残差网络resnet学习

    Deep Residual Learning for Image Recognition 微软亚洲研究院的何凯明等人 论文地址 https://arxiv.org/pdf/1512.03385v1.p ...

  3. 使用dlib中的深度残差网络(ResNet)实现实时人脸识别

    opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...

  4. 经典卷积神经网络(LeNet、AlexNet、VGG、GoogleNet、ResNet)的实现(MXNet版本)

    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. 其中 文章 详解卷 ...

  5. 深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)

    一.CNN卷积神经网络的经典网络综述 下面图片参照博客:http://blog.csdn.net/cyh_24/article/details/51440344 二.LeNet-5网络 输入尺寸:32 ...

  6. 深度学习基础网络 ResNet

    Highway Networks 论文地址:arXiv:1505.00387 [cs.LG] (ICML 2015),全文:Training Very Deep Networks( arXiv:150 ...

  7. 卷积神经网络的一些经典网络(Lenet,AlexNet,VGG16,ResNet)

    LeNet – 5网络 网络结构为: 输入图像是:32x32x1的灰度图像 卷积核:5x5,stride=1 得到Conv1:28x28x6 池化层:2x2,stride=2 (池化之后再经过激活函数 ...

  8. [论文阅读] Deep Residual Learning for Image Recognition(ResNet)

    ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...

  9. 学习TensorFlow,调用预训练好的网络(Alex, VGG, ResNet etc)

    视觉问题引入深度神经网络后,针对端对端的训练和预测网络,可以看是特征的表达和任务的决策问题(分类,回归等).当我们自己的训练数据量过小时,往往借助牛人已经预训练好的网络进行特征的提取,然后在后面加上自 ...

  10. 深入解读Resnet

    残差网络的设计目的 随着网络深度增加,会出现一种退化问题,也就是当网络变得越来越深的时候,训练的准确率会趋于平缓,但是训练误差会变大,这明显不是过拟合造成的,因为过拟合是指网络的训练误差会不断变小,但 ...

随机推荐

  1. 洛谷P2633 Count on a tree(主席树,倍增LCA)

    洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...

  2. 【UOJ207】共价大爷游长沙(Link-Cut Tree,随机化)

    [UOJ207]共价大爷游长沙(Link-Cut Tree,随机化) 题面 UOJ 题解 这题太神了 \(\%\%\%myy\) 看到动态的维护边很容易的想到了\(LCT\) 然后能否堵住一条路 我们 ...

  3. [HDU2296]Ring

    vjudge Description For the hope of a forever love, Steven is planning to send a ring to Jane with a ...

  4. 九大排序算法的Java实现

    1.冒泡排序 package Sort; import java.util.Arrays; public class BubbleSort { public static void main(Stri ...

  5. [转]ZooKeeper的学习与应用

    [转]ZooKeeper的学习与应用 http://blog.csdn.net/rengq126/article/details/7393227 1. ZooKeeper的学习与应用 1.1. 概述 ...

  6. 腾讯云GAME-TECH游戏开发者技术沙龙(深圳)开启报名啦~

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:由腾讯游戏云发表在云+社区 腾讯云GAME-TECH沙龙继1月杭州站后,将于3月30日来到深圳站,与游戏厂商和游戏开发者,畅聊游戏安 ...

  7. 关闭NetworkManager的作用

    author: headsen  chen date: 2017-11-21  13:34:23 个人原创 重启网卡后,会造成网卡失效,报错如下: Bringing up interface eth0 ...

  8. NEO从入门到开窗(2) - 智能合约的面相

    一.啰嗦两句 昨天讲了智能合约的一生,那丫长啥样啊?今儿我就跟各位唠叨唠叨. 二.一个简单的智能合约 下面这段就是NEO实例源码里的一个,干撒用的?聪明的你一眼儿就看出来了吧,就是一个所谓域名合约的增 ...

  9. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...

  10. python import自定义模块方法

    转自:http://www.cnitblog.com/seeyeah/archive/2009/03/15/55440.html python包含子目录中的模块方法比较简单,关键是能够在sys.pat ...