摘要:
我们知道网络越深,运行模型是能够获取的信息和特征也就越多。但是根据实验表明,随着网络的加深,优化效果反而越差,测试数据和训练数据的准确率反而降低了。如下图所示:
这是由于网络的加深会造成梯度爆炸和梯度消失的问题。使用归一化方法,对输入数据和中间层进行归一化操作。但这种方法只能运用于几十层的网络,网络继续增加,这种方法也就不能用了。这种时候我们就需要用到残差网络Resnet(Deep Residual Learning for lmage Recognition)。
Resnet:
残差网络(Resnet):在进行运算的过程中,可以认为的让神经网络跳过下一层的神经元的连接,隔层相连,弱化每层之间的强联系。残差网络可以用来减轻深层网络中的梯度爆炸和梯度消失的问题。使用残差网络结构,在较高网络层次时,较高层次能保持比较低层次更低的错误率。
residual的计算方式:
使用让特征矩阵隔层相加的方式进行相加,结构如下图所示:
resnet中具体有两个不同的residual。分别是BasicBlock和Bottleneck两种结构。BasicBlock是二层结构的residual。Bottleneck是三层结构的residual。
以Resnet34为例子,可以发现有些残差块的short cut是实线表示的,而有些则是虚线表示。虚线表示short cut使用的1 1的卷积核,该方式是先用1 1的卷积核对特征矩阵进行降为操作,后由用1 * 1的卷积核对特征矩阵进行升维操作。如下图所示:
不同深度的网络结构配置:
如下图:其中的提供了5种深度的resnet的运行数据。
论文作者使用resnet模型跑了ImageNet数据集,结果证明使用resnet模型要确实能够降低34层网络的训练和测试的错误率。
论文作者还使用resnet模型跑了CIFAR-10数据集,结果再次证明resnet模型在其他数据集依然能有不错的效果。