CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题

from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212

环境:Win8.1 TensorFlow1.0.1

软件:Anaconda3 (集成Python3及开发环境)

TensorFlow安装:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版)

TFLearn安装:pip install tflearn

参考:

Deep Residual Learning for Image Recognition Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun

1. 前言


ResNet(Residual Neural Network)由前微软研究院的 Kaiming He 等4名华人提出,通过使用 Residual Blocks 成功训练152层深的神经网络,在 ILSVRC 2015 比赛中获得了冠军,取得 3.57% 
top-5 错误率,同时参数量却比 VGGNet 低,效果非常突出。ResNet 的结构可以极快地加速超深神经网络的训练,模型的准确率也有非常大的提升。上一篇博文讲解了 Inception,而 Inception V4 则是将 Inception Module 和 ResNet 相结合。可以看到 ResNet 是一个推广性非常好的网络结构,甚至可以直接应用到 Inception Net 中。

CVPR16 上何凯明、张祥雨、任少卿和孙剑四人的 Deep Residual Learning for Image Recognition 毫无争议地获得了 Best Paper

关于这篇文章细节可参考:

  1. 获奖无数的深度残差学习,清华学霸的又一次No.1 | CVPR2016 最佳论文
  2. 秒懂!何凯明的深度残差网络PPT是这样的|ICML2016 tutorial

2. 问题

作者首先提出的问题是,深度神经网络是不是越深越好?

  • 理想情况下,只要网络不过拟合,应该是越深越好。
  • 实际情况是网络加深,accuracy 却下降了,称这种情况为 Degradation。(cnn中文汉字手写识别构建网络遇到过!)

LSTM 的提出者 Schmidhuber 早在 Highway Network 里指出神经网络的深度对其性能非常重要,但是网络越深其训练难度越大,Highway
Network 的目标就是解决极深的神经网络难以训练的问题。Highway Network
相当于修改了每一层的激活函数,此前的激活函数只是对输入做一个非线性变换,Highway NetWork 则允许保留一定比例的原始输入
x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network

ResNet 最初的灵感出自这个问题:在不断加神经网络的深度时,会出现一个 Degradation 的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。

假设有一个比较浅的网络(Shallow Net)达到了饱和的准确率,那么后面再加上几个的全等映射层(Identity mapping),起码误差不会增加,即更深的网络不应该带来训练集上误差上升。而这里提到的使用全等映射直接将前一层输出传到后面的思想,就是 ResNet 的灵感来源。

3. 组成

作者提出一个 Deep residual learning 框架来解决这种因为深度增加而导致性能下降问题。

假定某段神经网络的输入是 x,期望输出是 H(x),即 H(x)
是期望的复杂潜在映射,但学习难度大;如果我们直接把输入 x 传到输出作为初始结果,通过下图“shortcut connections”,那么此时我们需要学习的目标就是 F(x)=H(x)-x,于是 ResNet 相当于将学习目标改变了,不再是学习一个完整的输出,而是最优解 H(X) 和全等映射 的差值,即残差

Shortcut 原意指捷径,在这里就表示越层连接,在 Highway Network 在设置了一条从 x 直接到 y 的通路,以 T(x, Wt) 作为 gate 来把握两者之间的权重;而 ResNet shortcut
没有权值,传递 x 后每个模块只学习残差F(x),且网络稳定易于学习,作者同时证明了随着网络深度的增加,性能将逐渐变好。可以推测,当网络层数够深时,优化 Residual Function:F(x)=H(x)?x,易于优化一个复杂的非线性映射 H(x)。

4. 网络结构

下图所示为 VGGNet-19,以及一个34层深的普通卷积网络,和34层深的 ResNet 网络的对比图。可以看到普通直连的卷积神经网络和 ResNet 的最大区别在于,ResNet 有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这种结构也被称为 shortcut connections。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet
在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。

同时34层 residual network 取消了最后几层 FC,通过 avg pool 直接接输出通道为1000的 Softmax,使得 ResNet 比16-19层 VGG 的计算量还低。

在 ResNet 的论文中,除了提出残差学习单元的两层残差学习单元,还有三层的残差学习单元。两层的残差学习单元中包含两个相同输出通道数(因为残差等于目标输出减去输入,即,因此输入、输出维度需保持一致)的3′3卷积;而3层的残差网络则使用了 Network In Network 和 Inception Net 中的1′1卷积,并且是在中间3′3的卷积前后都使用了1′1卷积,先降维再升维的操作,降低计算复杂度。另外,如果有输入、输出维度不同的情况,我们可以对
x 做一个线性映射变换,再连接到后面的层。

5. 实验

在使用了 ResNet 的结构后,可以发现层数不断加深导致的训练集上误差增大的现象被消除了,ResNet 网络的训练误差会随着层数增大而逐渐减小,并且在测试集上的表现也会变好。最终在 ILSVRC 2015 比赛中获得了冠军,取得 3.57% 的 top-5 错误率。

tflearn 给出了 ResNet 在 CIFAR-10 上的实例 residual_network_cifar10.py,tflearn 通过 tflearn.residual_block
可以方便定义残差学习单元:

[python] view plain copy

  1. # -*- coding: utf-8 -*-
  2. """ Deep Residual Network.
  3. Applying a Deep Residual Network to CIFAR-10 Dataset classification task.
  4. References:
  5. - K. He, X. Zhang, S. Ren, and J. Sun. Deep Residual Learning for Image
  6. Recognition, 2015.
  7. - Learning Multiple Layers of Features from Tiny Images, A. Krizhevsky, 2009.
  8. Links:
  9. - [Deep Residual Network](http://arxiv.org/pdf/1512.03385.pdf)
  10. - [CIFAR-10 Dataset](https://www.cs.toronto.edu/~kriz/cifar.html)
  11. """
  12. from __future__ import division, print_function, absolute_import
  13. import tflearn
  14. # Residual blocks
  15. # 32 layers: n=5, 56 layers: n=9, 110 layers: n=18
  16. n = 5
  17. # Data loading
  18. from tflearn.datasets import cifar10
  19. (X, Y), (testX, testY) = cifar10.load_data()
  20. Y = tflearn.data_utils.to_categorical(Y, 10)
  21. testY = tflearn.data_utils.to_categorical(testY, 10)
  22. # Real-time data preprocessing
  23. img_prep = tflearn.ImagePreprocessing()
  24. img_prep.add_featurewise_zero_center(per_channel=True)
  25. # Real-time data augmentation
  26. img_aug = tflearn.ImageAugmentation()
  27. img_aug.add_random_flip_leftright()
  28. img_aug.add_random_crop([32, 32], padding=4)
  29. # Building Residual Network
  30. net = tflearn.input_data(shape=[None, 32, 32, 3],
  31. data_preprocessing=img_prep,
  32. data_augmentation=img_aug)
  33. net = tflearn.conv_2d(net, 16, 3, regularizer=‘L2‘, weight_decay=0.0001)
  34. net = tflearn.residual_block(net, n, 16)
  35. net = tflearn.residual_block(net, 1, 32, downsample=True)
  36. net = tflearn.residual_block(net, n-1, 32)
  37. net = tflearn.residual_block(net, 1, 64, downsample=True)
  38. net = tflearn.residual_block(net, n-1, 64)
  39. net = tflearn.batch_normalization(net)
  40. net = tflearn.activation(net, ‘relu‘)
  41. net = tflearn.global_avg_pool(net)
  42. # Regression
  43. net = tflearn.fully_connected(net, 10, activation=‘softmax‘)
  44. mom = tflearn.Momentum(0.1, lr_decay=0.1, decay_step=32000, staircase=True)
  45. net = tflearn.regression(net, optimizer=mom,
  46. loss=‘categorical_crossentropy‘)
  47. # Training
  48. model = tflearn.DNN(net, checkpoint_path=‘model_resnet_cifar10‘,
  49. max_checkpoints=10, tensorboard_verbose=0,
  50. clip_gradients=0.)
  51. model.fit(X, Y, n_epoch=200, validation_set=(testX, testY),
  52. snapshot_epoch=False, snapshot_step=500,
  53. show_metric=True, batch_size=128, shuffle=True,
  54. run_id=‘resnet_cifar10‘)

6. 后续

在 ResNet 推出后不久,Google 就借鉴了 ResNet 的精髓,提出了 Inception V4
Inception-ResNet-V2
,并通过融合这两个模型,在 ILSVRC 数据集上取得了惊人的 3.08%的错误率。可见,ResNet 及其思想对卷积神经网络研究的贡献确实非常显著,具有很强的推广性。

在 ResNet 的作者的第二篇相关论文 Identity Mappings in Deep Residual Networks中ResNet V2被提出。ResNet V2 和 ResNet V1 的主要区别在于,作者通过研究 ResNet 残差学习单元的传播公式,发现前馈和反馈信号可以直接传输,因此shortcut connection 的非线性激活函数(如ReLU)替换为
Identity Mappings。同时,ResNet V2 在每一层中都使用了 Batch Normalization。这样处理之后,新的残差学习单元将比以前更容易训练且泛化性更强。

原文地址:https://www.cnblogs.com/bonelee/p/8977095.html

时间: 2024-10-01 07:44:45

CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题的相关文章

Dual Path Networks(DPN)——一种结合了ResNet和DenseNet优势的新型卷积网络结构。深度残差网络通过残差旁支通路再利用特征,但残差通道不善于探索新特征。密集连接网络通过密集连接通路探索新特征,但有高冗余度。

如何评价Dual Path Networks(DPN)? 论文链接:https://arxiv.org/pdf/1707.01629v1.pdf在ImagNet-1k数据集上,浅DPN超过了最好的ResNeXt-101(64×4d),具有26%更小的模型尺寸,25%的计算成本和8%的更低的内存消耗 5 个回答 xiaozhi CV.ML.DL 1.针对视觉识别任务的"网络工程"一直是研究的重点,其重在设计更为高效的网络拓扑结构,一方面考虑更好的特征表示学习,另一方面尽可能减少计算复杂度

深度残差网络(DRN)ResNet网络原理

一说起“深度学习”,自然就联想到它非常显著的特点“深.深.深”(重要的事说三遍),通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很容易就想到:深的网络一般会比浅的网络效果好,如果要进一步地提升模型的准确率,最直接的方法就是把网络设计得越深越好,这样模型的准确率也就会越来越准确. 那现实是这样吗?先看几个经典的图像识别深度学习模型: 这几个模型都是在世界顶级比赛中获奖的著名模型,然而,一看这些模型的网络层次数量,似乎让人很失望,少则5层,多的也就22层而已,这些世界级

关于深度残差网络(Deep residual network, ResNet)

题外话: From <白话深度学习与TensorFlow> 深度残差网络: 深度残差网络的设计就是为了克服这种由于网络深度加深而产生的学习效率变低,准确率无法有效提升的问题(也称为网络退化). 甚至在一些场景下,网络层数的增加反而会降低正确率.这种本质问题是由于出现了信息丢失而产生的过拟合问题(overfitting,所建的机器学习模型或者是深度学习模型在训练样本中表现的过于优越,导致在验证数据集及测试数据集中表现不佳,即为了得到一致假设而使假设变得过度复杂).解决思路是尝试着使他们引入这些刺

Keras快速搭建深度残差收缩网络(及深度残差网络)

从本质上讲,深度残差收缩网络属于卷积神经网络,是深度残差网络(deep residual network, ResNet)的一个变种.它的核心思想在于,在深度学习进行特征学习的过程中,剔除冗余信息是非常重要的:软阈值化是一种非常灵活的.删除冗余信息的方式. 1.深度残差网络 首先,在介绍深度残差收缩网络的时候,经常需要从深度残差网络开始讲起.下图展示了深度残差网络的基本模块,包括一些非线性层(残差路径)和一个跨层的恒等连接.恒等连接是深度残差网络的核心,是其优异性能的一个保障. 2.深度残差收缩

残差网络resnet学习

Deep Residual Learning for Image Recognition 微软亚洲研究院的何凯明等人 论文地址 https://arxiv.org/pdf/1512.03385v1.pdf Abstract 更深层次的神经网络训练更加困难.我们提出一个 Residual的学习框架来缓解训练的网比之前所使用的网络深得多.我们提供全面的经验证据显示这些残余网络更容易优化,并可以从显着增加的深度获得准确性.在ImageNet数据集上我们评估深度达152层残留网比VGG网[41]更深,但

神经网络和深度学习(一)神经网络基础

1.什么是神经网络? (1)房价预测模型Ⅰ: 神经网络:size x ——> O ——> price y ReLU函数(Rectified linear unit 修正线性单元):修改线性的函数,避免出现price未负数的情况. (2)房价预测模型Ⅱ: 即神经网络为: 2.Binary classification(二分分类): 以识别照片中的猫为例 ① 判定:若是猫,则 y = 1:若不是猫,则 y = 0. ② 图片规格:64*64,数字化表示:3个 64*64矩阵,分别表示Red Gre

深度残差收缩网络:(一)背景知识

深度残差收缩网络(Deep Residual Shrinkage Network)是深度残差学习(Deep Residual Network, ResNet)的一种改进,发表在IEEE Transactions on Industrial Informatics上,面向的是数据包含噪声的情况. 简单地讲,深度残差收缩网络就是,将软阈值化作为可训练的模块,嵌入到ResNet之中.接下来结合自己的理解,解读一下相关的背景知识. (1)噪声的含义 如上所述,深度残差收缩网络面向的是数据包含噪声的情况.

TFLearn实现深度残差收缩网络(MNIST数据集)

深度残差收缩网络是一种新颖的深度学习算法,实际上是深度残差网络的升级版本,能够在一定程度上提高深度学习方法在含噪数据上的特征学习效果. 首先,简单回顾一下深度残差网络,深度残差网络的基本模块如下图所示.相较于普通的卷积神经网络,深度残差网络引入了跨层的恒等映射,来减小模型训练的难度,提高准确率. 然后,在深度残差网络的基础上,深度残差收缩网络引入了一个小型的子网络,用这个子网络学习得到一组阈值,对特征图的各个通道进行软阈值化.这个过程其实可以看成一个可训练的特征选择的过程.具体而言,就是通过前面

深度残差收缩网络:(五)实验验证

实验部分将所提出的两种深度残差收缩网络,即“通道之间共享阈值的深度残差收缩网络(Deep Residual Shrinkage Networks with Channel-shared Thresholds,简称DRSN-CS)”,和“逐通道不同阈值的深度残差收缩网络(Deep Residual Shrinkage Networks with Channel-wise Thresholds,简称DRSN-CW)”,与传统的卷积神经网络(Convolutional Neural Networks,