目录:
论文阅读
代码解析
小结
论文阅读
论文地址:Deep Residual Learning for Image Recognition
1.介绍
最近研究表明,增加网络的深度是至关重要的。于是增加网络的深度成了大家努力的方向,但是是否堆叠更多的层就一定能够训练出更好的结果呢?事实上并不一定,我们遇到的阻碍之一就是梯度消失和梯度爆炸。如果遇到了梯度消失和梯度爆炸,网络会很难收敛。不过使用normalization可以解决这个问题。但是新的问题来了,实验发现如果训练很深的网络,准确率会在陷入饱和后陡然下降,而这个准确率下降不是由过拟合引起的。并且给一个深度合适的网络增加更多的层也会导致更高的训练误差。这就是深度网络在训练中的退化问题,但是网络越深确实能够带来更多的表达力,每一层网络的学习调整可以适应更多的场景,所以我们还是要追求更深的网络结构。
于是作者提出一种深度残差框架来解决上面提到的退化问题,使用了一种shortcut connection的连接方式。
上图就是残差网络的基本组成单元,叫做Residual block。
A2=relu(A0+Z2)就是residual block的计算方式。
论文中提到这种连接方式既没有增加参数,也没有增加计算量,但是我觉得计算量还是有少量的增加,在A0+Z2处,不过相比卷积运算确实可以忽略不计。这个网络依然可以使用SGD进行端到端的训练。作者在ImageNet上进行了系统的实验,实验显示
- 使用残差网络,网络很深的时候也容易优化。如果普通堆叠的网络在网络深度增加的时候,错误率会增加。
- 我们的残差网络能够从网络深度的增加带来可观的准确率的提升,比以往的网络有更高的准确率。
作者已经成功训练出了超过100层的网络,也对超过1000层的网络做出了探索。并且残差网络在其他识别任务上也有不错的效果,说明残差学习原则是通用的。
梯度消失和梯度爆炸
比如一个三层的神经网络,如果简化忽略b,则,对求导通过链式法则可以表示为
其中,和