神经网络与深度学习-卷积神经网络基础
1. 深度学习平台介绍
1.1. 深度学习平台简介
1.2. PyTorch 简介
- PyTorch是一个Python的深度学习库。它最初由Facebook人工智能研究小组开发,而优步的Pyro软件则用于概率编程
- 最初,PyTorch由Hugh Perkins开发,作为基于Torch框架的LusJIT的Python包装器。PyTorch在Python中重新设计和实现Torch,同时为后端代码共享相同的核心C库
- 除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch
- 到目前,据统计已有80%的研究采用PyTorch,包括Google
PyTorch 和TensorFlow2 的对比:
PyTorch 资源:
- 60分钟快速入门:jianshu.com/p/889dbc684622
- 官方教程:https://www.pytorch123.com/
- 动手学深度学习:https://zh-v2.d2l.ai/
- Deep learning with pytorch: https://pytorch.org/assets/deeplearning/Deep-Learning-with-PyTorch.pdf
1.3. PyTorch基本使用
1.3.1. 基本概念
张量(Tensor):
是一个物理量,对高维(维数 ≥ 2) 的物理量进行“量纲分析” 的一种工具。简单的可以理解为:一维数组称为矢量,二维数组为二阶张量,三维数组为三阶张量…
计算图:
用“结点”(nodes)和“线”(edges)的有向图来
描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点
/输出的终点,或者是读取/写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)
- 使用 tensor 表示数据
- 使用 Dataset、DataLoader 读取样本数据和标签
- 使用变量 (Variable) 存储神经网络权值等参数
- 使用计算图 (computational graph) 来表示计算任务
- 在代码运行过程中同时执行计算图
1.3.2. 简单示例
构建简单的计算图,每个节点将零个或多个tensor作为输入,产生一个tensor作为输出。PyTorch中,所见即为所得,tensor的使用和numpy中的多维数组类似:
1.3.3. 线性回归
100个散点样本,求出回归方程
定义网络:
2. 卷积神经网络基础
2.1. 近代史
2.2. 基本概念
全连接网络: 链接权过多,难算难收敛,同时可能进入局部极小值,也容易产生过拟合问题。e.g. 输入为96x96图像,要学习100个特征
局部连接网络: 顾名思义,只有一部分权值连接。
部分输入和权值卷积
特征提取:
填充(Padding): 也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充
步长(Stride): 如图步长为2
多通道卷积: 如RGB
多通道卷积: 如RGB
池化(Pooling): 使用局部统计特征,如均值或最大值。解决特征过多问题
卷积神经网络结构:
- 构成:由多个卷积层和下采样层构成,后面可连接全连接网络
- 卷积层:k个滤波器
- 下采样层:采用mean或max
- 后面:连着全连接网络
学习算法:
3. LeNet-5网络
3.1. 网络介绍
网络提出:
网络结构:
3.2. 网络结构详解
C1层:
- 6个Feature map构成
- 每个神经元对输入进行5*5卷积
- 每个神经元对应55+1个参数,共6个feature map,2828个神经元,因此共有(55+1)6(2828)=122,304连接
S2层(Pooling层):
C3层(卷积层):
S4层:
与S2层工作相同
C5层:
- 120个神经元
- 每个神经元同样对输入进行5*5卷积,与S4全连接
- 总连接数(5516+1)*120=48120
F6层:
- 84个神经元
- 与C5全连接
- 总连接数(120+1)*84=10164
输出层:
- 由欧式径向基函数单元构成
- 每类一个单元
- 输出RBF单元计算输入向量和参数向量之间的欧式距离
网络结构:
网络说明:
- 与现在网络的区别
- 卷积时不进行填充(padding)
- 池化层选用平均池化而非最大池化
- 选用Sigmoid或tanh而非ReLU作为非线性环节激活函数
- 层数较浅,参数数量小(约为6万)
- 普遍规律
- 随网络深入,宽、高衰减,通道数增加
- 随网络深入,宽、高衰减,通道数增加
3.3. 误差反向传播
经典BP算法:
如果当前是输出层:
δ
i
[
L
]
=
a
i
(
1
−
a
i
)
e
i
\delta_i^{[L]}=a_i(1-a_i)e_i
δi[L]=ai(1−ai)ei
隐含层(按从后向前顺序更新):
δ
i
[
l
]
=
[
∑
j
+
1
m
w
j
i
[
l
+
1
]
]
(
a
i
[
l
−
1
]
)
\delta_i^{[l]}=\left[\sum\limits^m_{j+1}w_{ji}^{[l+1]} \right](a_i^{[l-1]})
δi[l]=[j+1∑mwji[l+1]](ai[l−1])
a
j
[
0
]
=
x
j
a_j^{[0]}=x_j
aj[0]=xj
卷积NN的BP算法:下采样层
如果当前是卷积层,下一层为下采样层,误差如何从下采样层回传
假设为2*2核平均池化
如果当前是下采样层,下一层为卷积层,误差如何从卷积回传
假设为2*2核卷积
局部误差如何从卷积层传到下采样层
3.4. 网络结构可视化
可视化 (https://adamharley.com/nn_vis/cnn/3d.html)
3.5. LeNet5代码实现
4. 基本卷积神经网络
4.1. AlexNet
网络提出:
网络结构:
网络说明:
-
网络一共有8层可学习层——5层卷积层和3层全连接层
-
改进
- 池化层均采用最大池化
- 选用ReLU作为非线性环节激活函数
- 网络规模扩大,参数数量接近6000万
- 出现“多个卷积层+一个池化层”的结构
-
普遍规律
- 随网络深入,宽、高衰减,通道数增加
-
左侧:连接数;右侧:参数
**改进:输入样本: **
- 最简单、通用的图像数据变形的方式
- 从原始图像(256,256)中,随机的crop出一些图像(224,224)。【平移变换,crop】
- 水平翻转图像。【反射变换,flip】
- 给图像增加一些随机的光照。【光照、彩色变换,color jittering】
改进:激活函数:
- 采用ReLU替代 Tan Sigmoid
- 用于卷积层与全连接层之后
改进:Dropout:
- 在每个全连接层后面使用一个 Dropout 层,以概率 p 随机关闭激活函数
改进:双GPU策略:
- AlexNet使用两块GTX580显卡进行训练,两块显卡只需要在特定的层进行通信
详细解释:以第一层conv1为例:
- relu1:max(0,𝑥),作为激活函数紧
接在卷积层后面 - norm1:局部响应归一化LRN,LRN层作用不大,在CNN中并不常用
- pool1:采用max pooling,pooling核大小为3×3
stride为2,即pooling核的步长是2,
即2倍降采样
此处的pool1层是有交叠的池化层,即
pooling核在相邻位置有重叠
在ILSVRC-2010上,top-1错误率为37.5%,top-5错误率为17.0%。上图是对96个
11113的卷积核进行可视化
4.2. VGG-16
可视化:
网络结构:
参数数量变化:
网络说明:
- 网络说明
- 网络规模进一步增大,参数数量约为1.38亿
- -由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
- 普遍规律
- 随网络深入,高和宽衰减,通道数增多。
4.3. 残差网络
非残差网络的缺陷:
残差网络的优势:
梯度消失问题:
残差块:
残差网络:
- 普通网络的基准模型受VGG网络的启发
- 卷积层主要有3×3的过滤器,并遵循两个简单的设计规则:①对输出特征图的尺寸相同的各层,都有相同数量的过滤器; ②如果特征图的大小减半,那么过滤器的数量就增加一倍,以保证每一层的时间复杂度相同。
- ResNet模型比VGG网络更少的过滤器和更低的复杂性。ResNet具有34层的权重层,有36亿FLOPs,只是VGG-19(19.6亿FLOPs)的18%。
5. 常用数据集
5.1. MNIST
MNIST 数据集主要由一些手 写数字的图片和相应的标签组成,图片一共有 10 类,分别对应从 0~9
原始的 MNIST 数据库一共包含下面 4 个文件
MNIST数据集是由0〜9手写数字图片和数字标签所组成的,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片
MNIST数据集加载:
Fashion-MNIST数据集:
- FashionMNIST 是一个替代 MNIST 手写数字集 的图像数据集。
它是由 Zalando旗下的研究部门提供,涵盖了来自 10 种类别的
共 7 万个不同商品的正面图片。 - FashionMNIST 的大小、格式和训练集/测试集划分与原始的
MNIST 完全一致。60000/10000 的训练测试数据划分,28x28
的灰度图片。你可以直接用它来测试你的机器学习和深度学习
算法性能,且不需要改动任何的代码。
以下是数据集中的类,以及来自每个类的10个随机图像:
5.2. CIFAR 10数据集
CIFAR-10数据集:
- CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每
个类有6000个图像。有50000个训练图像和10000个测试图像 - 数据集分为五个训练批次和一个测试批次,每个批次有10000
个图像。测试批次包含来自每个类别的恰好1000个随机选择的
图像
以下是数据集中的类,以及来自每个类的10个随机图像:
5.3. PASCAL VOC数据集
PASCAL VOC数据集:
- PASCAL的全称是Pattern Analysis, Statistical Modelling and
Computational Learning - VOC的全称是Visual Object Classes
- 目标分类(识别)、检测、分割最常用的数据集之一
- 第一届PASCAL VOC举办于2005年,2012年终止。常用的是
PASCAL 2012 - 一共分成20类:
- person
- bird, cat, cow, dog, horse, shee
- aeroplane, bicycle, boat, bus, car, motorbike, train
- bottle, chair, dining table, potted plant, sofa, tv/monitor
- 文件格式:
标注格式:
里面是图像对应的XML标注信息描述,每张图像有一个与之对应同名
的描述XML文件,XML前面部分声明图像数据来源,大小等元信息,
举例如下:
Pascal VOC2012 Main中统计的训练、验证、验证与训练、测试图像:
20类图像实例:
5.4. MS COCO数据集
MS COCO数据集:
- PASCAL的全称是Microsoft Common Objects in Context,起源
于微软于2014年出资标注的Microsoft COCO数据集 - 数据集以scene understanding为目标,主要从复杂的日常场景中
截取 - 包含目标分类(识别)、检测、分割、语义标注等数据集
- ImageNet竞赛停办后,COCO竞赛就成为是当前目标识别、检
测等领域的一个最权威、最重要的标杆 - 官网:http://cocodataset.org
- 提供的标注类别有80 类,有超过33 万张图片,其中20 万张有
标注,整个数据集中个体的数目超过150 万个。- 人:1类
- 交通工具:8类,自行车,汽车等
- 公路常见:5类,信号灯,停车标志等
- 动物:10类,猫狗等
- 携带物品:5类,背包,雨伞等
- 运动器材:10类,飞盘,滑雪板,网球拍等。
- 厨房餐具:7类,瓶子,勺子等
- 水果及食品:10类
- 家庭用品:7类,椅子、床,电视等
- 家庭常见物品:17类,笔记本,鼠标,遥控器等
MS COCO数据集示例:
5.5. ImageNet数据集与ILSVRC
ImageNet数据集:
- 始于2009年,李飞飞与Google的合作:“ImageNet: A Large-Scale Hierarchical Image Database”
- 总图像数据:14,197,122
- 总类别数:21841
- 带有标记框的图像数:1,034,908
ISLVRC 2012子数据集:
- 训练集:1,281,167张图片+标签
- 类别数:1,000
- 验证集:50,000张图片+标签
- 测试集:100,000张图片
6. 利用现有资源-利用现成框架
7. 总结
经典网络: 以“一个或多个卷积层+一个池化层“作为一个基本单元进行堆叠,在网络尾部使用全连接层,最后以Softmax为分类器,输出结果。
残差网络: 在普通网络的基础上,将浅层的激活项通过支路直接传向深层,克服深层神经网络中梯度消失的问题,为训练极深的神经网络提供便利。
数据集: 常见的数据集包括VOC和COCO;ImageNet较大