目录
- 1 前言
- 2 卷积神经网络CNN
- 2.1 LeNet-5相关介绍
- 2.2 CNN基本结构
- 2.2.1 卷积层
- 2.2.2 池化层(下采样层)
- 2.2.3 全连接层
- 2.2.3.1激励层(非线性激活)
- 2.2.3.2 线性层
- 2.2.3.3 Dropout层
- 2.2.3.4 总结
- 2.3 图像的上采样和下采样
- 2.3.1 上采样
- 2.3.2 下采样
- 2.4 梯度
- 2.4.1 梯度弥散
- 2.4.2 梯度爆炸
- 2.5 CNN卷积特点
- 2.5.1 局部连接
- 2.5.2 权值共享
- 2.6 感受野
1 前言
在了解卷积神经网络之前,我们可以通过下图先看一下传统机器学习与深度学习的区别:
2 卷积神经网络CNN
2.1 LeNet-5相关介绍
卷积神经网络(Convolutional Neural Networks, CNN)的雏形是1998 年LeCunt提出的LeNet-5网络结构。LeNet-5网络结构如下图所示:
可以看出LeNet-5 共包含 8 层:
- Input输入层:输入一个大小为 32x32的灰度图像。
- C1 卷积层:通过卷积核进行卷积,输出6 个大小为 28x28的特征图 (Feature Map )。
- S2 下采样池化层:通过池化核进行池化,输出6 个大小为 14x14 的特征图(Feature Map )。
- C3卷积层:通过卷积核进行卷积,输出16 个大小为 10x10的特征图 (Feature Map )。
- S4下采样池化层:通过池化核进行池化,输出16 个大小为 5x5 的特征图(Feature Map )。
- C5卷积层:通过卷积核进行卷积,输出120个特征图,与S4相连。
- F6全连接层:有 84 个单元(之所以选这个数字的原因来自于输出层的设计),与 C5 层全相连。计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
- output输出层(也是全连接层):有84个单元输入,10个单元输出。
2.2 CNN基本结构
CNN 主要由卷积层、池化层、全连接层组成。这些层的作用与其之间的关系可借助下图进行理解:
2.2.1 卷积层
功能:
用卷积核对输入图像进行不断卷积,得到图像特征图。每个卷积层都由许多特征图(Feature map)组成,随着网络深度的加深,特征图的数量会成倍增加,与此同时,特征图的长宽将缩小。
计算方法:
卷积层通过卷积核在本层的特征图上滑动,并将卷积核与特征图的对应位置元素相乘,最终求和并加上偏置项之后作为最终输出。具体理解可参考博客https://blog.csdn.net/weixin_51312723/article/details/132291673 中第二章“神经网络中神经结构的使用”部分。
2.2.2 池化层(下采样层)
池化层又名下采样层。
功能: 保留图像特征的同时,减小数据量,即对特征图进行压缩,缩小特征图,也就是缩小特征映射。
下采样方法主要有两种: 平均池化和最大池化。目前通常使用的是最大池化(maxpool),因为它计算简单而且能够更好的保留纹理特征。而平均池化虽然能很好的保留背景,但容易使得图片变模糊。
计算方法: 请查看博客https://blog.csdn.net/weixin_51312723/article/details/132291673 第三章“神经网络当中的一些基本结构”中的第二小节“池化层”部分。
2.2.3 全连接层
通常情况下,网络的最后是全连接层(Fully connected,FC)用作分类,FC 将经过卷积层、激励层和池化层处理后的特征信息整合并映射到样本空间中。然而,FC 层是黑盒模型,其参数量占整个模型的 80%以上,在训练时很容易过拟合,为了解决这个问题,通常在 FC 之后使用 Dropout 方法。Dropout 方法可以随机使一些神经元处于失活状态,从而降低神经元之间的关联性,减少过拟合,提高网络的泛化能力。
2.2.3.1激励层(非线性激活)
激励层:就是relu函数那些。
详情请查看博客https://blog.csdn.net/weixin_51312723/article/details/132291673 第三章“神经网络当中的一些基本结构”中的第三小节“非线性激活”部分。
2.2.3.2 线性层
详情请查看博客https://blog.csdn.net/weixin_51312723/article/details/132291673 第三章“神经网络当中的一些基本结构”中的第四小节“线性层”和第四章:神经网络小实战“部分。
2.2.3.3 Dropout层
Dropout一般放在全连接层中的激活函数之后,目的是防止过拟合,提高模型返回能力。由于卷积层参数较少,很少有放在卷积层后面的情况,卷积层一般使BatchNorm。
2.2.3.4 总结
- 如果模型只是单纯的线性层叠加,最后模型也是线性的,等价于只有一个线性层(把所有权值矩阵先结合相乘,最后只剩一个权值矩阵),而非线性激活层的加入才使得深度有了意义。
- 非线性激活层给我们的神经网络中引入一些非线性的特征,因为网络当中非线性越多的话,你才能训练出符合各种曲线、各种特征的一个模型,要不然模型的泛化能力就不够好。
- 卷积神经网络中的卷积块包含三个阶段:在第一阶段中,多个卷积计算并行产生输出;在第二阶段中,将第一阶段的输出结果进行非线性激活;在第三阶段中,池化操作被用于进一步调整该卷积块的输出。
2.3 图像的上采样和下采样
2.3.1 上采样
上采样: 又名放大图像、图像插值。
作用: 在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样。
2.3.2 下采样
下采样: 又名降采样、缩小图像。
作用: 1. 减少计算量,防止过拟合;2. 增大感受野,使得后面的卷积核能够学到更加全局的信息。
2.4 梯度
2.4.1 梯度弥散
梯度弥散就是梯度消失,函数导数为0。
在上面2.2.3.1小节我们介绍了一些非线性激活的函数,如relu和sigmoid激活函数。但sigmoid激活函数不常用了,因为它就是导致梯度消失的一个常见的情况。
从所介绍的sigmoid函数图像可以看出,当sigmoid函数的输入很大或是很小时,它的梯度都会消失。 此外,当反向传播通过许多层时, 这些地方sigmoid函数的输入接近于零,可能导致整个乘积的梯度可能会消失。因此,ReLU激活函数成为了大家默认的选择。
2.4.2 梯度爆炸
梯度爆炸就是函数导数接近无穷大,很难收敛。
2.5 CNN卷积特点
众所周知,卷积神经网络(CNN)是一种 端到端 更全面的 非线性映射 抽取更深层次、更抽象的语义表征实现识别功能。同时,它也是一种具有局部连接、权值共享等特性的深度神经网络。
2.5.1 局部连接
具体内容请查看下面这篇参考博客的相关讲解:https://blog.csdn.net/weixin_41514525/article/details/113987876。
2.5.2 权值共享
具体内容请查看下面这两篇参考博客的相关讲解:
- https://blog.csdn.net/weixin_41514525/article/details/113987876;
- https://blog.csdn.net/duxinyuhi/article/details/128816396。
2.6 感受野
在卷积神经网络中,每一层的任意元素都有相应的感受野(Receptive field),其代表了在前向传播中可能影响当前元素计算的所有先前层元素的区域大小。具体内容请查看下面这篇参考博客的相关讲解:https://blog.csdn.net/qq_43665602/article/details/126754736。