Bootstrap

神经网络发展历程:DNN、CNN、RNN

系列文章目录

李沐《动手学深度学习》多层感知机 模型概念和代码实现
李沐《动手学深度学习》卷积神经网络 相关基础概念
李沐《动手学深度学习》卷积神经网络 经典网络模型
李沐《动手学深度学习》循环神经网络 相关基础概念
李沐《动手学深度学习》循环神经网络 经典网络模型


一、感知机

第一代神经网络又称为感知机,在1950年左右被提出来,它的算法只有两层,输入层输出层,主要是线性结构。它不能解决线性不可分的问题,对稍微复杂一些的函数都无能为力,如异或操作。

(一)多层感知机的结构

多层感知机是有多个隐含层的感知机。
在这里插入图片描述

(二)多层感知机的创新之处:

  • 摆脱了早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。
  • 解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。

(三)多层感知机带来的问题:

  • 随着神经网络层数的加深,优化函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。
  • 随着网络层数增加,“梯度消失”现象更加严重。具体来说,我们常常使用 sigmoid 作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。

二、DNN 深度神经网络

为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今 DNN 的基本形式。单从结构上来说,全连接的DNN和多层感知机是没有任何区别的。高速公路网络(highwaynetwork)和深度残差学习(deep residual learning)进一步避免了梯度弥散问题,网络层数达到了前所未有的一百多层。
在这里插入图片描述

(一)梯度消失和梯度爆炸

梯度消失: 网络结构很深的时候,每层反向传播都会乘上激活函数的梯度,而sigmoid函数的梯度最大值是1/4<1,多次乘一个小于1的数会趋向0,所以梯度消失。

梯度消失的解决方法:

  • 使用Relu作为激活函数
  • 人工增加数据量 (叠加噪声)
  • 随机初始化参数 (随机正交矩阵,高斯截断正态分布)
  • 使用预训练

梯度爆炸 在RNN中常会出现,因为反向传播过程中,state会共用W,所以会导致W会随着时间而连乘,如果W的值都大于1,则会梯度爆炸,如果小于1,则会梯度消失,解决梯度爆炸的方法是梯度裁剪,即,当梯度大于某一个阈值的时候,就强行将其限制在这个范围之内。RNN解决梯度消失的问题是采用LSTM作为基本单元。

(二)过拟合与欠拟合

过拟合的解决方法:

  • 及时停止训练
  • 增加数据
  • 添加正则化项(L1和L2)
  • dropout

欠拟合的解决方法:

  • 增强数据

三、CNN 卷积神经网络

(一)CNN的提出原因

  • 全连接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来了参数数量膨胀的问题。过多的参数不仅容易导致过拟合,还容易陷入局部最优。
  • 图像中固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)值得利用,显然应该将图像处理中的概念和神经网络技术相结合。

(二)CNN的结构

卷积神经网络主要是模拟人的视觉神经系统提出来的。卷积神经网络的结构依旧包括输入层、隐藏层和输出层,其中卷积神经网络的隐含层包含卷积层、池化层和全联接层 3类常见构筑。

  • 卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算,这就是多层卷积。
  • 经过卷积层处理的特征维度很大,需要经过池化,也就是对卷积层的输出做下采样。它通过减少特征图的空间尺寸来降低模型的复杂度,同时保留关键的特征信息。这种操作有助于减少计算量,提高网络的泛化能力,并使模型对输入图像的平移、旋转和缩放更加鲁棒。
  • 全连接层的作用是将卷积层和池化层提取的特征进行整合,并进行最终的分类或回归任务。全连接层的特点是每个神经元与前一层的所有神经元相连,形成一个密集的连接网络。
    在这里插入图片描述

(三)CNN的两大特点:局部连接和权值共享

下图左边是全连接,右边是局部连接。对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。
在这里插入图片描述

权值共享 能够进一步减少参数的数量。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核(也称滤波器)的大小),如下图。
在这里插入图片描述

(四)CNN的应用

  • CNN 主要用于处理具有网格结构的数据,如图像数据。它通过卷积层、池化层和全连接层等组件来逐步提取图像中的特征,并用于分类、检测或分割等任务。
  • CNN 在图像处理领域取得了巨大成功,如图像分类、目标检测、语义分割等任务。它能够利用局部连接性和权值共享的特性有效地捕获图像中的空间局部特征,同时减少模型参数量。

(五)经典CNN模型

  • LeNet-5:由 Yann LeCun 在 1998 年提出,是最早的用于手写数字识别的卷积神经网络。它包含卷积层、池化层和全连接层,被广泛应用于数字识别任务。
    在这里插入图片描述

  • AlexNet:由 Alex Krizhevsky 等人在 2012 年的 ImageNet 比赛中首次提出,引领了深度学习在计算机视觉领域的新浪潮。AlexNet 包含了 5 个卷积层和 3 个全连接层,并采用了 ReLU 激活函数和 Dropout 正则化技术。
    在这里插入图片描述

  • VGGNet:由 Simonyan 和 Zisserman 在 2014 年提出,VGGNet 的特点是简洁而深层的架构。它包含了 16 层或 19 层的卷积层,所有卷积层都是 3x3 的卷积核和 2x2 的池化核,通过多个小尺寸的卷积核来提高特征的表达能力。
    在这里插入图片描述

  • GoogLeNet(Inception):由 Google 在 2014 年提出,是一个具有高效性和高性能的深度卷积神经网络。GoogLeNet 使用了一种被称为 Inception 模块的结构,在不同尺度上并行地进行卷积操作,并且通过 1x1 的卷积核来减少参数数量。
    在这里插入图片描述

  • ResNet:由 Microsoft Research 在 2015 年提出,ResNet 是一个非常深的卷积神经网络,其主要贡献是通过残差连接(Residual Connection)来解决深度网络的梯度消失和梯度爆炸问题。ResNet 的核心思想是在网络中添加跳跃连接,使得梯度能够更好地传播,从而允许构建非常深的网络。

在这里插入图片描述

四、RNN 循环神经网络

(一)RNN的核心思想

全连接的DNN还存在着另一个问题——无法对时间序列上的变化进行建模。RNN正是通过存储记忆的方式来解决序列到序列的问题。

在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间段直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。

(二)RNN的架构

RNN层级结构较之于CNN来说比较简单, 它主要有输入层,Hidden Layer, 输出层组成,并且会发现在Hidden Layer 有一个箭头表示数据的循环更新, 这个就是实现时间记忆功能的方法。

在这里插入图片描述
RNN单层展开指,横向展开通常称为按时间序列展开,序列数据预测问题中,预测一个序列中的下一个词,最好能知道哪些词在它前面。
在这里插入图片描述

RNN按时间展开后, W i n p u t W_{input} Winput W h i d d e n W_{hidden} Whidden W o u t p u t W_{output} Woutput都是保持一样,并不是多个,这也是为什么RNN会出现梯度爆炸的原因。
在这里插入图片描述

(三)RNN的BP(BPTT)

RNN的反向传播是按时间序列展开的,和普通的BP算法不一样,叫随时间反向传播(BackPropagation Through Time,BPTT)。它是前馈网络标准反向传播算法的扩展。BPTT 随时间推移展开 RNN,将其视为一个深度神经网络,在时间步长中具有共享权重。梯度是通过将误差传播回展开的网络来计算的。因此,RNN 可以更新其权重并从顺序数据中学习。

(四)RNN的不足

  • 当展开一定步数后,开始输入的数据的记忆经过几次展开传递后,记忆力会衰弱。
  • 当RNN深度和时间序列长度过高时,很容易同时出现梯度消失于梯度爆炸。

(五)常见的RNN示例

  • Elman 网络:Elman 网络是最早的 RNN 变体之一,由 Jeffrey Elman 在 1990 年提出。它包含一个隐藏层,隐藏层的输出被作为下一个时间步的输入,用于建模序列数据的时间依赖关系。
    在这里插入图片描述

  • Jordan 网络:Jordan 网络是另一种经典的 RNN 结构,它也由一个隐藏层组成,但与Elman Network不同的是Jordan Network是将网络的输出层的输出保存在memory中传给下一个时间点。这样同Elman Network比起来我们更清楚memory中保存了什么。
    在这里插入图片描述

  • Long Short-Term Memory(LSTM):LSTM 是一种经典的 RNN 变体,由 Hochreiter 和 Schmidhuber 在 1997 年提出。LSTM 具有特殊的内部结构,包括输入门、遗忘门、输出门等,能够更有效地捕捉长期依赖关系,并解决梯度消失问题。
    在这里插入图片描述

  • Gated Recurrent Unit(GRU):GRU 是另一种常见的 RNN 变体,由 Cho 等人在 2014 年提出。与 LSTM 类似,GRU 也具有门控机制,但参数更少,结构更简单。
    在这里插入图片描述

  • Bidirectional RNN(BRNN):BRNN 是一种特殊的 RNN 结构,它包含两个方向的隐藏层,分别从前向和后向读取输入序列,并将它们的输出连接在一起。这使得模型能够捕捉到序列数据中的双向依赖关系。

在这里插入图片描述

参考:
CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解
深度学习之DNN、CNN和RNN

;