第五章 深度学习
一、基本理论
4. 神经网络的改进
4.1 神经网络的局限
全连接神经网络的局限(一)
- 未考虑数据的“形状”,会破坏数据空间结构。例如,输入数据是图像时,图像通常是高长通道方向上的 3 维形状。但是,向全连接层输入时,需要将 3 维数据拉平为 1 维数据
全连接神经网络的局限(二)
- 全连接网络参数量庞大,需要降低参数量
全连接神经网络的局限(三)
- 全连接网络层次深度受限,一般不超过七层,过深会导致梯度消失(梯度过小)或梯度爆炸(梯度过大),模型性能无法进一步提升。神经网络由输入、权重相乘得到,如果输入 X 进行了归一化(0~1)之间,会导致越乘越小(梯度消失);如果 X 不做归一化,会导致值越乘越大
如何克服全连接模型的局限
- 增加卷积操作,卷积操作不需要变维成向量,不破坏图像空间结构
- 增加卷积、池化操作,提取特征同时,对数据降维
- 增加其它策略解决梯度消失问题
4.2 卷积神经网络
4.2.1 什么是卷积
“卷积”其实是一个数学概念,它描述一个函数和另一个函数在某个维度上的加权“叠加”作用。函数定义如下:
其中,函数 f 和函数 g 是卷积对象,a 为积分变量,星号“*”表示卷积。公式所示的操作,被称为连续域上的卷积操作。这种操作通常也被简记为如下公式:
4.2.2 离散卷积与多维卷积
一般情况下,我们并不需要记录任意时刻的数据,而是以一定的时间间隔(也即频率)进行采样即可。对于离散信号,卷积操作可用如下表示:
当然,对于离散卷积的定义可推广到更高维度的空间上。例如,二维的公式可表示为公式:
4.2.3 生活中的卷积
在一根铁丝某处不停地弯曲,假设发热函数是 f(t),散热函数是 g(t),此时此刻的温度就是 f(t) 跟 g(t) 的卷积。
在一个特定环境下,发声体的声源函数是 f(t),该环境下对声源的反射效应函数是 g(t),那么在这个环境下感受到的声音就是 f(t) 的和 g(t) 的卷积。
记忆也是一种卷积。
4.2.4 什么是卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)针对全连接网络的局限做出了修正,加入了卷积层(Convolution 层)和池化层(Pooling 层)。
4.2.5 卷积神经网络的用途
CNN 被广泛应用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以 CNN 为基础(比如,AlexNet、VGGNet、Google Inception Net 及微软的 ResNet 等)上。近几年深度学习大放异彩,CNN 功不可没。
4.2.6 卷积运算
单通道、二维卷积运算示例
单通道、二维、带偏置的卷积运算示例
带填充(padding)的单通道、二维卷积运算示例
步幅(stride)为 2 的卷积运算示例
卷积运算输出矩阵大小计算公式
- 其中,输入大小为(H, W),滤波器大小为(FH, FW),输出大小为(OH, OW),填充为 P,步幅为 S。例如:输入大小(28,31);填充 2;步幅 3;滤波器大小(5,5),则输出矩阵大小为:
多通道、多卷积核卷积
- 每个通道先与第一组卷积核执行卷积,然后多通道结果叠加,产生一个输出
- 每个通道与下一组卷积核执行卷积,产生另一个输出
- 有多少组卷积核,就有多少个通道输出(如下图,两组卷积核,产生两个通道的输出数据)
4.2.7 卷积运算的效果
通过卷积运算,能对输入数据起到加强或平滑效果。在图像处理中,通过选取合适的卷积核(或称算子),可以对图像进行锐化、去噪、模糊、加强边沿。
卷积运算能提取深层次复杂特征。
4.2.8 案例:图像卷积运算
4.2.9 卷积神经网络结构
总体结构
- 通常情况下,卷积神经网络由若干个卷积层(Convolutional Layer)、激活层(Activation Layer)、池化层(Pooling Layer)及全连接层(Fully Connected Layer)组成。
卷积层
- 它是卷积神经网络的核心所在,通过卷积运算,达到降维处理和提取特征两个重要目的。
激活层
- 其作用在于将前一层的线性输出,通过非线性的激活函数进行处理,这样用以模拟任意函数,从而增强网络的表征能力。前面章节中介绍的激活函数,如挤压函数 Sigmoid 也是可用的,但效果并不好。在深度学习领域,ReLU(Rectified-Linear Unit,修正线性单元)是目前使用较多的激活函数,主要原因是它收敛更快,次要原因在于它部分解决了梯度消失问题。
池化层(Pooling Layer)
- 也称子采样层或下采样层(Subsampling Layer),目的是缩小高、长方向上的空间的运算,以降低计算量,提高泛化能力。如下的示例,将 4*4 的矩阵缩小成 2*2 的矩阵输出。
池化层计算
- 对于每个输入矩阵,我们将其切割成若干大小相等的正方形小块,对每一个区块取最大值或者平均值,并将结果组成一个新的矩阵
- Max 池化:对各个参与池化计算的区域取最大值,形成的新矩阵。在图像识别领域,主要使用 Max 池化
- Average 池化:对各个参与池化计算的区域计算平均值
池化层的特征
-
没有要学习的参数。池化层和卷积层不同,没有要学习的参数。池化只是从目标区域中取最大值(或者平均值),所以不存在要学习的参数。
-
通道数不发生变化。经过池化运算,输入数据和输出数据的通道数不会发生变化。
-
对微小的位置变化具有鲁棒性(健壮)。输入数据发生微小偏差时,池化仍会返回相同的结果。
全连接层
- 这个网络层相当于多层感知机(Multi-Layer Perceptron,简称 MLP),其在整个卷积神经网络中起到分类器的作用。
- 通过前面多个“卷积-激活-池化”层的反复处理,待处理的数据特性已有了显著提高:一方面,输入数据的维度已下降到可用传统的前馈全连接网络来处理了;另一方面,此时的全连接层输入的数据已不再是“泥沙俱下、鱼龙混杂”,而是经过反复提纯过的结果,因此输出的分类品质要高得多。
4.2.10 经典 CNN 介绍(LeNet)
结构
- LeNet 是 Yann LeCun 在 1998 年提出,用于解决手写数字识别的视觉任务。自那时起,CNN 的最基本的架构就定下来了:卷积层、池化层、全连接层。
主要参数
- 输入:输入 32*32 大小单通道图像
- 两个“卷积-池化层”
- 第一个全连接层神经元数目为 500,再接激活函数
- 第三个全连接层神经元数目为 10,得到 10 维的特征向量,用于 10 个数字的分类训练,送入 softmaxt 分类,得到分类结果的概率
4.2.11 经典 CNN 介绍(AlexNet)
AlexNet 是 2012 年 ImageNet 竞赛冠军获得者 Hinton 和他的学生 Alex Krizhevsky 设计的,把 CNN 的基本原理应用到了很深很宽的网络中。其特点有:
- 使用 ReLU 作为激活函数,并验证其效果在较深的网络超过了 Sigmoid,成功解决了 Sigmoid 在网络较深时的梯度弥散问题
- 使用 Dropout(丢弃学习)随机忽略一部分神经元防止过拟合
- 在 CNN 中使用重叠的最大池化。此前 CNN 中普遍使用平均池化,AlexNet 全部使用最大池化,避免平均池化的模糊化效果
- 提出了 LRN(Local Response Normalization,局部正规化)层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力
- 使用 CUDA 加速深度卷积网络的训练,利用 GPU 强大的并行计算能力,处理神经网络训练时大量的矩阵运算
网络结构
主要参数
-
AlexNet 网络包含 8 层,其中前 5 层为卷积-池化层,后 3 层为全连接层;输入 224×224×3 的图像,第一卷积层用 96 个 11×11×3 的卷积核对进行滤波,步幅 4 像素;全连接的每层有 4096 个神经元,最后一个完全连接的层的输出被馈送到 1000 路 SoftMax,它产生超过 1000 个类别标签的分布;整个网络共 650000 个神经元。
-
参考论文:http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
4.2.12 经典 CNN 介绍(VGG)
概要介绍
- VGG 是 Visual Geometry Group, Department of Engineering Science, University of Oxford(牛津大学工程科学系视觉几何组)的缩写,2014 年参加 ILSVRC(ImageNet Large Scale Visual Recognition Challenge) 2014 大赛获得亚军(当年冠军为 GoogLeNet,但因为 VGG 结构简单,应用性强,所以很多技术人员都喜欢使用基于 VGG 的网络)
主要参数
- 网络深度:16~19 层
- 5 组卷积-池化层,3 个全连接层
- 三个全连接层,前两层都有 4096 通道,第三层共 1000 路及代表 1000 个标签
- 类别;最后一层为 softmax 层
- 所有卷积层有相同的配置,即卷积核大小为 3x3,步长为 1,填充为 1
- 池化层区域大小 2x2,步长为 2
模型结构
4.2.13 经典 CNN 介绍(GoogLeNet)
GoogLeNet 包含大量 Inception 并行卷积结构
- 请参考论文:https://arxiv.org/pdf/1409.4842.pdf
4.2.14 经典 CNN 介绍(ResNet)
介绍
- ResNet 是 ILSVRC 2015 大赛冠军,在 ImageNet 测试集上取得了 3.57%的错误率
- 更深的网络结构,采用残差结构来缓解深度 CNN 的梯度消失问题
结构