我们作这样一个假设:假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即 y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不应该带来训练集上误差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,便是著名深度残差网络 ResNet 的灵感来源。
残差网络借鉴了高速网络(Highway Network)的跨层链接思想,但对其进行改进(残差项原本是带权值的,但ResNet用恒等映射代替之)。
假定某段神经网络的输入是x,期望输出是H(x),即H(x)是期望的复杂潜在映射,如果是要学习这样的模型,则训练难度会比较大;回想前面的假设,如果已经学习到较饱和的准确率(或者当发现下层的误差变大时),那么接下来的学习目标就转变为恒等映射的学习,也就是使输入x近似于输出H(x),以保持在后面的层次中不会造成精度下降。
在上图的残差网络结构图中,通过“shortcut connections(捷径连接)”的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。于是,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不下降。
【1】就是说我们一开始是希望:输入x,输出H(x);但是我们知道,当H(x)过于复杂时,这样的模型训练难度很大,直接训练不现实;
【2】这时候如果我们继续恒等映射学习,就是说接下来的几层我们学的是一个恒等映射,那么显然就是x=H(x);从误差角度来说,虽然层数变多了几层,但是由于这是个恒等映射,因此误差即使不降低,最起码也是不会增加的;
【3】残差网络采用的上图中的shortcut connection实际上就是这样一种操作,他把x直接传到了输出,这样这个输出H(x)就不再是x的恒等映射了,因为H(x)=F(x)+x,而不是H(x)=x。
【4】我们说,输出H(x)的表示已经变了,而我们此时的目的是训练加入的这几层,这几层对于输入x来说,会得到一个输出F(x),从H(x)的表达式可以得出:F(x)=H(x)-x,也就是说,F(x)的学习目标就是使得H(x)尽可能贴近x,那么从另一个角度来说,F(x)在做的就是尽可能拟合H(x)和x的残差,就是 F(x) -> 0,残差当然是不会等于0的,F(x)因此也就只能趋近于0,这样的训练目标就会使得F(x)获得x的合理表示,实现层数的累加。