更深的神经网络更加难以训练,残差网络主要用来减轻训练的网络,这些网络比之前使用的网络都要深得多
在ImageNet的的数据集中网络层数达到了152层,前一年夺冠的VGG只有19层。在COCO物体检测数据集上获得了28%的相对改进
在以往的知识中,深度学习层数越深,提取的特征越多。如下图所示,并非网络层数越多越好。
引起这部分的原因,这种现象主要是退化:随着网络层数的加深,准确性会达到饱和,梯度传播过程中会逐渐消失,导致无法对前面的网络层权重进行调整,训练误差加大,结果也随之变差。(并非过拟合,如果过拟合,训练的时候误差很小,但是测试的时候误差就很大)
此处也不是梯度消失(本身就没有学习,更新的比较慢,不会收敛)
但此处的训练数据error有在下降,而且趋近收敛
梯度的消失或者爆炸可以通过 适当的权重初始化 + BN
来加快网络收敛
为了解决上面提到的退化,引入一个深度残差网络
(理论上深层次网络和浅层的网络性能一样,但现实卷积层层数越到后面会出现退化)
明白退化的原因以及如何改进,整体训练过程中随着层数的加深出现梯度消失,为了防止梯度消失,在某些卷积层中已经是最优解了,本身没有必要在训练(可将其丢弃),即F(x)= 0,输出的结果就是H(x)=x
,让其作为恒等映射。
整体的网络架构如下:
使用两层卷积加relu激活函数,经过第一层的时候输出F(x),之后在经过第二层(此处增加了shortcut connection),将其shortcut connection连接到第二层的激活函数之前,输出结果变为H(x)=F(x)+x
(恒等映射)
如图所示:(shortcut connection)
大致参数如下:
参数 | 描述 |
---|---|
x | 输入 |
F(x) | 残差 |
identity | 恒等映射 |
在最后一层 weight layer后不使用激活函数,将与短路连接后的恒等映射,两者求和在使用Relu激活函数
(残差网络 + 恒等映射 ,求和后使用激活函数)
之所以这样设计,因为越到后面的层次可能学习的特征已经很少了。输入x值,学习到的特征标记为H(x),残差网络F(x)为H(x)−x
,则对应输出的结果H(x)为F(x)+x
。即使残差网络F(x)为0,此处也只是恒等映射(网络性能也没有之前的增加层数而下降)
过去是拟合H(x)= x
,现在拟合残差 F(x) = H(x) - x
,不用关注太底层的细节
现在的网络主要是拟合F(x),两层网络主要是优化F(x)
所谓的残差:
也就是真实值和预测值的偏差,类似数据的回归
此论文使用了两种残差网络结构,左边为浅层网络使用,右边为深层网络使用
本身恒等映射既不会引入额外的参数量以及额外的计算量(相加可忽略不计)
具体残差的数学公式 如下:(x自身输入 + 残差)
整体的残差就是 先用一层网络激活,再用一层网络不激活。偏置项此处忽略了(如果卷积层加上BN就不需要加偏置项)
F与X的相加本身就是逐通道相加。求和之后在激活一次
如果本身相加的时候不是线性的(下采样的时候才需要这样做),本身加多一个参数,则公式变为:
残差网络与恒等映射维度不一致,如何相加,论文中提出了几种方案:
下采样的使用,多出来的通道(indentity)使用0填充
下采样的时候,将其indentity用 1* 1的卷积调整和残差一样的模块
不管下采样还是在卷积的时候,全部都用1 * 1的卷积
最后的方案是,对indentity不做任何的处理是最好的
整体的结果可参考如下:(加深的残差网络 都达到了最佳的性能)
总体的网络架构如下:
VGG19的架构:
34层的普通网络架构如下,中间的架构是加了深度:(类似递归的网络进行优化)
34层的残差网络架构如下:(整体的网络结构是在VGG19基础上,加入了残差网络)
以上三种架构,主要讲解下带残差的架构
此处不同维度的相加,论文提出了两种方法:
图像分别随机被压缩到256到480之间,之后做图像增强
实验结果具体如下,18层的普通网络和残差网络准确度对比:
结合上面这两张图,可看出没有残差网络会造成退化(随着深度的加深),并不是梯度消失和梯度爆炸导致,本身普通的网络也使用了BN,确保了网络中前向传播有个非零的方差以及反向传播的梯度是正常的
即使用更多的批次也无法解决退化问题。这是因为“ 数据本身决定了该类问题的上限,而模型只是逼近这个上限 ”
通过两幅图也可看出,对照实验,只有残差不一样,但是34层的errror更少了,下采样的时候使用了A方案(也就是多出来的通道补0),没有引入更多的计算量
从上面的实验证明了残差网络可以用来搭建非常深的网络,带残差的网络收敛比较快(通过曲线图,可看出一开始的斜率降的比较快)
当网络为18层的时候,SGD可以找到普通网络良好的解决方案,而ResNet在早期阶段中提供了更快的收敛来缓解优化(parameter-free, identity shortcuts可以更好的解决训练)
后续的论文结果中探讨了 下采样 使用恒等映射还是其他的投影处理
B比A好,因为A在升维的时候用padding补零,丢失了shortcut学习,没有进行残差学习
C比B好,因为C的13个非下采样残差模块的shortcut都有参数,模型能力比较强
但是ABC都差不多,说明恒等映射的shortcut可以解决退化问题
后续使用了深度Bottleneck网络架构(考虑时间成本),输入输出都是高维,中间的处理过程为低维
深层次的网络主要用这个架构,主要用于减少计算量和参数量
1 * 1的卷积可用于降维和升维
无参数的恒等映射对于这个架构是十分重要的,本身shortcut如果引入projection,计算量还有参数量都会翻倍
深层次的残差网络:
50层的残差网络:将其34层的残差网络的2个卷积层替换成了3个bottleneck残差块,就变成了50层残差网络,下采样使用的是1 * 1 的卷积
101层残差网络,152层残差网络,数字都是带权重的残差网络。而且152的残差网络比VGG16/19的网络都要低。而且网络加深有用,没有出现退化的现象。
在CIFAR-10 数据集中(32 * 32 * 3,更小的数据集),50w的训练集,10w的测试集,一共10个类别。训练集上训练,测试机上评估
为了对比普通网络和残差网络
残差是由2层神经网络(每一个shortcut都由3 * 3的卷积组成)来拟合的,总共有6n,所以一共有3n的shortcut。
下采样是由0补充(下采样的残差和不带残差的计算量是一样的)
训练过程中的正则化为0.0001 ,动量化为0.9 ,论文中提出的权重进行初始化,使用了BN没有使用dropout,批次处理为128,起始的学习率为0.1,在3.2w和4.8w迭代时除以10,最终在6.4w终止训练
把训练集划分为4.5w训练和5k的验证,使用图像增强方法,分别在图像外边补4个pixel,再用32 *32 的图像进行剪裁(水平翻转的图像增强)。测试的时候,直接使用32 * 32的图像进行测试即可
当n设置为18的时候,就是110层(6 * 18 + 2)的卷及网络,训练这个网络的时候,初始值为0.1(0.1的收敛太大),所以一开始使用0.01去预热,使得训练误差降到80%(大概在400个迭代次数),再回到0.1进行训练。110层收敛很好。
上面这部分内容主要扯到 两阶段学习:
分析每一层的网络的响应分布(残差网络是在修正输入)
响应的标准差:(std为标准差,standard)
图二只是将图一进行了排序
BN处理,均值已被调整为0。标准差衡量数据的离散程度(标准差越大,表明响应越大)
响应是每一层都是3 * 3的卷积层,介于BN后和激活之前
通过上图也可看出
超深层网络:
取n等于200 ,也就是1202的残差卷积网络(6 * 200 + 2),和之前的训练方式一样,误差小于0.1,表明了没有退化,没优化困难
但测试集的性能没有110层的好,文中表明这是过拟合了(模型太深参数过多,对于这个小数据集没有必要)
此论文没有使用maxout或者是dropout来正则化,因为核心任务是为了解决退化问题
应用的性能提升
主要用于Faster R-CNN的骨干网络,用于分类模型初始化,之后在目标检测模型下微调
不像VGG-16,没有全连接层,主要通过这篇论文的想法Networks on Conv feature maps
全图用卷积层获取一个共享的feature maps(代表原图小于16的pixels),ResNet代表conv1, conv2_x, conv3_x, and conv4_x,将这几个层类别为VGG-16的前13个层
通过这样得到的ResNet就和VGG-16的得到的feature map 比较像(都代表原图16的像素),再用RPN对共享特征进行处理,得到300候选框,再用Faster R-CNN进行目标检测。在conv5_1之前进行了RoI 池化(不同输入大小变为同样大小的维度)
之后conv5模块以及所有层对候选框进行目标检测,有VGG-16全连接层的作用
在预训练的时候,BN已经计算好了均值和方差。训练的时候就用预训练的值,主要是为了减少内存的消耗(减去均值除以反差,变成了一个线性结果)
MS COCO:
先提取候选框(两阶段)
预测框精调。回归框又提取了新的特征,新的特征可得到新的分类和新的回归框,前后两个回归框进行非极大值抑制(NMS),NMS取0.1
Global context(全图上下文),全局金字塔池化,全图特征做了pooling,之后做了全图上下文特征,再用两头网络(分类头,回归头,端对端训练)
多尺度训练。maxout(带学习参数的激活函数,上一层输出作为下一层输入,选用最大的输出),选取两个相邻尺度,不同尺度缩放为同样大小尺度,之后用maxout进行处理
多模型集成。Faster R-CNN(两阶段:RPN选取候选框,对候选框逐一分类回归),每阶段的多模型集成都并集送到集成的分类器进行回归和分类
PASCAL VOC:(跟上面的数据集处理方法大同小异)
图像中的类别分类出来,并且将其框定位出来(反应算法的分类和回归),定位只有一个框一个类别。定位的框只是针对类别
在这篇论文中采用了“per-class regression” (PCR)
(每个类别输出一个定位框),每个定位框有4个参数。先在训练集上预训练数据集,之后在从测试集上微调这个网络
定位算法包括两种:
ResNet和RPN比较相像
RPN是由Faster RCNN用于提取候选框的网络,ResNet此处用于输出每个类别的定位结果
RPN的网络包含两个并列头(一头为 1 * 1的卷积输出1000个二分类结果,另外一头输出每个类别的定位框),每一个分类是用的二分类逻辑回归(交叉熵训练的逻辑回归)
1000个类别,每个类别的概率都是0到1,和真实的标签概率做逻辑回归
回归层要输出1000个类别,每个类别的4个边界框的位置参数,也就是1000 * 4 - d(图像中出现不同位置的物体,都可被先验框锁中。不同物体的框比如矮胖,高瘦等)
具体交叉熵逻辑回归可看如下:二元交叉熵的基本概念
224 * 224的图片进行图像增强,再用256张照片进行微调,为了防止随机裁的时候裁不到物体。8个anchor在每张图片进行随机裁剪。正负样本的比例大致为1:1,用多尺度金字塔提取特征。