理解残差神经网络(Resnet)
目的
DNN在超过一定深度后,就会产生退化(degradation),在训练集和测试集的准确率都变低。一味地加深深度反而有不利的影响。很难找到一个合适的深度。如果可以给一个浅一些的神经网络加深,让可以继续学习的网络层正常工作,而那些多余的网络层只是在恒等映射,就可以解决这个问题。这就是残差神经网络的想法来源。
原理
残差神经网络的基本单元残差块如上图所示,它的目的是学习恒等映射。假如说这个神经网络的局部的输入x和真实输出已经一样了,那么这个局部就需要做恒等映射。然而恒等映射相比于0映射是更难的,所以通过shortcut给输出加一个x之后,只需要优化F(x)F(x)F(x)等于0即可。残差块有不同的工作目的:靠前一些的神经网络部分,他们会从零开始产生合理的输出;而靠后的,他们是在微调,让结果更接近。
如果F(x)F(x)F(x)和x的维度不一样,可以通过padding或乘一个映射矩阵来调整x的形状。