目录
1. 神经网络结构
基础的神经网络结构有三类:前馈网络、记忆网络、图网络。
实际应用中的大多数神经网络为复合型结构,即一个神经网络中包括多种结构。
(1)前馈网络
前馈网络中各个神经元按接收信息的先后分为不同的组.每一组可以看作一个神经层。每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播,可以用一个有向无环路图表示。
前馈网络包括全连接前馈网络和卷积神经网络等.前馈网络可以看作一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。这种网络结构简单,易于实现。
(2)记忆网络
记忆网络,也称为反馈网络,网络中的神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息。和前馈网络相比,记忆网络中的神经元具有记忆功能,在不同的时刻具有不同的状态。记忆神经网络中的信息传播可以是单向或双向传递,因此可用一个有向循环图或无向图来表示。
记忆网络包括循环神经网络、Hopfield 网络、玻尔兹曼机、受限玻尔兹曼机等。记忆网络可以看作一个程序,具有更强的计算和记忆能力。为了增强记忆网络的记忆容量,可以引入外部记忆单元和读写机制,用来保存一些网络的中间状态,称为记忆增强神经网络(Memory Augmented NeuralNetwork,MANN),比如神经图灵机和记忆网络等。
(3)图网络
前馈网络和记忆网络的输入都可以表示为向量或向量序列,但实际应用中很多数据是图结构的数据,比如知识图谱、社交网络、分子(Molecular )网络等,前馈网络和记忆网络很难处理图结构的数据。图网络是定义在图结构数据上的神经网络.图中每个节点都由一个或一组神经元构成。节点之间的连接可以是有向的,也可以是无向的。每个节点可以收到来自相邻节点或自身的信息。
图网络是前馈网络和记忆网络的泛化,包含很多不同的实现方式,比如图卷积网络(Graph Convolutional Network,GCN)、图注意力网络(Graph Attention Network,GAT)、消息传递神经网络(Message Passing Neural Network,MPNN)等。
2. 前馈神经网络
前馈神经网络(Feedforward Neural Network)是最早和最简单的神经网络类型之一,它是一种没有循环连接的人工神经网络,数据在其中只沿着一个方向流动,即从输入层到输出层,经过隐藏层。这种网络的每一层神经元都与下一层的神经元相连,但没有反馈回路,这意味着数据流不会在任何一点返回到之前的层。
前馈神经网络的基本组成部分包括:
- 输入层:接收原始数据的输入节点。
- 隐藏层:位于输入层和输出层之间的层。一个前馈网络可以有多个隐藏层,每个隐藏层包含一定数量的神经元。
- 输出层:产生最终输出或预测结果的层。
- 权重和偏置:连接神经元的权重以及每个神经元的偏置值用于调整信号的强度和阈值。
- 激活函数:用于确定神经元是否应该被激活的非线性函数,常见的激活函数有sigmoid、ReLU(Rectified Linear Unit)、tanh等。
前馈神经网络的工作流程如下:
- 输入数据传递给输入层的神经元。
- 输入层神经元将加权后的输入传递给第一隐藏层的神经元。
- 每个隐藏层的神经元对输入应用其权重和偏置,然后通过激活函数处理,将结果传递给下一层。
- 最后,输出层的神经元产生最终的输出。
前馈神经网络通过反向传播算法进行训练,该算法使用梯度下降法来最小化损失函数,从而调整权重和偏置,使得网络能够更好地拟合训练数据。
通用近似定理:
通俗讲就是,只要前馈神经网络足够复杂(神经元足够多),就可以模拟预测一切问题。
实际上,寻找完美的参数以及足够的神经元去解决一切问题是不可行的,因为我们没有足够的时间成本和计算资源,否则也不会有其他机器学习方法了。
3. 神经元
人工神经元(Artificial Neuron),简称神经元(Neuron),是构成神经网络的基本单元,其主要是模拟生物神经元的结构和特性,接收一组输入信号并产生输出。
神经元结构图中,除了输入、输出a,关键部件就是参数、求和、激活函数3项,求和运算简单,神经网络的参数w和b由前向传播和反向传播算法多次迭代得到,后面第5节会详细讲述,剩下的关键点就是如何选择激活函数。
4. 激活函数
激活函数的功能是模拟生物神经元中的细胞体,细胞体只有兴奋和抑制两种状态,因此激活函数只需要将输入信息处理为两种状态(或两类值)即可。
常用的激活函数有两类,S型和斜坡型。
4.1 S型激活函数
常用的S型(sigmoid型)激活函数有Logistic函数和Tanh函数,两种函数可以互相转化:
一般说sigmoid函数就是指Logistic函数,由于Logistic函数的值域为[0,1],因此作为输出层激活函数其输出可直接视为概率。但同时由于其输出均为正值,作为隐藏层激活函数处理信息时效果不佳(向量x*正值,全为正或全为负),因此隐藏层采用Tanh函数可能效果更好。
为提升计算速度,还可利用一阶泰勒展开原理,将Logistic和Tanh函数近似取为三段直线的组合,称Hard-Logistic和Hard-Tanh函数:
4.2 斜坡型激活函数
(1)ReLU函数
ReLU(Rectified Linear Unit,修正线性单元)也叫Rectifier 函数。
为了解决“死亡ReLU问题”,可采用“带泄露的ReLU(Leaky ReLU)”、"带参数的ReLU(Parametric ReLU,PReLU)"、“ELU 函数”或者“Softplus 函数”:
带泄露的ReLU(Leaky ReLU):
带参数的ReLU(Parametric ReLU,PReLU):
ELU 函数:
Softplus 函数:
(2)Swish函数
Swish 函数是一种自门控(Self-Gated)激活函数,定义为:
5. 参数学习
简言之,神经网络学习准则是:前向传播计算损失,反向传播计算参数。
5.1 前向传播
前向传播(Forward Propagation)是神经网络中数据处理的一个核心过程,它描述了从输入层到输出层的数据流动机制。在这个过程中,神经网络接收输入信号,通过一系列的数学运算,最终产生输出信号。前向传播的主要目的是计算网络的输出,以便于进行预测或分类任务。
前向传播的基本步骤:
- 初始化参数:神经网络的权重(weights)和偏置(biases)在训练开始前需要进行初始化,这些参数在训练过程中会被更新以优化网络性能。
- 输入数据:将输入数据传递给网络的输入层。输入数据可以是一张图像、一段音频信号、文本数据等等,通常会被转换成适合神经网络处理的数字形式(张量)。
- 加权求和:在每一个神经元中,所有输入信号与相应的权重相乘,然后求和。这个操作通常被称为点积(dot product)或内积(inner product)。
- 激活函数:求和的结果通过激活函数进行转换,激活函数引入了非线性特性,使神经网络能够学习复杂的函数映射。
- 层间传递:处理过的信号作为下一层的输入。这一过程在所有隐藏层中重复进行,直到到达输出层。
- 输出层计算:最后,输出层产生最终的输出,这可能是分类的概率分布,或是回归任务的连续值预测
第一次前向传播采用的是初始参数,第二次采用的就是反向传播更新后的参数值了。
5.2 反向传播
反向传播(Backpropagation)是训练神经网络时使用的一种算法,主要用于最小化预测输出与实际输出之间的差异。它是监督学习中梯度下降方法的关键组成部分,用于调整神经网络的权重和偏置,以优化网络性能。反向传播算法的核心思想是利用链式法则计算损失函数相对于每个权重的梯度,然后根据这些梯度更新权重。
反向传播的基本步骤:
- 前向传播:首先执行一次前向传播,计算网络的输出。
- 计算损失:在前向传播完成后,使用损失函数(如均方误差MSE、交叉熵等)来衡量网络输出与期望输出之间的差距。
- 梯度计算:反向传播算法开始于输出层,计算损失函数相对于每个权重的梯度。这是通过应用链式法则来实现的,从输出层开始,逐步向前,直到输入层。梯度指示了损失函数在每个权重的方向上的变化率。
- 权重更新:一旦计算出了每个权重的梯度,就可以使用梯度下降或其他优化算法(如随机梯度下降SGD、Adam等)来更新权重。
- 迭代过程:上述过程在一个训练周期(epoch)中对整个训练集重复多次,每次更新权重后,都会再次进行前向传播以计算新的损失,并继续反向传播进行权重更新,直到达到预定的停止条件,如最大迭代次数或满足某种收敛标准。
反向传播算法之所以高效,是因为它能同时计算所有权重的梯度,而不是逐一尝试调整每个权重,这样大大减少了训练时间。
关于前向与反向传播的原理,可参看下面这篇博客:
前向传播、反向传播https://blog.csdn.net/weixin_43135178/article/details/115294747
讲梯度计算,就得讲下计算图:计算图是一种数据结构,在深度学习中,计算图用于表示神经网络的计算过程。例如:
上述函数可视为如下6个简单函数的复核函数:
计算图,就是给这6个简单函数指定计算顺序:
计算图有两种:静态图和动态图,分别类似于显式函数和隐式函数,详细的内容可参看下文:
6. 算法优化
6.1 优化问题
神经网络算法参数学习较传统的线性模型更难,主要原因是存在两个问题,1)非凸优化问题、2)梯度消失问题。
(1)非凸优化问题
非凸优化问题是指在优化过程中目标函数或约束条件不是凸函数的优化问题。在凸优化中,如果函数是凸的,则任何局部最小值都是全局最小值,这使得寻优过程相对简单和可靠。然而,在非凸优化中,函数可能具有多个局部最小值,而且这些局部最小值不一定是最优解,这使得寻找全局最小值变得复杂和具有挑战性。
神经网络的损失函数通常非凸是因为它们具有大量的权重和参数,导致损失表面存在多个局部最小值和鞍点。
(2)梯度消失问题
梯度消失问题(Vanishing Gradient Problem)是深度学习和神经网络训练中经常遇到的一个挑战,尤其是在使用具有饱和非线性激活函数(如Sigmoid或tanh)的深层网络中更为突出。这个问题表现为在网络的训练过程中,梯度在反向传播至网络的早期层时变得非常小,以至于几乎无法引起权重的有效更新,从而导致训练过程变得缓慢或完全停滞。
6.2 优化方法
优化方法主要是为了解决以上两个问题:非凸优化问题和梯度消失问题。前馈神经网络的优化方法主要集中在两个方面:一是优化权重初始化;二是优化权重更新过程,即优化器的选择和调整。
下面介绍几种常见的优化技术:
(1) 权重初始化
权重初始化对网络的收敛速度和最终性能有重要影响。常见的初始化方法包括:
- 随机初始化:最初的方法是使用小范围内的随机数初始化权重,但这可能导致梯度消失或梯度爆炸。
- Xavier/Glorot 初始化:基于输入和输出单元的数量来调整权重的范围,确保每一层的方差大致相同。
- He 初始化:类似于Xavier初始化,但适用于使用ReLU等非线性激活函数的情况。
(2) 优化器
优化器负责更新网络中的权重,以最小化损失函数。常见的优化器包括:
- 随机梯度下降(SGD):是最基本的优化算法,按批次更新权重,使用学习率调整步长。
- 动量(Momentum):在SGD基础上增加了一个动量项,帮助加速收敛并缓解局部极小值的问题。
- AdaGrad:自适应学习率算法,根据历史梯度的平方和调整学习率,但在高维空间中可能造成学习率过早衰减。
- RMSProp:改进了AdaGrad,使用指数加权平均的梯度平方,防止学习率过早衰减。
- Adam(Adaptive Moment Estimation):结合了Momentum和RMSProp的优点,通过估计梯度的一阶矩和二阶矩来动态调整学习率,是目前非常流行的选择。
(3) 正则化
正则化技术用于防止过拟合,常见的有:
- L1 和 L2 正则化:在损失函数中加入权重的绝对值或平方和,鼓励权重稀疏。
- Dropout:在训练过程中随机“丢弃”一部分神经元,以减少模型依赖特定特征的程度。
(4) 早停法
当验证集上的性能不再提升时提前终止训练,避免过拟合。
(5) 超参数调优
使用网格搜索、随机搜索或贝叶斯优化等方法寻找最佳的超参数组合。
这些优化技术可以单独使用,也可以组合使用,具体取决于网络架构、数据特性和任务需求。合理的优化策略可以显著提升前馈神经网络的训练效果和预测能力。