1. 全连接网络问题与PyTorch基本概念
1.1 全连接网络问题
全连接网络:链接权过多,计算慢,难收敛,可能进入局部最小值,易产生过拟合问题。
例如:输入1000×1000图像,隐含层有1M个节点,则输入到隐含层之间有1×10^12数量级参数。
解决方式:
算的慢问题:减少权值连接,每一个节点只连到上一层的少数神经元,即局部连接网络;
难收敛、过拟合问题:信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。
1.2 PyTorch基本概念
张量: 对高维(维数≥2)的物理量进行“量纲分析”的一种工具。可以简单的理解为:一维数组称为矢量,二维数组称为张量,三维数组为三阶张量......
计算图:用“节点”和“线”的有向图来 描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入的起点/输出的 终点,或者是读取 /写入持久变量的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线” 可以输运“size可动态调整”的多维数据数组,即 “张量”。
tensor:表示数据;Dataset、DataLoader:读取样本数据和标签;变量(Variable):存储神经网络权值等参数;计算图(computational graph):表示计算任务。
2. 卷积神经网络基础
2.1 基本概念
特征提取:卷积,将卷积核作为一个滑动窗口在特征层上面进行滑动,每次滑动的的距离由步长决定,每滑动一次就将特征层的值与卷积核的值对应相乘再相加,最终得到卷积结果。
填充:在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。
池化: 使用局部统计特征,如均值或最大值,从而解决特征过多的问题。
卷积神经网络构成:由多个卷积层和下采样层构成,后面可连接全连接网络。卷积层:k个滤波器;下采样层:采用mean或max池化;后面:全连接网络。
前向传播定义为:
如果第𝑙层是卷积+池化层,则:
2.2 误差反向传播
当前层为卷积层,下一层为下采样层,采用2*2核平均池化,则误差回传结果如下:
如果当前层是下采样层,下一层是卷积层,则误差从卷积层回传结果如下:
卷积NN的BP算法:卷积层加卷积层
卷积NN的BP算法:卷积层加全连接层
3. LeNet-5网络
LeNet-5 是由Yann LeCun等人在1998年提出的卷积神经网络结构,是最早的卷积神经网络之一。LeNet-5结构包括卷积层、池化层和全连接层,广泛应用于手写数字识别等领域。
3.1 网络结构
C1层:输入:32*32;卷积核个数:6;卷积核大小:5*5; 神经元数量:28*28*6;连接数:(5*5+1)*6*(28*28)=122304;输出:28*28
S2层:输入:28*28;采样区域大小:2*2;采样数量:6;神经元数量:14*14*6;输出:14*14;连接数:(2*2+1)*6*14*14=5880
C3层:卷积核大小:5*5;卷积核数量:16;输出特征图大小:10*10;连接数:10*10*[6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)]=151600 。
S2层:输入:10*10;采样区域大小:2*2;输出特征图大小:5*5;神经元数量:5*5*16;连接数:(2*2+1)*5*5*16=2000;采样方式:与S2层工作相同。
C5层:输入:5*5;卷积核大小:5*5;卷积核数量:120;输出特征图大小:1*1;连接数:(5*5*16+1)*120=48120。
F6层:输入:120维向量;输出:84维向量;连接数:(120+1)*84=10164。
输出层:输入:84维向量;输出:10维向量。由欧式径向基函数单元构成,输出RBF单元计算输入向量和参数向量之间的欧式距离。
import torch
from torch import nn
from d2l import torch as d2l
class Reshape(torch.nn.Module):
def forward(self,x):
return x.view(-1,1,28,28)
net = torch.nn.Sequential(
Reshape(),
nn.Conv2d(1,6,kernel_size=5, padding=2), nn.Sigmoid(),
nn.AvgPool2d(kernel_size=2, stride=2),
nn.Conv2d(6,16,kernel_size=5), nn.Sigmoid(),
nn.AvgPool2d(kernel_size=2, stride=2),
nn.Flatten(),
nn.Linear(16 * 5 * 5,120),nn.Sigmoid(),
nn.Linear(120,84),nn.Sigmoid(),
nn.Linear(84,10))
4. 基本卷积神经网络
4.1 AlexNet
AlexNet 是由Alex Krizhevsky等人在2012年提出的卷积神经网络结构,通过多层卷积层和池化层的设计,成功地应用于大规模图像识别比赛ImageNet中。
网络一共有8层可学习层——5层卷积层和3层全连接层。作出如下改进:
- 池化层采用最大池化;
- 选用ReLU作为非线性环节激活函数;
- 网络规模扩大,参数数量接近6000万;
- 出现“多个卷积层+一个池化层”的结构
4.2 VGG-16
VGGNet 是由Visual Geometry Group提出的卷积神经网络结构,其特点是网络非常深,并且采用了连续多层的3x3卷积核,有助于提升网络的表征能力。VGGNet在图像分类等任务中表现出色。
改进:网络规模进一步增大,参数数量约为1.38亿;由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
4.3 残差网络-ResNet
ResNet 是由微软亚洲研究院提出的深度残差网络,通过引入残差学习的思想解决了深度神经网络训练中的梯度消失和梯度爆炸问题,使得网络可以更深更容易训练。ResNet在ImageNet比赛中获得了第一名。
提出原因:1.退化问题:随着层数的增加,预测效果反而越来越差;2. 梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0。
为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为残差网络 (ResNets)。ResNet论文提出了 residual结构(残差结构)来减轻退化问题。