PyTorch深度神经网络(前馈、卷积神经网络)
文章目录
- 神经网络概述
- 神经元模型
- 多层感知机
- 前馈神经网络
- 网络拓扑结构
- 数学表示
- 基本传播公式
- 符号说明
- 整体函数视角
- 卷积神经网络
- 卷积神经网络发展简史
- 第一代(1943-1980)
- 第二代(1985-2006)
- 第三代(2006-至今)
- 快速发展期(2006-2012)
- 爆发期(2012-)
- 卷积神经网络的结构
- 1. 卷积层
- 2. 激活函数层
- 3. 池化层
- 4. 全连接层
- 卷积神经网络类型
- AlexNet
- VGGNet
- GoogLeNet
- RestNet
神经网络概述
神经元模型
- 在神经网络中,神经元处理单元可以表示不同的对象,例如特征、字母、概念,或者一些有意义的抽象模式。网络中处理单元的类型分为三类:输入单元、输出单元和隐单元。
- 输入单元接收外部世界的信号与数据
- 输出单元实现系统处理结果的输出
- 隐单元是处在输入和输出单元之间,不能由系统外部观察的单元。
- 神经元间的连接权值反映了单元间的连接强度,信息的表示和处理体现在网络处理单元的连接关系中。
x 1 , . . . , x n x_1,...,x_n x1,...,xn是从其他神经元传来的输入信号, w i j w_{ij} wij表示从神经元 j j j到神经元 i i i的连接权值,神经元的输出可以表示为向量相乘的形式:
n e t i = X W y i = f ( n e t i ) = f ( X W ) net_i=XW \\ y_i=f(net_i)=f(XW) neti=XWyi=f(neti)=f(XW) - 如果神经元的净激活为正,则称该神经元处于激活状态或兴奋状态,如果神经元的净激活为负,则称神经元处于抑制状态。
多层感知机
- 多层感知机(Multi-Layer Perceptron,MLP)是一种前向结构的人工神经网络,用于映射一组输入向量到一组输出向量。MLP可以认为是一个有向图,由多个节点层组成,每一层全连接到下一层。除输入节点外,每个节点都是一个带有非线性激活函数的神经元。
- 多层感知机由输入层,隐藏层,输出层,权重和偏置,激活函数组成。
- 输入层:接收外部信息,并传递信息到网络中。输入层中的节点并不进行任何计算。
- 隐藏层:一个或多个隐藏层位于输入层和输出层之间。每个隐藏层都包含若干神经元,这些神经元具有非线性激活函数,如Sigmoid或Tanh函数。隐藏层的神经元与前一层的所有神经元全连接,并且它们的输出会作为信号传递到下一层。
- 输出层:输出层产生网络的最终输出,用于进行预测或分类。输出层神经元的数量取决于要解决的问题类型,例如在二分类问题中通常只有一个输出神经元,而在多分类问题中则可能有多个输出神经元。
- 权重和偏置:连接两个神经元的权重表示这两个神经元之间联系的强度。每个神经元还有一个偏置项,它帮助调整神经元激活的难易程度。
- 激活函数:激活函数引入非线性因素,使得神经网络能够学习和模拟更复杂的关系。没有激活函数的神经网络将无法解决线性不可分的问题。
- 多层感知机通过在训练过程中不断调整连接权重和偏置来学习输入数据中的模式。这种调整通常是通过反向传播算法实现的,该算法利用输出误差来更新网络中的权重,以减少预测错误。
- MLP是感知机的推广,克服了感知机不能对线性不可分数据进行识别的弱点。MLP本身可以使用任何形式的激活函数,如阶梯函数或逻辑S形函数(Logistic Sigmoid Function),但为使用反向传播算法进行有效学习,激活函数必须限制为可微函数。由于双曲正切(Hyperbolic Tangent)函数及逻辑S形函数具有良好的可微性,所以经常被用作激活函数。
- 反向传播算法,在模式识别领域已经成为标准的监督学习算法,并在计算神经学及并行分布式处理领域中获得广泛研究。MLP已被证明是一种通用的函数近似方法,可以被用来拟合复杂的函数,或解决分类问题。
- 具体隐藏层神经元数量取决于样本中蕴含规律的个数以及复杂程度,而样本蕴含规律的个数往往和样本数量有关系。确定网络隐藏层参数的一个办法是将隐藏层个数设置为超参,使用验证集验证,选择在验证集中误差最小的作为神经网络的隐藏层节点个数。还有就是通过简单的经验设置公式来确定隐藏层神经元个数:
l = m + n + α l 为隐藏层节点个数, m 是输入层节点个数, n 是输出层节点个数, α 一般是 1 − 100 的常数 l=\sqrt[]{m+n}+\alpha \\ l为隐藏层节点个数,m是输入层节点个数,n是输出层节点个数,\alpha一般是1-100的常数 l=m+n+αl为隐藏层节点个数,m是输入层节点个数,n是输出层节点个数,α一般是1−100的常数
前馈神经网络
- 在前馈神经网络(Feedforward Neural Network,FNN)中,每一层的神经元可以接收前一层神经元的信号,并产生信号输出到下一层。整个网络中无反馈,信号从输入层向输出层单向传播。
网络拓扑结构
- 输入层:第0层神经元(直接接收原始数据)
- 隐藏层:中间所有非线性变换层
- 输出层:最后一层神经元(产生最终预测结果)
- 单向传播:信号从输入层→隐藏层→输出层单向流动,无反馈回路
数学表示
基本传播公式
z ( l ) = W ( l ) ⋅ a ( l − 1 ) + b ( l ) a ( l ) = f l ( z ( l ) ) \begin{aligned} z^{(l)} &= W^{(l)} \cdot a^{(l-1)} + b^{(l)} \\ a^{(l)} &= f_l(z^{(l)}) \end{aligned} z(l)a(l)=W(l)⋅a(l−1)+b(l)=fl(z(l))
符号说明
符号 | 含义 | 维度 |
---|---|---|
l l l | 网络层索引 | 标量 |
m ( l ) m^{(l)} m(l) | 第 l l l层神经元数量 | 标量 |
f l ( ⋅ ) f_l(\cdot) fl(⋅) | 第 l l l层激活函数 | 非线性函数 |
W ( l ) W^{(l)} W(l) | 权重矩阵 | R m ( l ) × m ( l − 1 ) \mathbb{R}^{m^{(l)} \times m^{(l-1)}} Rm(l)×m(l−1) |
b ( l ) b^{(l)} b(l) | 偏置向量 | R m ( l ) \mathbb{R}^{m^{(l)}} Rm(l) |
z ( l ) z^{(l)} z(l) | 净输入向量 | R m ( l ) \mathbb{R}^{m^{(l)}} Rm(l) |
a ( l ) a^{(l)} a(l) | 输出向量 | R m ( l ) \mathbb{R}^{m^{(l)}} Rm(l) |
整体函数视角
将网络视为复合函数:
a ( L ) = φ ( X , W , b ) a^{(L)} = \varphi(X, W, b) a(L)=φ(X,W,b)
其中:
- 输入 a ( 0 ) = X a^{(0)} = X a(0)=X
- 参数 W = { W ( 1 ) , . . . , W ( L ) } W=\{W^{(1)},...,W^{(L)}\} W={W(1),...,W(L)}, b = { b ( 1 ) , . . . , b ( L ) } b=\{b^{(1)},...,b^{(L)}\} b={b(1),...,b(L)}
- 输出 a ( L ) a^{(L)} a(L) 为最终预测结果
卷积神经网络
- 卷积神经网络(Convolutional Neural Networks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,它是深度学习框架中的代表算法之一。
卷积神经网络发展简史
第一代(1943-1980)
- 1943年:Warren & Walter提出神经元数学模型
- 1958年:Frank实现首个感知机(IBM704),完成形状分类
- 特点:单层结构,仅解决线性问题
第二代(1985-2006)
- 1985年:Hinton提出BP算法和多隐含层结构
- 1988年:Wei Zhang提出SIANN(医学图像应用)
- 1989年:LeCun首创卷积概念(早期LeNet)
- 1998年:LeNet-5加入池化层,MNIST准确率98%
- 瓶颈:受限于计算硬件发展
第三代(2006-至今)
快速发展期(2006-2012)
- 2006年:Hinton提出DBN深度置信网络
爆发期(2012-)
- 2012年:AlexNet夺冠ImageNet
- 后续模型:ZFNet、VGGNet、GoogLeNet、ResNet、DPRSNet
- 驱动因素:大数据+GPU算力提升
卷积神经网络的结构
- 卷积神经网络中隐含层低层中的卷积层与池化层交替连接,高层由全连接层构成。
1. 卷积层
功能:通过卷积核(Filter)提取输入特征
特性:
- 由可学习的卷积单元组成(通过反向传播优化)
- 低层提取基础特征(边缘/线条),高层提取抽象特征
- 卷积核在输入图像上滑动进行局部区域卷积运算
关键参数:
参数 | 作用 | 影响 |
---|---|---|
卷积核尺寸 | 局部感受区域大小 | 尺寸↑→提取特征更复杂 |
步长(Stride) | 滑动步距 | 步长↑→输出尺寸↓ |
填充(Padding) | 边缘补零层数 | 保持特征图尺寸,减少边缘信息丢失 |
2. 激活函数层
- 作用:引入非线性变换(真实数据多为非线性)
- 特性要求:非线性,连续可微,单调性
- 常用函数:Sigmoid、Tanh 、ReLU(最常用)
3. 池化层
- 作用:压缩特征图,提取主要特征,简化网络计算的复杂度。
- 池化方式:均值池化,最大池化
4. 全连接层
- 全连接层位于卷积神经网络的最后位置。用于给出最后的分类结果。
- 在全连接层中,特征会失去空间结构,展开为特征向量,并把由前面层级所提取到的特征进行非线性组合得到输出
f ( x ) = W ∗ x + b x 为全连接层的输入, W 为权重系数, b 为偏置 f(x)=W^{*}x+b \\ x为全连接层的输入,W为权重系数,b为偏置 f(x)=W∗x+bx为全连接层的输入,W为权重系数,b为偏置 - 全连接层连接所有特征输出至输出层,对于图像分类问题,输出层使用逻辑函数或归一化指数函数输出分类标签;在图像识别问题中,输出层输出为物体的中心坐标、大小和分类;在语义分割中,则直接输出每个像素的分类结果。
卷积神经网络类型
AlexNet
- AlexNet是一种具有里程碑意义的深度卷积神经网络。AlexNet在2012年的ImageNet大规模视觉识别挑战赛获得冠军,标志深度学习时代的来临,并奠定了卷积神经网络在计算机视觉领域的绝对地位。
- AlexNet的成功在于引入新的技术和训练方法,包括ReLU激活函数、Dropout正则化以及使用GPU进行加速训练。这些技术的应用极大地提高了网络的性能,并且对后续的深度学习模型设计产生了深远的影响。
- AlexNet的网络结构包括 5 5 5个卷积层和 3 3 3个全连接层。它的输入图像尺寸为 227 × 227 × 3 227×227×3 227×227×3(实际输入尺寸应为 227 × 227 227×227 227×227,由于卷积核大小和步长的设置,之前有文献提到 224 × 224 224×224 224×224)。网络中使用了 96 96 96个 11 × 11 11×11 11×11的卷积核对输入图像进行特征提取,步长为 4 4 4,没有使用填充。
VGGNet
- VGGNet探索网络深度与其性能的关系,通过构筑 16 19 16~19 16 19层深的卷积神经网络, T o p 5 Top5 Top5误差率为 7.5 7.5% 7.5,采用 3 x 3 3x3 3x3的卷积核与 2 x 2 2x2 2x2的池化核,网络结构如图所示。
- VGGNet包含很多级别的网络,深度从11层到19层不等,最常用的是VGG-16和VGG-19。
- VGGNet把网络分成了5段,每段都把多个3x3的网络串联在一起,每段卷积后接一个最大池化层,最后是3个全连接层和一个Softmax层。
- VGGNet 核心创新
-
小卷积核堆叠设计
- 使用多层3×3小卷积核替代单层大卷积核(如用2层3×3代替1层5×5)
- 优势:增强特征提取能力(感受野相同但非线性更强),显著减少参数量(2层3×3:18n vs 1层5×5:25n)
-
高效训练策略
- 多尺度训练与交替训练结合
- 关键层预训练技术
- 效果:大幅缩短收敛周期
- 局限性:全连接层过多(3个FC层);导致参数量爆炸(占模型总参数90%+);内存/计算资源消耗大
GoogLeNet
- GoogLeNet是由谷歌的研究院提出的卷积神经网络,获得2014年的ILSVRC比赛分类任务的冠军,Top5误差率仅为6.656%。
- GoogLeNet的网络共有22层,但参数仅有700万个,比之前的网络模型少很多。
- 一般来说,提升网络性能最直接的办法就是增加网络深度,随之增加的还有网络中的参数,但过量的参数容易产生过拟合,也会增大计算量。GoogLeNet采用稀疏连接解决这种问题,为此提出了inception结构。
- 在inception结构中,同时采用 1 × 1 、 3 × 3 、 5 × 5 1\times1、3\times3、5\times5 1×1、3×3、5×5卷积核是为了将卷积后的特征保持一致,便于融合 s t r i d e = 1 stride=1 stride=1, p a d d i n g padding padding分别为 0 、 1 、 2 0、1、2 0、1、2,卷积后就可得到相同维度的特征,最后进行拼接,将不同尺度的特征进行融合,使得网络可以更好地提取特征。
RestNet
- 随着神经网络深度的增加,模型准确率会先上升,然后达到饱和,持续增加深度时,准确率会下降;因为随着层数的增多,会出现梯度爆炸或衰减现象,梯度会随着连乘变得不稳定,数值会特别大或者特别小。因此,网络性能会变得越来越差。
- ResNet通过在网络结构中引入残差网络来解决此类问题。残差网络结构如图所示。
- 残差网络是跳跃结构,残差项原本是带权重的,但ResNet用恒等映射。在图5-7中,输入为x,期望输出为H(x),通过捷径连接的方式将x传到输出作为初始结果,输出为 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x,当 F ( x ) = 0 F(x)=0 F(x)=0时, H ( x ) = x H(x)=x H(x)=x。于是,ResNet相当于将学习目标改变为残差F(x)=H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0。
- ResNet通过提出残差学习,将残差网络作为卷积神经网络的基本结构,通过恒等映射来解决因网络模型层数过多导致的梯度爆炸或衰减问题,可以最大限度地加深网络,并得到非常好的分类效果。