机器学习基本知识——Resnet、残差结构、迁移学习
参考内容来自b站up主:https://space.bilibili.com/18161609
ResNet在2015年由微软实验室提出,获得ImageNet竞赛中多个项目的第一名。其网络中的特点有以下三点:
ResNet34层模型图如下图所示
传统的卷积神经网络使用的方法是将卷积层与池化层进行堆叠搭建网络结构,一般我们会觉得网络越深,特征信息越丰富,模型效果应该越好。但这样做会有两个缺点,一是梯度消失或梯度爆炸,二是退化问题。如下图所示,56层的网络结构其效果还不如20层的。
所谓的梯度消失或梯度爆炸,指的是:
若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0。
反之,若每一层的误差梯度大于1,反向传播时,网路越深,梯度越来越大。
而退化问题,是在解决了梯度消失或者梯度爆炸问题后,仍然存在深层网络效果不如浅层网络的现象。
为此,作者为了解决这两个问题,提出了BN层与残差结构两个解决办法。
上图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果变的越来越好了。(虚线是train error,实线是test error)。
上面的结构中,通过捷径连接,直接将上层特征图 x 作为部分输出的初始结果,输出结果为 H(x) = F(x)+x,当 F(x)=0 时,即变为恒等映射。因此,这样的结构相当于学习 H(x)-x 部分,即为残差,后面的层次就是为了将残差结果逼近与 0,使得模型深度加深的同时,模型效果也越好,在 ResNet 模型中使用的残差结构如下图。
上图中左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck。左图应用较浅的 34 层模型,右图主要应用于较深的 50、101 和 152 层模型。(在 3×3 的卷积核前后应用 1×1 的卷积核进行降维和升维操作,实现降低参数量目的,进而加快模型的训练速度。)
假设两个残差结构的输入特征和输出特征矩阵的深度都是256维,如下图:(注意左侧结构的改动)
两个残差结构所需要的参数分别为
- 左侧:3×3×256×256+3×3×256×256=1,179,648
- 右侧:1×1×256×64+3×3×64×64+1×1×64×256=69,632
注:CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度
对于一些残差结构的第一层,我们发现其表现的是虚线的形式,这些虚线的 short cut 上通过1×1的卷积核进行了维度处理(特征矩阵在长宽方向降采样,深度方向调整成下一层残差结构所需要的channel)。
原文的表注中已说明,conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层残差结构都是虚线残差结构。因为这一系列残差结构的第一层都有调整输入特征矩阵shape的使命(将特征矩阵的高和宽缩减为原来的一半,将深度channel调整成下一层残差结构所需要的channel)。
需要注意的是
对于ResNet50/101/152,其实conv2_x所对应的一系列残差结构的第一层也是虚线残差结构。
因为它需要调整输入特征矩阵的channel,根据表格可知通过3x3的max pool之后输出的特征矩阵shape应该是[56, 56, 64],但conv2_x所对应的一系列残差结构中的实线残差结构它们期望的输入特征矩阵shape是[56, 56, 256](因为这样才能保证输入输出特征矩阵shape相同,才能将捷径分支的输出与主分支的输出进行相加)。
所以第一层残差结构需要将shape从[56, 56, 64] --> [56, 56, 256]。
注意,这里只调整channel维度,高和宽不变(而conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层虚线残差结构不仅要调整channel还要将高和宽缩减为原来的一半)。
Normalization是数据标准化(归一化,规范化),Batch 可以理解为批量,加起来就是批量标准化。
Batch Normalization的目的是使我们的一批feature map 满足均值为0,方差为1的分布规律。
先说Batch是怎么确定的。在CNN中,Batch就是训练网络所设定的图片数量batch_size。
Normalization过程,引用论文中的解释:
卷积神经网络CNN—— BN(Batch Normalization) 原理与使用过程详解
输入:输入数据x1…xm(这些数据是准备进入激活函数的数据)
计算过程中可以看到,
1.求数据均值;
2.求数据方差;
3.数据进行标准化
4.训练参数γ,β
5.输出y通过γ与β的线性变换得到新的值
在正向传播的时候,通过可学习的γ与β参数求出新的分布值
在反向传播的时候,通过链式求导方式,求出γ与β以及相关权值
可参考Batch Normalization详解
使用迁移学习的优势:
注意,当使用别人预训练模型的参数时,要注意别人的预处理方式。
在迁移学习中,我们可以利用一个训练好的图像分类网络,将其用于另一个图像相关的任务。
如下图所示,神经网络逐层提取图像的深层信息,这样,预训练网络就相当于一个特征提取器。
常见的迁移学习方式主要有三种