为什么残差连接的网络结构更容易学习?

news/2024/5/16 4:47:34/文章来源:https://blog.csdn.net/Jason_android98/article/details/126804930

为什么残差连接的网络结构更容易学习?

【写在前面】

不仅仅在resnet中,在各种网络结构中大家都喜欢使用残差连接的设计,并声称这有利于网络的优化,这是为什么呢?能给出一个有说服力的答案吗?

Why the residual connection makes the network easier to optimize?

来源:https://www.zhihu.com/question/306135761/answer/2491142607

作者:人间白头

这几天读了何凯明的残差网络,不得不佩服他对神经网络的深入理解,从他灵感的来源,让我感觉他就是个数学大佬,结果一查还真是,本科是清华基础科学班的(研究物理数学的)(拿烟的手微微颤抖)。

好了,废话不多说,让我们一起来理解什么是残差网络。
我们先来看一个现象,假设我们有如下的一个网络,它可以在训练集和测试集上可以得到很好的性能。

接着我们构造如下的网络,前面4层的参数复制于上面的网络,训练时这几层的参数保持不变。换言之,我们只是在上面的网络新增加了几个紫颜色表示的层。

相信大家预想的结果是一样的,理论上,这个新的网络在训练集或者测试集上的性能要比第一个网络的性能好,毕竟多了几个新增加的层提取特征。然后,实际上这个新的网络却比原先的网络的性能要差。

这是何凯明论文的原图,可以看到,56层的网络无论是在训练集还是测试集上,误差率都比20层的要高。出现这种现象的原因并非是由于层数加深引发的梯度消失/梯度爆炸,因为已经通过归一化的方法解决了这个问题,对于出现这种现象的原因将在下面讨论,我们将这种反常的现象称之为“退化现象“。

那么为什么会出现这样的原因呢,何凯明在文章中给出的解释是“难以对网络进行优化”。怎么理解呢,回顾上面的例子,我们假设第一个网络在训练集和测试集上可以得到很好的性能(甚至可以理解为接近100%)。

那么在这个新的网络,由于我们copy了前四层的参数,理论上前四层已经足够满足我们的性能要求,那么新增加的层便显得有些多余,如果这个新的网络也要达到性能100%,则新增加的层要做的事情就是“恒等映射”,也即后面几个紫色的层要实现的效果为f(x)=xf(x)=xf(x)=x 。这样一来,网络的性能一样能达到100%。

而退化现象也表明了,实际上新增加的几个紫色的层,很难做到恒等映射。又或者能做到,但在有限的时间内很难完成(即网络要用指数级别的时间才能达到收敛)。

这时候,巧妙的通过添加”桥梁“,使得难以优化的问题瞬间迎刃而解。

可以看到通过添加这个桥梁,把数据原封不动得送到FC层的前面,而对于中间的紫色层,可以很容易的通过把这些层的参数逼近于0,进而实现f(x)=xf(x)=xf(x)=x的功能。

实际上,网络性能通常未能达到100%,可以假设最初的网络(只有前四层)的性能到了98%等等,如果不添加跳连接,增加三个紫色层之后的新网络同样难以进行优化(由上面极端情况的推广,也即前面四层的性能达到100%)。

而通过跳连接,可以把前四层的输出先送到FC层前面,也就相当于告诉紫色层:”兄弟你放心,我已经做完98%的工作了,你看看能不能在剩下的2%中发点力,你要是找不出提升性能的效果也没事的,我们可以把你的参数逼近于0,所以放心大胆的找吧。"

我们知道,神经网络无非是拟合一个复杂的函数映射关系,而通过跳链接,可以很好的“切割”这种映射关系,实现“分步”完成。

我们把整个映射看成100%,则前面四层网络实现了98%的映射关系,而残余的映射由紫色层完成,Residual 另一个翻译就是"残余,残留“的意思,也就是让每一个残差块,只关注残余映射的一小部分,真的是恰到好处。

当然了,实际上网络运行的时候,我们并不会知道哪几层就能达到很好的效果,然后在它们的后面接一个跳连接,于是一开始便在两个层或者三个层之间添加跳连接,形成残差块,每个残差块只关注当前的残余映射,而不会关注前面已经实现的底层映射。大概形状如下图,

这是何凯明残差论文的原图,这里是部分截图,相信到这里大家对残差网络已经有了一定的理解,并且相信大家在读完这篇短文后,将在阅读何凯明的文章时给予很大的帮助!

作者:心似风往

推荐一篇文章:Visualizing the Loss Landscape of Neural Nets

上面这篇文章其实并没有专门讲Residual Network.不过里面一张图似乎给这个问题一个有意思的解释,请看从该文章中截取的下图:

图中展示了对于ResNet-56, 有和没有skip connection之间,其loss surface的区别。可以看出来,增加了 skip connection之后,loss surface明显平滑很多,自然有利于网络优化了。

作者:龙鹏-笔名言有三

关于残差网络为什么有效,研究众多,这里我们就集中讲述几个主流的思路。

1、简化了学习过程,增强了梯度传播

相比于学习原始的信号,残差网络学习的是信号的差值,这在许多的研究中被验证是更加有效的,它简化了学习的过程。

根据我们前面的内容可知,在一定程度上,网络越深表达能力越强,性能越好。

然而随着网络深度的增加,带来了许多优化相关的问题,比如梯度消散,梯度爆炸。

在残差结构被广泛使用之前,研究人员通过研究更好的优化方法,更好的初始化策略,添加Batch Normalization,提出Relu等激活函数的方法来对深层网络梯度传播面临的问题进行缓解,但是仍然不能解决根本问题。

假如我们有这样一个网络:

其中f为卷积操作,g为非线性变换函数,k为分类器,依靠误差的链式反向传播法则,损失loss对f的导数为:

如果其中某一个导数很小,多次连乘后梯度可能越来越小,这就是常说的梯度消散,对于深层网络,从靠近输出的深层传到靠近输入的浅层时梯度值非常小,使得浅层无法有效地更新。

如果使用了残差结构,因为导数包含了恒等项,仍然能够有效的反向传播。

举一个非常直观的例子方便理解,假如有一个网络,输入x=1,非残差网络为G,残差网络为H,其中H(x)=F(x)+x,假如有这样的输入关系:

因为两者各自是对G的参数和F的参数进行更新,可以看出变化对F的影响远远大于G,说明引入残差后的映射对输出的变化更敏感,这样是有利于网络进行传播的。

2、打破了网络的不对称性[5]

虽然残差网络可以通过跳层连接,增强了梯度的流动,从而使得上千层网络的训练成为可能,不过相关的研究表面残差网络的有效性,更加体现在减轻了神经网络的退化

如果在网络中每个层只有少量的隐藏单元对不同的输入改变它们的激活值,而大部分隐藏单元对不同的输入都是相同的反应,此时整个权重矩阵的秩不高。并且随着网络层数的增加,连乘后使得整个秩变的更低,这就是我们常说的网络退化问题。

虽然权重矩阵是一个很高维的矩阵,但是大部分维度却没有信息,使得网络的表达能力没有看起来那么强大。这样的情况一定程度上来自于网络的对称性,而残差连接打破了网络的对称性。

下面展示了三种跳层连接恢复网络表达能力的案例,分别是消除输入和权重零奇点,打破对称性,线性依赖性

3、增强了网络的泛化能力[6]

有一些研究表明,深层的残差网络可以看做是不同深度的浅层神经网络的ensemble,训练完一个深层网络后,在测试的时候随机去除某个网络层,并不会使得网络的性能有很大的退化,而对于VGG网络来说,删减任何一层都会造成模型的性能奔溃,如下图。

甚至去除和打乱一些网络层,性能的下降也是一个很平滑的过程。

以上都证明了残差结构其实是多个更浅的网络的集成,所以它的有效深度看起来表面的那么深,因此优化自然也没有那么难了。

【项目推荐】

面向小白的顶会论文核心代码库:https://github.com/xmu-xiaoma666/External-Attention-pytorch

面向小白的YOLO目标检测库:https://github.com/iscyy/yoloair

面向小白的顶刊顶会的论文解析:https://github.com/xmu-xiaoma666/FightingCV-Paper-Reading

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6524.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.数据校验-拦截器-全局异常-json数据处理

目录 1.数据校验-拦截器-全局异常-json数据处理 1. JSR303 2. JSR303中含有的注解 3. spring中使用JSR303进行服务端校验 3.1 导入依赖包 3.2 添加验证规则 3.3执行校验 3.4 错误信息的展示 4. SpringMVC定义Restfull接口 5.1 增加spring配置 5.2 Controller 5.3 格…

Mstsc(远程桌面连接)命令的高级用法

Mstsc远程桌面连接,这个是微软操作系统自带的一个命令,相信很多人都用过,但是如果说这个命令还有高级用法,估计很多人都没有用过,其实这个命令还是很强大的,今天咱们就来说一下mstsc的高级用法Mstsc远程桌面连接,这个是微软操作系统自带的一个命令,相信很多人都用过,但…

20220912--CSP-S模拟4

A. 石子游戏 B. 大鱼吃小鱼 C. 黑客 D. 黑客-续A. 石子游戏 首先了解一个叫做 \(\operatorname{Nim}\) 游戏的玩意 通常的 \(\operatorname{Nim}\) 游戏的定义是这样的: 有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)” 如果轮…

自制操作系统日志——第十二天

自制操作系统日志——第十二天 从今天开始,我们将花费两天的时间来进行计算机中定时器的制作。有了定时器后,才能够为程序和cpu更加便利的进行计时。可能会稍难一些了!!! 做好准备,冲!&#xf…

ConcurrentLinkedQueue解析

概述 ConcurrentLinkedQueue实际对应的是LinkedList,是一个线程安全的无界队列,但LinkedList是一个双向链表,而ConcurrentLinkedQueue是单向链表。ConcurrentLinkedQueue线程安全在于设置head、tail以及next指针时都用的cas操作,而且node里的…

00Android studio安装

目录一.下载Android studio二.安装Android studio三.打开软件一.下载Android studio 官网:https://developer.android.google.cn/studio 下载:由于是国外的网站,国内下载会比较慢 二.安装Android studio 打开: 点击【Next】 点击…

猿创征文|瑞吉外卖——管理端_员工管理

个人名片: 博主:酒徒ᝰ. 专栏:瑞吉外卖 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:一本好书,就像高级武功秘籍一样,哪怕只是从里面领悟到个一招半势&…

C# StringBuilder 底层深入原理分析以及使用详解

目录前言什么是StringBuilderStringBuilder的成员StringBuilder增加元素原理StringBuilder扩容原理Capacity:1,元素数量:0Capacity:1,元素数量:1Capacity:2,元素数量:2Ca…

开学季征文|卷生卷死之新学期大学生自救指南!!!

你好,这里是前情提要 正所谓 “ 宁可卷死自己,也要卷死同学 ” ,在这个万物皆卷的时代,“卷”似乎早已与我们变得不可分割血脉相融,有道是卷卷更健康。我也知道卷卷更好,可是天不遂人愿,因为疫情…

Redis_09_Redis集群实现Sentinel哨兵应对高可用

文章目录一、前言二、Sentinel原理2.1 Sentinel原理2.2 Sentinel选主2.3 Sentinel功能小结三、Sentinel实践3.1 Sentinel配置3.2 实践:Sentinel基本使用3.2.1 实践:Sentinel搭建3.2.2 实践:主节点宕机之后的选主过程(Sentinel保证高可用)3.2.…

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法

这个解决办法是我根据网上一系列的方法准备突然成功的,所以我想可能是由于本身其不稳定造成的 首先,我在官网上下载了mysql文件,这个网上随便找都能找到怎么下载的 然后打开文件后,发现没有my.ini 所以我就找了一个文档放了进去…

【线性代数】MIT Linear Algebra Lecture 6: Column space and nullspace

Author| Rickyの水果摊 Time | 2022.9.12 Lecture 6: Column space and nullspace Lecture Info Instructor: Prof. Gilbert Strang Course Number: 18.06 Topics: Linear Algebra Official Lecture Resource: Resource Index of Linear Algebra …

HCIP-双机热备

一,双机热备原理 1.1双机热备简介FW部署在网络出口位置时,如果发生故障会影响到整网业务。为提升网络的可靠性,需要部署两台FW并组成双机热备。双机热备需要两台硬件和软件配置均相同的FW。两台FW之间通过一条独立的链路连接,这条链路通常被称之为“心跳线”。两台FW通过心…

美团面试官:高并发、任务执行时间短的业务怎样使用线程池?

前言 无论是互联网大厂还是一些中游公司的面试基本都会问到多线程与并发编程的知识,所以今天小编在这里做了关于这方面知识的一个笔记分享送给即将面试跳槽的程序员朋友们! 首先关于多线程与并发的知识总结了一个思维导图,分享给大家 如果你…

【Pytorch】2022 Pytorch基础入门教程(完整详细版)

一、Pytorch 1.1 简介 Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库&#xff0…

从校园智能门锁预见万物互联的未来

随着物联网、移动互联网、大数据、云计算等信息技术的创新发展,被信息化驱动的教育行业实现了技术深化融合,智慧校园正逐步落地生根、开花结果。校园智能门锁是智慧校园的基础载体,也是实现教育信息化的基础载体。 NO.1校园智能门锁构建一体化…

【CSDN竞赛第五期】“三而竭”采用等比求和公式法的思考

原题题目 一鼓作气再而衰三而竭。 小艺总是喜欢把任务分开做。小艺接到一个任务,任务的总任务量是n。 第一天小艺能完成x份任务,第二天能完成x/k ... ...第t天能完成x/(k^(t-1))。 小艺想知道自己第一天至少完成多少才能完成最后的任务。 公式推导 第一…

[项目管理-25]:高效沟通的利器,结构思考力与树形结构化表达

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址: 目录 前言: 第1章 结构化思考力概述 1.1 非结构化思考力的问题与结构化思路力的好处 1.2 什么是结构化思路力 1.3…

mysql中的mvcc机制

MVCC多版本并发控制 简述MySQL锁 在InnoDB引擎下,按锁的粒度分类,可以分为行锁和表锁。 行锁实际上是作用在索引之上的。当我们的SQL命中了索引,那锁住的就是命中条件内的索引节点(这就是行锁),如果没有命中索引,那锁…

MySQL的主从复制

MySQL的主从复制 1、概述 主从复制是指将主数据库的 **DDL (数据定义语句)**和 **DML (数据操作语句)**操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)&#…