《Deep Residual Learning for Image Recongition》:用于图像分类的深度残差学习。
ResNet(残差网络)是在2015年由微软研究院的Kaiming He等人提出的,旨在解决深度神经网络训练过程中的梯度消失、梯度爆炸问题,并允许网络构建得更深,以提高准确性。
现存问题:
1、非常深的神经网络难以训练,会存在梯度爆炸和梯度消失等情况,之前的解决方式是(1)选择合理的参数初始化方式,避免初始值过大或过小;(2)在中间层加入normalization,对参数进行标准化,如BN等。
2、网络较深后性能会变差,训练和测试精度都会变差,但这并不是由于过拟合(训练误差下降,测试误差上升)。
3、层数变多时精度变差:理论上来说,如果浅层网络学习到一个比较好的结果,那么增加深度后效果不会变差,因为增加的层会学习一个恒等映射(Identity Mapping)。但在实际中,优化器(SGD)无法实现这样的效果。
解决方案:残差学习
显式地增加一个恒等映射分支(Residual Connection)。设当前浅层网络的输出是x,学习目标是H(x),则令新加入的层学习一个残差F(x) = H(x) - x,此时整个网络的输出就可以表示为F(x) + x,而网络的优化目标就 = F(x) = H(x) - x,即层学习输入与输出之间的差异。这意味着,如果一个输入需要通过网络传递到深层,网络可以通过恒等映射轻易实现这一点,通过层的权重接近于零来学习这一恒等映射。
为什么这么做?
1、不会增加任何需要学习的参数与网络复杂度;
2、此时增加网络深度就可以提升精度。
- 增加残差连接前的梯度:
- 增加残差连接后的梯度:
ResNet50的结构:
ResNet50是一种深度残差网络,它包含了50层深的卷积神经网络。ResNet的核心创新在于它使用了快捷连接或跳过连接,允许网络的激活跳过一个或多个层。在ResNet50中,这些连接帮助激活绕过两层卷积层直接连接到第三层,这是所谓的残差块的基础。
ResNet50的网络结构大致可以分为五个主要部分,加上输入和输出层。在初始层,它使用一个7x7的卷积核和步幅为2的卷积操作,后面接最大池化层以降低特征图的空间尺寸。接下来的四个部分由3个,4个,6个和3个残差块组成,每个部分在结束时通过步幅为2的卷积减少特征图的大小。每个残差块内有三层卷积,分别使用1x1,3x3和1x1的卷积核,其中1x1卷积层主要用于降低和恢复维度,从而减少模型参数和计算量。
在网络的末端,使用全局平均池化层代替了传统的全连接层来减少参数和模型的复杂度。最后,它通过一个全连接层和softmax激活函数来输出最终的分类结果。
ResNet50的设计极大地减少了深层网络训练的难度,因为快捷连接帮助梯度直接流过整个网络,使得即便是很深的网络也可以用标准的随机梯度下降方法有效地训练。
残差块结构:
每个残差块内的三个卷积层分别有不同的滤波器数量和大小(1x1,3x3,1x1)。1x1的卷积层用于降维和升维,从而减少计算量。
其他防止过拟合的方法:
1、early stop(提前停止):在模型开始过度拟合训练数据时停止训练,找到欠拟合和过拟合之间的“合适点”很重要。
2、Dropout:训练时随机丢弃隐藏层的神经元,使被丢弃的神经元输出为0,不再进行信号传递。
使用Dropout可以减少神经元之间复杂的共适应性。当隐藏层神经元被随机删除之后,使得全连接网络具有了一定的稀疏性,从而有效地减轻了不同特征的协同效应。也就是说,有些特征可能会依赖于固定关系的隐含节点的共同作用,而通过Dropout的话,就有效地组织了某些特征在其他特征存在下才有效果的情况,增加了神经网络的鲁棒性。
3、正则化:在损失函数中增加正则项以作为惩罚,通过在学习过程中对大的权重进行惩罚,来抑制过拟合。
神经网络的学习目的是减小损失函数的值。如果为损失函数加上权值的平方范数(L2范数),就可以抑制权重变得过大。用符号表示的话,如果将权重记为W,L2范数的权值衰减就是,然后加到损失函数上。
是控制正则化强度的超参数。
设置得越大,对大的权重施加的惩罚就越严重,就会使W变小。一个直观地理解就是令W接近于0,从而消除这些隐藏神经元的影响,使网络变得简洁。两种常用的正则化技术是 L1 正则化和 L2 正则化。
另一种理解是,当迫使w变小时,输出z也会是一个很小的值,此时模型便会趋于拟合一个线性函数。
4、交叉验证
5、增加训练数据:提升模型的泛化性。
6、特征选择:在构建模型时有许多用于预测结果的特征,而这些特征有些是不必要的,因此可以识别出训练数据中重要的特征,移除其他不重要的特征。此过程有助于简化模型并减少数据中的噪声。