深入解读Resnet
残差网络的设计目的
随着网络深度增加,会出现一种退化问题,也就是当网络变得越来越深的时候,训练的准确率会趋于平缓,但是训练误差会变大,这明显不是过拟合造成的,因为过拟合是指网络的训练误差会不断变小,但是测试误差会变大。为了解决这种退化现象,ResNet被提出。我们不再用多个堆叠的层直接拟合期望的特征映射,而是显式的用它们拟合一个残差映射。假设期望的特征映射为H(x),那么堆叠的非线性层拟合的是另一个映射,也就是F(x)=H(x)-x。假设最优化残差映射比最优化期望的映射更容易,也就是F(x)=H(x)-x比F(x)=H(x)更容易优化,则极端情况下,期望的映射要拟合的是恒等映射,此时残差网络的任务是拟合F(x)=0,普通网络要拟合的是F(x)=x,明显前者更容易优化。
残差块
定义一个残差块的形式为y=F(x,Wi)+x,其中x和y分别为残差块的输入和输出向量,F(x,Wi)是要学习的残差映射,在上图中有2层,F=W2σ(W1X),σ是Relu激活函数,在这个表达式中为了方便起见,省略了偏置,这里的shortcut connections是恒等映射,之所以用恒等映射是因为这样没有引进额外的参数和计算复杂度。残差函数F的形式是灵活的,残差块也可以有3层,但是如果残差块只有一层,则y=W1x+x,它只是一个线性层,3层的残差块如下如所示。
一般的我们称上图这种3层残差块为'bottleneck block',这里1x1的卷积起到了降维的作用,并且引入了更多的非线性变换,明显的增加了残差块的深度,能提高残差网络的表示能力。
残差网络的优点
残差网络与普通网络不同的地方就是引入了跳跃连接,这可以使上一个残差块的信息没有阻碍的流入到下一个残差块,提高了信息流通,并且也避免了由与网络过深所引起的消失梯度问题和退化问题。
假设有一个大型的神经网络Big NN,它的输入为X,输出激活值为al,则如果我们想要增加这个网络的深度,再给这个网络额外的加两层,最后的输出为al+2,可以把这两层看做一个残差块,并且带有捷径连接,整个网络中使用的激活函数为Relu.
al+2=g(zl+2+al),其中zl+2=Wl+2al+1+bl+1,若Wl+2=0,bl+1=0,则al+2=g(al),当al>=0时,al+2=al。这相当于是建立起了al和al+2的线性关系,相当于是忽略了al之后的两层神经层,实现了隔层线性传递,模型本身也就能够容忍更深层的网络,并且这个额外的残差块也不会影响它的性能.
残差网络的结构
上图一共是5中残差网络的结构,深度分别是18,34,50,101,152.首先都通过一个7x7的卷积层,接着是一个最大池化,之后就是堆叠残差块,其中50,101,152层的残差网络使用的残差块是瓶颈结构,各网络中残差块的个数从左到右依次是8,16,16,33,50。最后在网络的结尾通常连接一个全局平均池化.全局平均池化的好处是没有参数需要最优化防止过拟合,对输入输出的空间变换更具有鲁棒性,加强了特征映射与类别的一致性。
残差网络的本质
残差网络事实上是由多个浅的网络融合而成,它没有在根本上解决消失的梯度问题,只是避免了消失的梯度问题,因为它是由多个浅的网络融合而成,浅的网络在训练时不会出现消失的梯度问题,所以它能够加速网络的收敛.
深入解读Resnet的更多相关文章
- [源码解读] ResNet源码解读(pytorch)
自己看读完pytorch封装的源码后,自己又重新写了一边(模仿其书写格式), 一些问题在代码中说明. import torch import torchvision import argparse i ...
- CNN卷积神经网络详解
前言 在学计算机视觉的这段时间里整理了不少的笔记,想着就把这些笔记再重新整理出来,然后写成Blog和大家一起分享.目前的计划如下(以下网络全部使用Pytorch搭建): 专题一:计算机视觉基础 介 ...
- 解读 pytorch对resnet的官方实现
地址:https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py 贴代码 import torch.nn as ...
- 深度学习基础网络 ResNet
Highway Networks 论文地址:arXiv:1505.00387 [cs.LG] (ICML 2015),全文:Training Very Deep Networks( arXiv:150 ...
- Resnet BN
[深度学习]深入理解Batch Normalization批标准化 https://www.zhihu.com/topic/20084849/hot resnet(残差网络)的F(x)究竟长什么样子? ...
- YOLO2解读,训练自己的数据及相关转载以供学习
https://pjreddie.com/darknet/yolo/ 具体安装及使用可以参考官方文档https://github.com/pjreddie/darknet https://blog.c ...
- zz扔掉anchor!真正的CenterNet——Objects as Points论文解读
首发于深度学习那些事 已关注写文章 扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 关注他 JustDoIT 等 ...
- 《Stereo R-CNN based 3D Object Detection for Autonomous Driving》论文解读
论文链接:https://arxiv.org/pdf/1902.09738v2.pdf 这两个月忙着做实验 博客都有些荒废了,写篇用于3D检测的论文解读吧,有理解错误的地方,烦请有心人指正). 博客原 ...
- 图像分类:CVPR2020论文解读
图像分类:CVPR2020论文解读 Towards Robust Image Classification Using Sequential Attention Models 论文链接:https:// ...
随机推荐
- C#数据库连接操作大全
一:数据库连接代码: SqlConnection objSqlConnection = new SqlConnection ("server = 127.0.0.1;uid = sa; pw ...
- linux - 目录、文件默认属性: umask使用
一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...
- Maven部署项目到Tomcat
首先需要用MyEclipse建立一个Maven项目 为了不报403错误,tomcat目录下的tomcat-user.xml文件的配置如下: setting.xml配置如下,大家关注下Server的配置 ...
- 速度之王 — LZ4压缩算法(一)
LZ4 (Extremely Fast Compression algorithm) 项目:http://code.google.com/p/lz4/ 作者:Yann Collet 本文作者:zhan ...
- 【Android 应用开发】BluetoothClass详解
一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该 ...
- 【47】java的类之间的关系:泛化、依赖、关联、实现、聚合、组合
java的类之间的关系:泛化.依赖.关联.实现.聚合.组合 泛化: • 泛化关系(Generalization)也就是继承关系,也称为"is-a-kind-of"关系,泛化关系用于 ...
- ssh keygen命令实现免密码通信(git库获取操作权限:开发人员添加到git库中,获取操作权限)
先看两个机器实现免密码登陆通讯: 假设 A 为客户机器,B为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa 做法: 1.登录A机器 2.s ...
- 如何在os x或ubuntu下安装最新的ruby
os x下基本上可以安装到比较新的ruby,首先先安装rvm,然后用rvm list known看当前可供安装的ruby的版本,不过这也不是绝对的,比如在我的os x 10.9上,命令返回如下: # ...
- obj-c编程02:给类自动合成存取方法
我们在此篇对obj-c编程01中的Box的例子稍加改动,一是添加的自动合成存取器,二是将Box按照其标准的写法分成3个文件,即头文件Box.h,类实现文件Box.m,以及主文件test.m. 1.Bo ...
- RubyMotion之父:Ruby是目前替代Objective-C的最佳iOS开发语言
发表于2012-08-16 00:52| 21716次阅读| 来源CSDN| 24 条评论| 作者杨鹏飞 RubyMotionRubyObjective-CiOSJava 摘要:曾几何时,PC端有那么 ...