【 深度学习----论文解读 】Resnet

背景

提出假设:网络只要加深就能得到优化吗?
发现问题:随着网络的加深,会出现退化问题,精度随着网络的加深不再提高甚至反而降低。随着网络的加深,训练集上loss也在不断增大,说明这种退化不完全是由于过拟合引起的。

bottleneck为什么有用

在这里插入图片描述

  • 根据上图,copy一个浅层网络的输出加给深层的输出,这样当网络特征达到optimal的时候更深层恒等映射的任务就从原来堆叠的层中释放到新建的这个恒等映射关系中,而原来层中的任务就从恒等映射转为全0。
  • F(x)=H(x)−x,x为浅层的输出,H(x)为深层的输出,F(x)为夹在二者中间的的两层代表的变换,当浅层的x代表的特征已经足够成熟,如果任何对于特征x的改变都会让loss变大的话,F(x)会自动趋向于学习成为0,x则从恒等映射的路径继续传递。这样就在不增加计算成本的情况下实现了一开始的目的:在前向过程中,当浅层的输出已经足够成熟(optimal),让深层网络后面的层能够实现恒等映射的作用

那么从另一个角度看,在反向传播中,residual模块会起到什么样的作用呢?

  • residual模块将输出分成F(x)+x两部分,其中F依然是x的函数,也就是说F实际上是对于x的补充,是对于x的fun-tuning,这样就把任务从根据x映射成一个新的y转为了根据x求x和y之间的差距,这明显是一个相对更加简单的任务,论文是这么写的,到底怎么简单的,我们来分析一下。
  • 举个例子,假设不加residual模块的输出为h(x)。x=10,h(x)=11,h简化为线性运算Wh,Wh明显为1.1,加了redidual模块后,F(x)=1,H(x)=F(x)+x=11,F也简化为线性运算,对应的WF,WF为0.1。当标签中的真实值为12,反向传播的损失为1,而对于F中的参数和h中参数回传的损失实际上是一样大的而且梯度都是x的值,但是对于F的参数就从0.1到1.1扩大了十倍多,而h的参数是从1.1到2.1扩大不到2倍,因此redidual模块会明显减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力,虽然根本上没有解决回传的损失小得问题,但是却让参数减小,相对而言增加了回传损失的效果,也产生了一定的正则化作用。
  • 其次,因为前向过程中有恒等映射的支路存在,因此在反向传播过程中梯度的传导也多了更简便的路径,仅仅经过一个relu就可以把梯度传达给上一个模块。
  • 所谓反向传播就是网络输出一个值,然后与真实值做比较的到一个误差损失,同时将这个损失做差改变参数,返回的损失大小取决于原来的损失和梯度,既然目的是为了改变参数,而问题是改变参数的力度过小,则可以减小参数的值,使损失对参数改变的力度相对更大。
  • 因此残差模块最重要的作用就是改变了前向和后向信息传递的方式从而很大程度上促进了网络的优化。

在resnet-34中使用的是第一种结构,在resnet-50中,使用的是第二种结构。
在这里插入图片描述
在这里插入图片描述

参考资料

看了这位大佬的博客豁然开朗:https://blog.csdn.net/weixin_43624538/article/details/85049699

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值