Resnet V1论文阅读和代码解析

本文详细解析了Resnet V1论文,探讨了深度网络中的梯度消失和梯度爆炸问题,以及如何通过残差块解决这些问题。文章介绍了Resnet的基本结构,包括残差块的计算方式和网络设计,同时阐述了训练策略和实验结果,证明了Resnet在网络深度增加时仍能保持高准确率。
摘要由CSDN通过智能技术生成

目录:

论文阅读

代码解析

小结

 

论文阅读

论文地址:Deep Residual Learning for Image Recognition

1.介绍

最近研究表明,增加网络的深度是至关重要的。于是增加网络的深度成了大家努力的方向,但是是否堆叠更多的层就一定能够训练出更好的结果呢?事实上并不一定,我们遇到的阻碍之一就是梯度消失和梯度爆炸。如果遇到了梯度消失和梯度爆炸,网络会很难收敛。不过使用normalization可以解决这个问题。但是新的问题来了,实验发现如果训练很深的网络,准确率会在陷入饱和后陡然下降,而这个准确率下降不是由过拟合引起的。并且给一个深度合适的网络增加更多的层也会导致更高的训练误差。这就是深度网络在训练中的退化问题,但是网络越深确实能够带来更多的表达力,每一层网络的学习调整可以适应更多的场景,所以我们还是要追求更深的网络结构。

于是作者提出一种深度残差框架来解决上面提到的退化问题,使用了一种shortcut connection的连接方式。

上图就是残差网络的基本组成单元,叫做Residual block。

A2=relu(A0+Z2)就是residual block的计算方式。

论文中提到这种连接方式既没有增加参数,也没有增加计算量,但是我觉得计算量还是有少量的增加,在A0+Z2处,不过相比卷积运算确实可以忽略不计。这个网络依然可以使用SGD进行端到端的训练。作者在ImageNet上进行了系统的实验,实验显示

  1. 使用残差网络,网络很深的时候也容易优化。如果普通堆叠的网络在网络深度增加的时候,错误率会增加。
  2. 我们的残差网络能够从网络深度的增加带来可观的准确率的提升,比以往的网络有更高的准确率。

作者已经成功训练出了超过100层的网络,也对超过1000层的网络做出了探索。并且残差网络在其他识别任务上也有不错的效果,说明残差学习原则是通用的。


梯度消失和梯度爆炸

比如一个三层的神经网络,如果简化忽略b,则a_{i+1} = f(a_i * w_{i+1}),对w_1求导通过链式法则可以表示为

\frac{\partial Loss}{\partial w_1} = \frac{\partial Loss}{\partial a_3} * \frac{\partial a_3}{\partial a_2} * \frac{\partial a_2}{\partial a_1} * \frac{\partial a_1}{\partial w_1}        其中\frac{\partial a_1}{\partial w_1} = a_0 = x\frac{\partial a_3}{\partial a_2}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值