第二周学习任务:卷积神经网络

459 阅读7分钟

一、卷积神经网络

1.从全连接层到卷积神经网络

1.1 卷积神经网络相比全连接层的两个显著特征

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

可以考虑将全连接层的输入和输出拓展为矩阵,此时权重 W 变为 4D 张量

截屏2022-03-07 下午8.23.04.png

其中:h𝑖,𝑗 表示隐藏表示中位置(i, j)处的像素。重新索引下标(k, l),使k=i+a、l=i+b,由此可得 𝖵𝑖,𝑗,𝑎,𝑏=𝖶𝑖,𝑗,𝑖+𝑎,𝑗+𝑏

1.2 二维交叉相关(卷积)运算

1.2.1 考虑平移不变性

截屏2022-03-07 下午8.32.30.png

1.2.2 考虑局部性

截屏2022-03-07 下午8.39.57.png

综上,对全连接层使用平移不变性和局部性,得到卷积层

2.卷积、填充、步幅

2.1 卷积层

  • 将输入和核矩阵进行交叉相关运算,加上偏移后得到输出
  • 在模型训练过程中,可以通过数据学习卷积核
  • 可以设计卷积核,用于检测图像中物体的边缘

2.1.1 可学习的参数

  • 核矩阵
  • 偏移

2.1.2 超参数

  • 核矩阵大小:可以控制局部性
  • 填充:用于控制输出形状的减少量
  • 步幅:可以成倍减少输出的形状
  • 输出通道数:可以识别图像特定的模式

截屏2022-03-07 下午8.45.17.png

截屏2022-03-07 下午8.56.36.png

截屏2022-03-07 下午8.46.32.png

2.2 填充和步幅

截屏2022-03-07 下午8.53.54.png

截屏2022-03-07 下午9.31.00.png

截屏2022-03-07 下午8.54.08.png

截屏2022-03-07 下午9.31.39.png

3.多输入 / 多输出通道

彩色图像一般有三个输入通道:R、G、B

3.1 多输入通道

  • 每个输入通道都有一个独立的 二维 卷积核
  • 输入通道核识别并组合输入中的模式
  • 二维交叉相关运算是所有对通道分别进行卷积操作的和(可理解为对多输入通道进行融合):

截屏2022-03-07 下午9.45.48.png

截屏2022-03-07 下午9.46.21.png

3.2 多输出通道

  • 每个输出通道有独立的 三维 卷积核
  • 每个输出通道可以识别特定模式
  • 输出通道数是卷积层的超参数

截屏2022-03-07 下午9.47.00.png

截屏2022-03-07 下午9.55.57.png

3.3 1×1 卷积层

  • 将通道维作为特征维,将高和宽上的元素当作数据样本,则与全连接层等价(当以每像素为基础应用时,1×1 卷积层相当于全连接层)
  • 1×1 卷积层通常用于调整网络层的通道数量和控制模型复杂性

截屏2022-03-07 下午9.50.52.png

4 池化(汇聚)层

  • 超参数:窗口大小、填充、步幅
  • 池化层没有可以学习的参数
  • 在每个输入通道分别应用池化层,获得对应的输出通道
  • 池化层不改变通道数:输入通道数 = 输出通道数
  • 池化层返回窗口中的最大值/平均值
  • 池化层用于缓解卷积层对位置的过度敏感性

截屏2022-03-07 下午10.08.42.png

二、经典 CNN

1.LeNet

LeNet 是最早发布的卷积神经网络之一,最早用于手写数字识别。 LeNet 先使用卷积层学习图片空间信息,再使用全连接层转换到类别空间。

1.1 LeNet 架构

  • LeNet 交替使用卷积层和平均池化层后,使用全连接层进行图像分类。
  • 激活函数使用 Sigmoid 激活函数

../_images/lenet.svg

../_images/lenet-vert.svg

2.AlexNet

深度卷积神经网络 AlexNet 2012年赢得了 ImageNet 竞赛,使用了更多的卷积层和更大的参数空间,从而拟合大规模的数据集

2.1 AlexNet 特征

相比 LeNet,AlexNet 具有以下特征:

  • 使用了 ReLu激活函数,缓解梯度消失,同时可以更好地训练模型
  • 使用了丢弃法,全连接层后加入了丢弃层,控制全连接层的模型复杂度
  • 将平均池化层替换为最大池化层
  • 使用了图像增广(翻转、裁剪和颜色处理),进一步扩大数据集,从而缓解过拟合

截屏2022-03-08 下午4.13.20.png

2.2 AlexNet 架构

从 LeNet 到 AlexNet

  • 增加了3层卷积层
  • 使用了更大的池化窗口拟合大规模的ImageNet数据集
  • 使用最大池化层
  • 采用更大的卷积窗口和步长,因此输入的图片更大
  • 使用更多的输出通道数 ../_images/alexnet.svg

3.VGG

使用重复元素的网络 VGG

3.1 VGG 块

  • 多个相同的填充为1、窗口形状为3×3的卷积层,后面接一个步幅为2、窗口形状为2x2的最大池化层
  • 实验表明深层且窄的卷积(即3×33×3)比较浅层且宽的卷积更有效。

3.2 VGG 块的超参数

卷积层个数(n)和输出通道数(m)

3.3 VGG 架构

多个 VGG 块后接全连接层,不同卷积块个数和超参数可以得到多种不同的 VGG:VGG-11、VGG-16、VGG-19

../_images/vgg.svg

4.NiN

网络中的网络 NiN

4.1 NiN 块

  • 从卷积层开始,后面是两个1×1的卷积层(步幅为1,无填充,起到全连接层的作用)
  • 这两个1×1卷积层充当带有ReLU激活函数的逐像素全连接层,对每个像素增加了非线性性

4.2 NiN 架构

  • 无全连接层
  • 交替使用NiN块和步幅为2的最大池化层,逐步减小高宽、增大通道数
  • 最后使用全局平均池化层得到输出,其输出通道数是类别数。使用全局平均池化层代替全连接层,这样不容易过拟合,同时有更少的参数个数

../_images/nin.svg

5.GoogLeNet

GoogLeNet 是含有并行结构的网络

5.1 Inception 块

在 GoogLeNet 中,基本的卷积块被称为Inception块,和基本的卷积层相比,Inception 块具有更少的参数个数和计算复杂度

Inception 由4条具有不同超参数的卷积层和池化层的并行路径来抽取不同的信息,主要优点是模型参数小,计算复杂度低

../_images/inception.svg

  • 前三条路径使用窗口大小为1×1、3×3和5×5的卷积层,从不同空间大小中提取信息
  • 中间的两条路径在输入上执行1×1卷积,以减少通道数,从而降低模型的复杂性
  • 第四条路径使用3×3最大汇聚层,然后使用1×1卷积层来改变通道数。

这四条路径都使用合适的填充来使输入与输出的高和宽一致,最后将每条线路的输出在通道维度上连结,并构成Inception块的输出。

在Inception块中,通常调整的超参数是每层输出通道数

截屏2022-03-08 下午4.51.57.png

5.2 GoogLeNet 架构

  • 共使用9个Inception块和全局平均汇聚层的堆叠来生成其估计值
  • Inception块之间的最大汇聚层可降低维度
  • 第一个模块类似于AlexNet和LeNet
  • Inception块的组合从VGG继承
  • 全局平均汇聚层避免了在最后使用全连接层

截屏2022-03-08 下午5.01.46.png

截屏2022-03-08 下午4.56.03.png

截屏2022-03-08 下午4.56.27.png

截屏2022-03-08 下午4.56.35.png

截屏2022-03-08 下午4.57.55.png

截屏2022-03-08 下午4.58.06.png

截屏2022-03-08 下午4.58.18.png

截屏2022-03-08 下午4.58.25.png

5.3 批量和归一化

  • 在模型训练过程中,批量规范化固定小批量中的均值和标准差,学习出合适的偏移和缩放,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定
  • 可以加速收敛速度,但是一般不改变模型精度
  • 批量规范化在全连接层和卷积层的使用略有不同
  • 批量规范化层和暂退层一样,在训练模式和预测模式下计算不同
  • 批量规范化有许多有益的副作用,主要是正则化

截屏2022-03-08 下午10.05.11.png

截屏2022-03-08 下午10.05.25.png

截屏2022-03-08 下午10.05.34.png

截屏2022-03-08 下午10.05.40.png

6.ResNet

只有当较复杂的函数类包含较小的函数类时,才能确保提高它们的性能。

对于深度神经网络,如果能将新添加的层训练成恒等映射(identity function)f(x)=x,新模型和原模型将同样有效。 同时,由于新模型可能得出更优的解来拟合训练数据集,因此添加层更容易降低训练误差。

6.1 残差块

截屏2022-03-08 下午10.15.03.png

../_images/resnet-block.svg

截屏2022-03-08 下午10.17.26.png

6.2 ResNet 块

截屏2022-03-08 下午10.18.32.png

6.3 ResNet 架构

  • 残差映射可以更容易地学习同一函数,例如将权重层中的参数近似为零
  • 利用残差块(residual blocks)可以训练出一个有效的深层神经网络:输入可以通过层间的残余连接更快地向前传播
  • 残差块是的很深的网络更加容易训练
  • 残差网络(ResNet)对随后的深层神经网络设计产生了深远影响

类似 VGG 和 GoogLeNet 总体架构,替换成了 ResNet 块:

../_images/resnet18.svg