随着大数据时代的到来,数据规模日益增加,这使得我们有可能训练更大容量的模型,不断地提升模型的表示能力和精度。深度神经网络的层数决定了模型的容量,然而随着神经网络层数的加深,优化函数越来越陷入局部最优解。同时,随着网络层数的增加,梯度消失的问题更加严重,这是因为梯度在反向传播时会逐渐衰减。
为了改善这一问 题,深度学习领域的研究员们在过去十几年间尝试了许多方法,包括改进训练算 法、利用正则化、设计特殊的网络结构等。其中,深度残差网络(Deep Residual Network,ResNet)是一种非常有效的网络结构改进,极大地提高了可以有效训练 的深度神经网络层数。如今,我们可以利用深度残差网络训练一个拥有成百上千网络层的模型。
ResNet的提出背景和核心理论是什么?
ResNet的提出背景是解决或缓解深层的神经网络训练中的梯度消失问题。假设有一个
层的深度神经网络,如果我们在上面加入一层,直观来讲得到的
层 深度神经网络的效果应该至少不会比L层的差。因为我们简单地设最后一层为前一层的拷贝(用一个恒等映射即可实现),并且其他层维持原来的参数即可。然而在进行反向传播时,我们很难找到这种形式的解。实际上,通过实验发现,层数更深的神经网络反而会具有更大的训练误差。在CIFAR-10数据集上的一个结果如下图所示,56层的网络反而比20层的网络训练误差更大,这很大程度上归结于深度神经网络的梯度消失问题。
为了解释梯度消失问题是如何产生的。回顾第3节推导出的误差传播公式:
下式是前向传播的公式:
将上式展开一层:
可以看到误差传播可以写成
、
以及导数
、
连乘的形式。当误差由第L层传播到除了输入以外的第一个隐含层的时候,会涉及非常多的参数和导数的连乘,这时误差很容易产生消失或者膨胀,影响该层参数的正确的学习。因此深度神经网络的拟合和泛化能力较差,有时甚至不如浅层的神经网络模型精度更高。
ResNet调整了网络结构。首先考虑两层神经网络的简单叠加,这时,输入
经过两个网络层的变换得到
,激活函数采用ReLU。反向传播时,梯度将涉及两层参数的交叉相乘,可能会在离输入近的网络层中产生梯度消失的现象。
ResNet把网络结构调整为:既然离输入近的神经网络层较难训练,那么我们可以将它短接到更靠近输入的层。输入
经过两个神经网络的变换得到
,同时也短接到两层之后,最后这个包含两 层的神经网络模块输出
。这样一来,
被设计为只需要拟合输入
与
目标输出 的残差 ,残差网络的名称也因此而来。如果某一层的输出已经较好的拟合了期望结果,那么多加入一层不会使得模型变得更差,因为该层的输出将直接被短接到两层之后,相当于直接学习了一个恒等映射,而跳过的两层只需要拟合上层输出和目标之间的残差即可。