当先锋百科网

首页 1 2 3 4 5 6 7

神经网络概况

人们对机器智能的研究主要包括两方面:

  1. 尝试对智能生物的自然智能建立数学模型;
  2. 根据数学模型,利用数学手段,以计算机为工具载体建立具备一定智能的机器。

人工神经网络的基本思想:神经系统是由大量神经细胞为基础单元构成的复杂网络,是以自然神经系统的构造和机理为基础,建立的一定的数学模型和算法。采用不同的数学模型就能够得到不同的神经网络,其中最有影响的模型是多层感知器模型。

多层感知器模型的作用:

  • 从训练数据中学习任意复杂的非线性映射能力;
  • 实现复杂的非线性分类判别函数。
    即多层感知器能够以任意精度去逼近一个任意复杂的非线性函数,被视为一种“万能”分类器。

多个感知器实现非线性分类

单个感知器能够完成线性可分数据的分类问题;但是无法解决非线性问题,例如异或问题(XOR)。
多个神经元分层组合起来实现复杂的空间形状的分割。用分段线性判别函数可以实现复杂的非线性分类面,那么对于任意复杂形状的分类区域总可以用多个神经元组成一定层次结构来实现。即可以使用多个感知器的组合来实现非线性分类面。
y = θ { ∑ j = 1 n v j θ ( ∑ i = 1 m w i j x i + w 0 j ) + v 0 } θ ( ⋅ ) 为阶跃函数或符号函数 y=\theta \left\{ \sum_{j=1}^n{v_j}\theta \left( \sum_{i=1}^m{w_{ij}x_i+w_{0j}} \right) +v_0 \right\} \\ \theta \left( \cdot \right) \text{为阶跃函数或符号函数} y=θ{j=1nvjθ(i=1mwijxi+w0j)+v0}θ()为阶跃函数或符号函数

人工神经网络的一般分类

人工神经网络可以看作由大量神经元连接而成的学习机器,主要可以分为3类:
1、前馈型神经网络
2、反馈型神经网络
3、竞争学习神经网络

前馈型神经网络

基本特点:节点按照一定的层次排列,信号按照单一的方向从一层传递到下一层节点,网络连接是单向的。
在这种分层的神经网络中,可以将每一层看作是对特征进行一次加工或变换。如果节点传递函数是线性函数则这种变换是线性变换;如果节点传递函数是非线性函数则该种变换是非线性变换。经过一系列变换之后由网络的最后一层节点来进行决策。

在一个多层感知器中,如果最后一层的节点采用阈值逻辑函数,那么多层感知器实际上是通过隐层节点对样本特征进行非线性变换,然后在变换空间中采用感知器准则函数构建线性分类器。

反馈型神经网络

  • 基本特点
    输入信号作用于神经元节点后,各个节点的输出又作为输入反馈到各节点上,形成一个动态系统,当系统稳定后读取输出。

竞争学习神经网络

  • 基本特点
    神经元节点通常排列在同一个层次上,没有反馈连接,但是神经元网络之间有横向的连接或互有影响,在学习时通过神经元之间的竞争实现特定映射。

反向传播算法

前馈型神经网络

在多层的阈值逻辑单元中,由于神经元的传递函数是阶跃函数,输出端的误差只能是对最后一个神经元的系数求梯度,而无法对其他神经元的权系数求梯度,故无法使用该梯度下降法训练其他神经元的权值。

  • 反向传播算法主要突破:用Sigmoid函数代替感知器中的阈值函数构造神经元网络。
  • 函数替代主要思想:逼近思想。
  • 函数对比:
    阶跃函数在 α = 0 \alpha=0 α=0处不可导。当 α → ∞ \alpha \rightarrow \infty α时,Sigmoid函数与阶跃函数相同,但是Sigmoid函数的函数取值从0到1不是突然完成的,而是平滑地完成的,其取值范围为 ( 0 , − 1 ) (0,-1) (0,1)
  • 符号函数逼近:
    双曲正切: f ( α ) = t h ( α ) = e α − e − α e α + e − α = 2 e α + e − α − 1 \text{双曲正切:}f\left( \alpha \right) =th\left( \alpha \right) =\frac{e^{\alpha}-e^{-\alpha}}{e^{\alpha}+e^{-\alpha}}=\frac{2}{e^{\alpha}+e^{-\alpha}}-1 双曲正切:f(α)=th(α)=eα+eαeαeα=eα+eα21
    其取值范围为 ( − 1 , − 1 ) (-1,-1) (1,1)

激活函数

激活函数主要分为两类:饱和激活函数和非饱和激活函数。
饱和激活函数包括sigmoid、tanh;
非饱和激活函数包括ReLU、PReLU、Leaky ReLU、RReLU、ELU等。
使用“非饱和激活函数”的优势在于两点:(1)"非饱和激活函数”能解决所谓的“梯度消失”问题。(2)它能加快收敛速度。

Sigmoid函数

  • 函数形式与曲线走向
    在这里插入图片描述
    在这里插入图片描述
    sigmoid函数能够把输入的连续实值变换为0和1之间的输出。如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

  • Sigmoid 激活函数适合情况:
    1、Sigmoid 函数的输出值限定在 0 到 1之间,所以它对每个神经元的输出进行了归一化;
    2、用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;
    3、梯度平滑,避免出现阶跃的输出值;
    4、函数是可微,可以找到任意点的 sigmoid 曲线的斜率。

  • Sigmoid 激活函数缺点
    1、容易出现梯度消失;
    2、函数输出并不是零均值;
    3、幂运算相对来讲比较耗时。

BP算法

  • 目标:采用梯度下降法通过更新网络中的权值,从而使得神经网络在所有训练样本上的预测输出与期望输出的均方误差最小化并达到函数收敛的效果。

基本过程:

  • 前向过程:
    在训练开始前,随机赋予各权值一定初值;在训练过程中,轮流对网络施加各个训练样本, 当某个训练样本作用于神经网络输出端后,利用当前权值计算神经网络的输出。
  • 反向过程:
    计算得到的输出与训练样本的正确输出的误差,根据误差对输出层的偏导数修正权值;然后根据链式法则将误差反向传播到倒数第二层的各节点上,同样根据误差对节点权值的偏导数修正权值,再往上追溯,直到把各层的权值都修正一遍。然后从训练集中抽出另外一个样本进行训练,直到在一轮训练中总的误差水平达到预先设定的阈值或者训练时间到达预定的上限。

关键:利用Sigmoid函数使得误差能够对所有权值项进行计算梯度,然后误差能够反向传播到各隐层节点使得中间各层能够对权值进行学习。
具体推导请看
Bp神经网络详细推导与代码演示

多层感知器网络用语模式识别

在一个模式识别的问题中,需要根据样本的特征向量 x x x来预测样本的分类。多层感知器神经网络具有通用非线性函数逼近器的性质能够实现分类任务,如果用多层感知器来执行分类任务,由于多层感知器的输出 y y y是连续变量,那么就需要用神经网络输出来对类别进行适当编码。

两类问题

针对两类问题,通常采用单个输出节点。
1、在训练阶段将其中一类样本的期望输出指定为0,另一类的输出期望指定为1.
2、在对新样本进行分类决策时,根据已定阈值来进行判断,如果大于阈值则决策为1一类,否则决策为0一类。

  • 阈值设定:
    1、根据具体问题,可以采用其他阈值,以调整对两类错误率的偏重或者对两类先验概率的认识,还能够采用ROC曲线来考察阈值变化对两类错误率及灵敏度和特异性的影响。
    2、可以引入拒绝域,当输出y大于某阈值(如0.7)时决策为1一类,小于另一阈值(如0.3)时决策为0一类,中间取值时拒绝决策。

多类问题

用多个输出节点的的多层感知器网络实现多类分类。
对于c类问题,设计c个输出节点的神经网络,使得每个节点对应于一个网络。
1、训练阶段,对于属于第i类的样本,设定第i个输出节点的期望为1,其余节点为0;
2、对新样本进行识别时,考察各个输出节点的对应的类别,以输出值最大的节点所对应的类别作为该样本的类别决策。

特征预处理

神经网络的节点采取的传递函数对特征的取值范围具有范围要求。如Sigmoid函数,其自变量取值范围为 ( − ∞ , + ∞ ) \left( -\infty ,+\infty \right) (,+),而值域范围为 [ 0 , 1 ] [0,1] [0,1],但是如果自变量的实际取值相当大,无论是100还是200对神经元来说都趋于无穷大,那么该神经元输出非常接近,并且难以收敛。

故通常会对特征进行标准化,通过调整特征的尺度和平移特征的均值,使得各特征的取值都在Sigmoid函数较灵敏的自变量取值范围内。

神经网络结构的选择

一般来说采用三层神经网络(包含一个隐含层)就能够比较好地完成任务。输入层节点数目为样本特征的维数;输出层节点数目根据问题确定(分类类别数目);隐含层的节点数目不确定。

  • 过学习:通常来说,隐含层节点数目越多则神经网络的“学习能力”越强,在训练集上容易收敛到一个训练误差较小的解。但是在训练集上过强的学习能力面对新的样本效果不一定就好,可能会发生过拟合,所以一味增加多层感知器的隐含层的节点数目并不可取。
  • 欠学习:隐含层的节点数目如果过少,那么神经网络的学习能力就较弱,无法构成复杂的非线性分类面,对于复杂的数据训练误差较大。

多层感知器的结构选择主要聚焦于隐含层的节点数目的设定,实现过学习与欠学习之间的平衡。

通常有三种方法来确定隐含层的节点数目,

  1. 根据具体问题进行试探选择;
  2. 根据对问题的先验知识来精心设计隐含层的层数和节点数目;
  3. 尝试用算法来确定隐含层节点数目,如裁剪方法。