[论文理解]关于ResNet的理解

这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考。

要解决什么问题

论文的一大贡献就是,证明了即使是深度网络,也可以通过训练达到很好的效果,这跟以往的经验不同,以往由于网络层数的加深,会出现梯度消失的现象。这是因为,在梯度反传的时候,由于层数太深,传递过程又是乘法传递,所以梯度值会越乘越小,梯度消失在所难免。那么怎么才能解决这个问题呢?resnet提供了很好的思路。

怎么解决

从梯度角度

这里一个block的输出变为了常规层的卷积池化加上输入,然后在激活,那么这个结构为什么可以保证深度网络能够收敛呢?

只由这么一个block其实很难看出来,只有在多个block下,才能看出他的优势。看下面的公式。

\[
对于非残差结构:\\
y_1 = G(F(x,w_1)) \\
y_1最为下一层的输入带入有y_2 = G(F(y_1,w_2))\\
那么我们在对w1求梯度的时候呢,根据链式法则\\
\frac{dy_2}{dw_1}=\frac{dy_2}{dF}*\frac{dF}{dy_1}*\frac{dy_1}{dF}*\frac{dF}{dw_1}\\
全是乘法,所以层数过多就很容易越乘越小。\\
再看看残差结构:\\
y_1= G(x+F(x,w_1))\\
y_2 = G(y_1+F(y_1,w_2))\\
链式求导则得到\frac{dy_2}{dw_1} =\frac{dy_2}{dy_1}*\frac{dy_1}{dF}*\frac{dF}{d_w1} + \frac{dy_2}{dF}*\frac{dF}{dy_1}*\frac{dy_1}{dF}*\frac{dF}{dw_1}\\
可以看到,残差网络的梯度在原来的基础上加上了当前输入项的梯度\\
这样梯度的贡献就由两部分组成,一部分是可以直接回传,\\
另一部分先经过常规操作回传,梯度变为求和项,这样由于在离出层比较近的地方梯度比较大\\
求和之后可以避免深度乘法对梯度的影响,即尽管后面越乘越小,对总梯度的影响也不大。
\]

从映射角度

从映射角度上来讲,resnet残差结构有助于学习恒等映射,就论文中所说,多层非线性网络是很难逼近恒等映射的,所以网络在学习过程中学习的实际上是残差函数F(x) - x,而当F(x)趋近于0时,那么就可以逼近恒等映射,完成一个skip connection,通俗地讲,就是resnet提供了两种选择,在需要的时候,可以直接跳过一些多余的卷积池化等操作,直接向后传递信息,这就是恒等映射,也可以两路传达信息,传达上一层的原始信息和加工过的信息。

所以我认为,resnet的结构使得网络有了逼近恒等映射的能力,解决了网络传播过程中信息丢失的问题,因此可以表现的这么好。

[论文理解]关于ResNet的进一步理解的更多相关文章

  1. Java内存管理的进一步理解-模拟过程图解

    Java内存管理的进一步理解-模拟过程图解--转载 java的内存管理分为: 1.堆内存:2.栈内存:3.方法区:4.本地方法区 /* 1:方法区      方法区存放装载的类数据信息包括:      ...

  2. 『cs231n』卷积神经网络的可视化与进一步理解

    cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解,其中原论文翻译比博文更容易理解,但是太长,而博文是业者而非 ...

  3. 对于python装饰器结合递归的进一步理解

    对于python装饰器结合递归的进一步理解 代码如下: import functools def memoize(fn): print('start memoize') known = dict() ...

  4. javascript深入理解js闭包(个人理解,大神勿喷)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  5. 【中文版 | 论文原文】BERT:语言理解的深度双向变换器预训练

    BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding 谷歌AI语言组论文<BERT:语言 ...

  6. 对iOS后台模式最多10分钟运行时间的进一步理解

    在app进入后台时,系统初始默认是只有10s的处理时间,但如果10s不够,我们可以主动申请,网上流传最多的一个说法是10分钟. 但这种说法有个前提: 那就是iOS7之前,是这样 但从iOS7开始,我们 ...

  7. AutoResetEvent waitone set进一步理解补充

    AutoResetEvent 的定义 //定义两个信号锁 AutoResetEvent ReadTxt = new AutoResetEvent(false); AutoResetEvent Uplo ...

  8. 对Java中字符串的进一步理解

    字符串在程序开发中无处不在,也是用户交互所涉及到最频繁的数据类型,那么字符串不仅仅就是我们简单的理解的String str = "abc";一起来更加深入的看一下 在Java中,字 ...

  9. 通过回调函数的理解来进一步理解ajax及其注意的用法

    一,再一次理解回调函数 (function($){ $.fn.shadow = function(opts){ //定义的默认的参数 var defaults = { copies: 5, opaci ...

随机推荐

  1. Juniper SRX550防火墙web页面CPU达到100%的故障解决办法

    Juniper SRX550防火墙web页面CPU达到100%的故障解决办法 利用telnet远程连接主机,对web页面注销重新登录即可,在配置中输入命令:run restart web-manage ...

  2. my27_OGG MySQL To MySQL错误汇总

    OGG-00446 2019-02-12T14:57:57.668+0800 ERROR OGG-00446 Oracle GoldenGate Delivery for MySQL, r1.prm: ...

  3. getElementsByTagName 、 getElementsByName 、getElementById区别

    WEB标准下可以通过getElementById(), getElementsByName(), and getElementsByTagName()访问DOCUMENT中的任一个标签: getEle ...

  4. Linux安装mysql记录 重置密码

    重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...

  5. requirej入门(一)

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...

  6. JVM---概述

    1.JVM架构 1.1 JVM组成: ClassLoader类加载器 : 将class文件加载到JVM内存中: Runtime Data Area运行时数据区域 :  java程序运行时的内存区域: ...

  7. myEclipse更换SVN登录账号

    Win10下 找到下面路径删除其下的所有文件 C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple AppData默认隐藏 ...

  8. python 几个常用自定义函数在dataframe上的应用

    最小值与最大值 def f(x): return pd.Series([x.min(),x.max(),index=['min','max']) frame.apply(f) 浮点值的格式化 form ...

  9. javascrip基础学习

    JS是一种解释性脚本语言,在网页开发用经常用到(HTML CSS),用于控制网页的行为.现在RTT的柿饼UI也是用JS来开发的,所以很有必要学习一下. 注释:// ./*  */ 语句分行: 折行\ ...

  10. 关于KEIL下的图形化显示和输出问题

    一 keil自带的虚拟示波器:只能在软件仿真下使用:右边的这个可以查看变量. 二 SEGGER的工具软件: 1 RTT:可以进行日志输出调试信息输出,需要配置工程,但不占用串口. 2 JSCOPE:可 ...