一、卷积神经网络
1.从全连接层到卷积神经网络
1.1 卷积神经网络相比全连接层的两个显著特征
- 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
- 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。
可以考虑将全连接层的输入和输出拓展为矩阵,此时权重 W 变为 4D 张量
其中:h𝑖,𝑗 表示隐藏表示中位置(i, j)处的像素。重新索引下标(k, l),使k=i+a、l=i+b,由此可得 𝖵𝑖,𝑗,𝑎,𝑏=𝖶𝑖,𝑗,𝑖+𝑎,𝑗+𝑏
1.2 二维交叉相关(卷积)运算
1.2.1 考虑平移不变性
1.2.2 考虑局部性
综上,对全连接层使用平移不变性和局部性,得到卷积层
2.卷积、填充、步幅
2.1 卷积层
- 将输入和核矩阵进行交叉相关运算,加上偏移后得到输出
- 在模型训练过程中,可以通过数据学习卷积核
- 可以设计卷积核,用于检测图像中物体的边缘
2.1.1 可学习的参数:
- 核矩阵
- 偏移
2.1.2 超参数:
- 核矩阵大小:可以控制局部性
- 填充:用于控制输出形状的减少量
- 步幅:可以成倍减少输出的形状
- 输出通道数:可以识别图像特定的模式
2.2 填充和步幅
3.多输入 / 多输出通道
彩色图像一般有三个输入通道:R、G、B
3.1 多输入通道
- 每个输入通道都有一个独立的 二维 卷积核
- 输入通道核识别并组合输入中的模式
- 二维交叉相关运算是所有对通道分别进行卷积操作的和(可理解为对多输入通道进行融合):
3.2 多输出通道
- 每个输出通道有独立的 三维 卷积核
- 每个输出通道可以识别特定模式
- 输出通道数是卷积层的超参数
3.3 1×1 卷积层
- 将通道维作为特征维,将高和宽上的元素当作数据样本,则与全连接层等价(当以每像素为基础应用时,1×1 卷积层相当于全连接层)
- 1×1 卷积层通常用于调整网络层的通道数量和控制模型复杂性
4 池化(汇聚)层
- 超参数:窗口大小、填充、步幅
- 池化层没有可以学习的参数
- 在每个输入通道分别应用池化层,获得对应的输出通道
- 池化层不改变通道数:输入通道数 = 输出通道数
- 池化层返回窗口中的最大值/平均值
- 池化层用于缓解卷积层对位置的过度敏感性
二、经典 CNN
1.LeNet
LeNet 是最早发布的卷积神经网络之一,最早用于手写数字识别。 LeNet 先使用卷积层学习图片空间信息,再使用全连接层转换到类别空间。
1.1 LeNet 架构
- LeNet 交替使用卷积层和平均池化层后,使用全连接层进行图像分类。
- 激活函数使用 Sigmoid 激活函数
2.AlexNet
深度卷积神经网络 AlexNet 2012年赢得了 ImageNet 竞赛,使用了更多的卷积层和更大的参数空间,从而拟合大规模的数据集
2.1 AlexNet 特征
相比 LeNet,AlexNet 具有以下特征:
- 使用了 ReLu激活函数,缓解梯度消失,同时可以更好地训练模型
- 使用了丢弃法,全连接层后加入了丢弃层,控制全连接层的模型复杂度
- 将平均池化层替换为最大池化层
- 使用了图像增广(翻转、裁剪和颜色处理),进一步扩大数据集,从而缓解过拟合
2.2 AlexNet 架构
从 LeNet 到 AlexNet
- 增加了3层卷积层
- 使用了更大的池化窗口拟合大规模的ImageNet数据集
- 使用最大池化层
- 采用更大的卷积窗口和步长,因此输入的图片更大
- 使用更多的输出通道数
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
4.NiN
网络中的网络 NiN
4.1 NiN 块
- 从卷积层开始,后面是两个1×1的卷积层(步幅为1,无填充,起到全连接层的作用)
- 这两个1×1卷积层充当带有ReLU激活函数的逐像素全连接层,对每个像素增加了非线性性
4.2 NiN 架构
- 无全连接层
- 交替使用NiN块和步幅为2的最大池化层,逐步减小高宽、增大通道数
- 最后使用全局平均池化层得到输出,其输出通道数是类别数。使用全局平均池化层代替全连接层,这样不容易过拟合,同时有更少的参数个数
5.GoogLeNet
GoogLeNet 是含有并行结构的网络
5.1 Inception 块
在 GoogLeNet 中,基本的卷积块被称为Inception块,和基本的卷积层相比,Inception 块具有更少的参数个数和计算复杂度
Inception 由4条具有不同超参数的卷积层和池化层的并行路径来抽取不同的信息,主要优点是模型参数小,计算复杂度低
- 前三条路径使用窗口大小为1×1、3×3和5×5的卷积层,从不同空间大小中提取信息
- 中间的两条路径在输入上执行1×1卷积,以减少通道数,从而降低模型的复杂性
- 第四条路径使用3×3最大汇聚层,然后使用1×1卷积层来改变通道数。
这四条路径都使用合适的填充来使输入与输出的高和宽一致,最后将每条线路的输出在通道维度上连结,并构成Inception块的输出。
在Inception块中,通常调整的超参数是每层输出通道数
5.2 GoogLeNet 架构
- 共使用9个Inception块和全局平均汇聚层的堆叠来生成其估计值
- Inception块之间的最大汇聚层可降低维度
- 第一个模块类似于AlexNet和LeNet
- Inception块的组合从VGG继承
- 全局平均汇聚层避免了在最后使用全连接层
5.3 批量和归一化
- 在模型训练过程中,批量规范化固定小批量中的均值和标准差,学习出合适的偏移和缩放,不断调整神经网络的中间输出,使整个神经网络各层的中间输出值更加稳定
- 可以加速收敛速度,但是一般不改变模型精度
- 批量规范化在全连接层和卷积层的使用略有不同
- 批量规范化层和暂退层一样,在训练模式和预测模式下计算不同
- 批量规范化有许多有益的副作用,主要是正则化
6.ResNet
只有当较复杂的函数类包含较小的函数类时,才能确保提高它们的性能。
对于深度神经网络,如果能将新添加的层训练成恒等映射(identity function)f(x)=x,新模型和原模型将同样有效。 同时,由于新模型可能得出更优的解来拟合训练数据集,因此添加层更容易降低训练误差。
6.1 残差块
6.2 ResNet 块
6.3 ResNet 架构
- 残差映射可以更容易地学习同一函数,例如将权重层中的参数近似为零
- 利用残差块(residual blocks)可以训练出一个有效的深层神经网络:输入可以通过层间的残余连接更快地向前传播
- 残差块是的很深的网络更加容易训练
- 残差网络(ResNet)对随后的深层神经网络设计产生了深远影响
类似 VGG 和 GoogLeNet 总体架构,替换成了 ResNet 块: