前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习笔记(七)–ResNet(残差网络)

深度学习笔记(七)–ResNet(残差网络)

作者头像
全栈程序员站长
发布2022-09-13 10:09:49
5420
发布2022-09-13 10:09:49
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

内容来自吴恩达老师视频,网易云课堂有哦

ResNets

非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。ResNets是由残差块(Residual block)构建的,首先解释一下什么是残差块。

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

这是一个两层神经网络,在

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

层进行激活,得到

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,再次进行激活,两层之后得到

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

。计算过程是从

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

开始,首先进行线性激活,根据这个公式:

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,通过

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

算出

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,即

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

乘以权重矩阵,再加上偏差因子。然后通过ReLU非线性激活函数得到

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

计算得出。接着再次进行线性激活,依据等式

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,最后根据这个等式再次进行ReLu非线性激活,即

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,这里的

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

是指ReLU非线性函数,得到的结果就是

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

。换句话说,信息流从

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

需要经过以上所有步骤,即这组网络层的主路径。

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

在残差网络中有一点变化,我们将

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

直接向后,拷贝到神经网络的深层,在ReLU非线性激活函数前加上

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,这是一条捷径。]

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

的信息直接到达神经网络的深层,不再沿着主路径传递,这就意味着最后这个等式

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

)去掉了,取而代之的是另一个ReLU非线性函数,仍然对

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

进行

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

函数处理,但这次要加上

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

即:

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

,也就是加上的这个

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

产生了一个残差块。

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

在上面这个图中,我们也可以画一条捷径,直达第二层。实际上这条捷径是在进行ReLU非线性激活函数之前加上的,而这里的每一个节点都执行了线性函数和ReLU激活函数。所以

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

插入的时机是在线性激活之后,ReLU激活之前。除了捷径,你还会听到另一个术语“跳跃连接”,就是指

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

跳过一层或者好几层,从而将信息传递到神经网络的更深层。

ResNet的发明者是何恺明Kaiming He)、张翔宇Xiangyu Zhang)、任少卿Shaoqing Ren)和孙剑Jiangxi Sun),他们发现使用残差块能够训练更深的神经网络。所以构建一个ResNet网络就是通过将很多这样的残差块堆积在一起,形成一个很深神经网络,我们来看看这个网络。

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

这并不是一个残差网络,而是一个普通网络(Plain network),这个术语来自ResNet论文。

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

把它变成ResNet的方法是加上所有跳跃连接,每两层增加一个捷径,构成一个残差块。如图所示,5个残差块连接在一起构成一个残差网络。

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的加深,训练错误会越来越多。

但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。有人甚至在1000多层的神经网络中做过实验,尽管目前我还没有看到太多实际应用。但是对

深度学习笔记(七)--ResNet(残差网络)
深度学习笔记(七)--ResNet(残差网络)

的激活,或者这些中间的激活能够到达网络的更深层。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。

微信公众号:任冬学编程 tx工作的后端开发仔,分享后端技术、机器学习、数据结构与算法、计算机基础、程序员面试等话题。欢迎关注。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148983.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容来自吴恩达老师视频,网易云课堂有哦
  • ResNets
相关产品与服务
云课堂
云课堂聚焦教培机构 OMO 转型,为机构提供在线及混合式课堂解决方案,极速开课、多向互动、智能沉淀、一键分发,是教培课堂便捷、稳定的教学助手。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档