卷积神经网络基础
1、深度学习
1.1 全连接网络
全连接网络本质上是把所有的输入与输出连接起来的单个交换机。具有吞吐量大、可靠性高、低延时的特点,但同时也由于链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题。
为了解决全连接网络解决算的慢问题,可以通过减少权值连接,每一个节点只连到上一层的少数神经元,即出现了局部连接网络;而为了解决权值过多产生的过拟合问题,则可以通过信息分层处理,每一层在上层提取特征的基 础上获取进行再处理,得到更高级别的特征。
1.2 深度学习平台
1.2.1 深度学习平台简介
1.2.2 PyTorch基本使用
PyTorch是一个Python的深度学习库。PyTorch相比于TensorFlow2 具有上手简单、学习速度快、函数简洁、运用灵活的优点。到目前,据统计已有80%的研究采用PyTorch,包括Google。
PyTorch用“结点”(nodes)和“线”(edges)的有向图来描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点 /输出的终点,或者是读取 /写入持久变量的终点。“线”表 示“节点”之间的输入/输出关系。这些数据“线” 可以输运“size可动态调整”的多维数据数组,即 “张量”(tensor )。张量是一个物理量,对高维 (维数 ≥ 2) 的物理量进行 “量纲分析” 的一种工具。简单的可以理解为:一 维数组称为矢量,二维数组为二阶张量,三维数组 为三阶张量 …
PyTorch使用tensor表示数据,使用 Dataset、DataLoader 读取样本数据和标签,使用变量 (Variable) 存储神经网络权值等参数,使用计算图 (computational graph) 来表示计算任务,并在代码运行过程中同时执行计算图。
PyTorch的简单示例如下:
2、卷积神经网络基础
2.1 基本概念
特征提取:卷积,将卷积核作为一个滑动窗口在特征层上面进行滑动,每次滑动的的距离由步长决定,每滑动一次就将特征层的值与卷积核的值对应相乘再相加,最终得到卷积结果。注意,图像卷积时,根据定义,需要首先把卷积核上下左右转置。
填充(Padding):在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。
步长(Stride):卷积核在图像上移动的像素数,如图步长为2。
池化(Pooling):使用局部统计特征(如均值或最大值)解决特征过多问题。
2.2 卷积神经网络结构
卷积神经网络由多个卷积层和下采样层构成,后面可连接全连接网络。其中卷积层是𝑘个滤波器,下采样层采用mean或max。其算法表示如下:
前向传播定义为:
若第i层是卷积+池化,则:
3、误差反向传播
3.1 经典BP算法
如果当前是输出层:
如果当前是隐含层,按从后向前顺序更新:
3.2 卷积NN的BP算法
如果当前是卷积层,下一层为下采样层,采用2*2核平均池,结果如下。
如果当前是下采样层,下一层为卷积层,采用2*2核卷积,结果如下。
卷积层+卷积层的BP算法如下。
卷积层+全连接层的BP算法如下。
4、LeNet-5网络
LeNet共分为7层,分别是:C1卷积层,S2池化层,C3卷积层,S4池化层,C5卷积层,F6全连接层,OUTPUT输出层。
卷积层C1层
输入32×32的特征图;
卷积核种类为6,大小为5×5;
输出特征图数量为6,大小为28×28
池化层S2
输入28×28的特征图;
采用区域为2×2;
输出特征图数量为6,大小为14×14
卷积层C3
输入14×14的特征图;
卷积核种类为16,大小为5×5;
输出特征图数量为16,大小为10×10
池化层S4
输入10×10的特征图;
采样区域为2×2;
输出特征图数量为16,大小为5×5
卷积层C5
输入5×5的特征图;
卷积核种类为120,大小为5×5;
输出120维的向量
全连接层F6
输入120维的向量;
输出84维的向量
输出层OUTPUT
输入84维的向量;
输出10维的向量
5、基本卷积神经网络
5.1 AlexNet
- 池化层均采用最大池化
- 选用ReLU作为非线性环节激活函数,网络规模扩大
- 参数数量接近6000万
- 出现“多个卷积层+一个池化层”的结构
5.2 VGG-16
- 网络规模进一步增大,参数数量约为1.38亿
- 由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
5.3 残差网络
ResNet模型比VGG网络更少的过滤器和更低的复杂性,普通网络的基准模型受VGG网络的启发。ResNet具有34层的权重层,有36亿FLOPs,只是VGG-19(19.6亿FLOPs)的18%。
卷积层主要有3×3的过滤器,并遵循两个简单的设计规则:
①对输出特征图的尺寸相同的 各层,都有相同数量的过滤器;
②如果特征图的大小减半,那么过滤器的数量就增加一 倍,以保证每一层的时间复杂度相同。