文章目录

  • 概述
  • 一、神经元模型
  • 二、感知机与多层网络
  • 三、误差逆传播算法
  • 四、全局最小与局部最小
  • 五、BP算法的改进
    • 1.引入动量法
    • 2.尺度变换法
    • 3.自适应学习率调整法
  • 六、BP神经网络的训练
    • 1.产生数据样本集
    • 2.确定网络的类型和结构
    • 3.训练和测试
  • 七、项目实战

概述

神经网络的定义:神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应”。

神经网络中最基本的成分是神经元(neuron)模型,即上述定义中的“简单单元”。

一、神经元模型

神经元是神经网络中最基本的结构,也可以说是神经网络的基本单元,它的设计灵感完全来源于生物学上神经元的信息传播机制。神经元有两种状态:兴奋和抑制。一般情况下,大多数的神经元是处于抑制状态,但是一旦某个神经元收到刺激,导致它的电位超过一个阈值,那么这个神经元就会被激活,处于“兴奋”状态,进而向其他的神经元传播化学物质(其实就是信息)。

1943年,McCulloch和Pitts将上图的神经元结构用一种简单的模型进行了表示,构成了一种人工神经元模型,也就是我们现在经常用到的“M-P神经元模型”,如下图所示:

图中:θθθ是神经元的激活阈值,函数f(⋅)f(⋅)f(⋅)被称为激活函数。
函数f(⋅)f(⋅)f(⋅)可以用一个阶跃方程表示,大于阈值激活,否则则抑制。理想中的激活函数阶跃函数,然而阶跃函数具有不连续、不光滑等不好的性质,因此我们更常用的方法是用sigmoid函数来表示函数函数f(⋅)f(⋅)f(⋅)。

把许多个这样的神经元按-定的层次结构连接起来,就得到了神经网络。

二、感知机与多层网络

感知机(Perceptron)由两层神经元组成,如图所示,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)。

感知机能容易地实现逻辑与、或、非运算。更一般地,给定训练数据集,权重wi(i=1,2,…,n)w_i (i=1, 2, …,n)wi​(i=1,2,…,n)以及阈值θθθ可通过学习得到。

感知机学习规则非常简单,对训练样例(x,y)(x,y)(x,y),若当前感知机的输出为y,则感知机权重将这样调整:


其中η∈(0,1)η∈(0,1)η∈(0,1) 称为学习率(learning rate)。从式可看出,若感知机对训练样例(x,y)(x,y)(x,y)预测正确,即y^=y\hat{y}=yy^​=y,则感知机不发生变化,否则将根据错误的程度进行权重调整。

需注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限.

事实上,上述与、或、非问题都是线性可分(linearly separable)的问题.可以证明,若两类模式是线性可分的,即存在一个线性超平面能将它们分开,如图5.4(a)-©所示,则感知机的学习过程一定会收敛(converge)而求得适当的权向量w=(w1;w2;…;wn+1)w= (w_1;w_2;…;w_{n+1})w=(w1​;w2​;…;wn+1​),否则感知机学习过程将会发生振荡(fuctuation), w难以稳定下来,不能求得合适解,例如感知机甚至不能解决如图5.4(d)所示的异或这样简单的非线性可分问题.

要解决非线性可分问题,需考虑使用多层功能神经元.例如下图中这个简单的两层感知机就能解决异或问题.

在图中,输出层与输入层之间的一层神经元,被称为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元.

更一般的,常见的神经网络是形如图5.6所示的层级结构,每层神经元与下-层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接.这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),

其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出;

换言之,输入层神经元仅是接受输入,不进行函数处理,隐层与输出层包含功能神经元.因此,图5.6(a)通常被称为“两层网络”。

为避免歧义,这里称其为“单隐层网络”。只需包含隐层,即可称为多层网络。

神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中。

三、误差逆传播算法

多层网络的学习能力比单层感知机强得多.需要更强大的学习算法.

误差逆传播(error BackPropagation,简称BP)算法就是其中最杰出的代表,它是迄今最成功的神经网络学习算法.

现实任务中使用神经网络时,大多是在使用BP算法进行训练.值得指出的是,BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络,例如训练递归神经网络[Pineda, 1987].

但通常说“BP网络”时,一般是指用BP算法训练的多层前馈神经网络.

给定训练集D={(x1,y1),(x1,y1),……,(xm,ym)},yi∈RdD=\{(x_{1},y_{1}),(x_{1},y_{1}),……,(x_{m},y_{m})\},y_{i}\in R^{d}D={(x1​,y1​),(x1​,y1​),……,(xm​,ym​)},yi​∈Rd,即输入示例由d个属性描述,输出l维实值向量.

对训练例(xk,yk)(x_k, y_k)(xk​,yk​),假定神经网络的输出为y^k=(y^1k,y^2k,……,y^lk)\hat{y}_{k}=(\hat{y}_{1}^k,\hat{y}_{2}^k,……,\hat{y}_{l}^k)y^​k​=(y^​1k​,y^​2k​,……,y^​lk​),即

则网络在(xk,yk)(x_k, y_k )(xk​,yk​)上的均方误差为:

图5.7的网络中有(d+l+1)q+l(d+l+1)q+l(d+l+1)q+l个参数需确定:输入层到隐层的d×qd×qd×q个权值、隐层到输出层的q×lq×lq×l个权值、qqq个隐层神经元的阈值、lll个输出层神经元的阈值.

BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,即与式类似,任意参数v的更新估计式为:


如何求每一个节点的梯度?
链式法则->反向传播

BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整.对式的误差E_k,给定学习率η,有:

注意到WhjW_{hj}Whj​先影响到第jjj个输出层神经元的输入值BjB_jBj​,再影响到其输出值y^jk\hat{y}_j^ky^​jk​,然后影响到EkE_kEk​,有:

根据BjB_jBj​的定义,显然有:

Sigmoid函数有一个很好的性质:

于是有:

于是,得到了BP算法中关于WhjW_{hj}Whj​的更新公式:

类似可得:


学习率η∈(0,1)η∈(0,1)η∈(0,1)控制着算法每一轮迭代中的更新步长,若太大则容易振荡,太小则收敛速度又会过慢。

BP算法的工作流程.对每个训练样例:

需注意的是,BP算法的目标是要最小化训练集D上的累积误差,

但我们上面介绍的“标准BP算法”每次仅针对一个训练样例更新连接权和阈值,也就是说,算法的更新规则是基于单个的E_k推导而得.

如果类似地推导出基于累积误差最小化的更新规则,就得到了累积误差逆传播(accumulated error backpropagation)算法.

损失函数中,求和并不影响单个求导,所以,是多个样例的求和

两种方法的比较:

  • 标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象.为了达到同样的累积误差极小点,标准BP算法往往需进行更多次数的迭代.
  • 累积BP算法直接针对累积误差最小化,它在读取整个训练集D 一遍后才对参数进行更新,其参数更新的频率低得多.
  • 但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更明显.

两种方法的缺点?
标准BP:震荡,
累积BP:大样本时速度慢

Hornik 在1989年已经证明,只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。然而,如何设置隐层神经元的个数仍是个未决问题,实际应用中通常靠“试错法”(trial-by-error)调整.

试错法:为了追求达到理想目标而通过不断试验和消除误差,探索具有黑箱性质的系统的方法。统称为试错法

有两种策略常用来缓解BP网络的过拟合:

  • 第一种策略是“早停”(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
  • 第二种策略是“正则化”(regularization) [Barron, 1991; Girosi et al, 1995],其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。

仍令EkE_kEk​表示第kkk个训练样例上的误差, wiw_iwi​表示连接权和阙值,则误差目标函数改变为:

其中λ∈(0,1)λ∈(0,1)λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。

四、全局最小与局部最小

若用EEE表示神经网络在训练集上的误差,则它显然是关于连接权www和阈值θθθ的函数。此时,神经网络的训练过程可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使得EEE最小。

两种“最优”:“ 局部极小”(local minimum)和“全局最小”(global minimum)。对w∗w^*w∗和θ∗^*∗,若存在ϵ>0ϵ>0ϵ>0使得:

都有E(w;θ)≥E(w∗;θ∗)E(w;θ)≥E(w^*;θ^*)E(w;θ)≥E(w∗;θ∗) 成立,则(w∗;θ∗)(w^*;θ^*)(w∗;θ∗)为局部极小解;若对参数间中的任意(w;θ)(w;θ)(w;θ)都有E(w;θ)≥E(w∗;θ∗)E(w;θ)≥E(w^*;θ^*)E(w;θ)≥E(w∗;θ∗),则((w∗;θ∗)((w^*;θ^*)((w∗;θ∗)为全局最小解。两者对应的E(w∗;θ∗)E(w^*;θ^*)E(w∗;θ∗) 分别称为误差函数的局部极小值和全局最小值。

基于梯度的搜索是使用最为广泛的参数寻优方法.在此类方法中,我们从某些初始解出发,迭代寻找最优参数值.每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。

如果误差函数具有多个局部极小,则不能保证找到的解是全局最小.对后一种情形,我们称参数寻优陷入了局部极小,这显然不是我们所希望的.

在现实任务中,人们常采用以下策略来试图“跳出”局部极小,从而进一步接近全局最小:

  • 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。
  • 使用模拟退火技术。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率要随着时间的推移而逐渐降低,从而保证算法稳定。
  • 使用随机梯度下降.与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素(选取训练数据中的特例).于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。

此外,遗传算法也常用来训练神经网络以更好地逼近全局最小。

五、BP算法的改进

1.引入动量法

标准BP算法实质上是一种简单的最速下降静态寻优算法, 在修正权值w(k)时,只是按k时刻的负梯度方向进行修正, 没有考虑积累的经验,即以前的梯度方向,从而使学习过程振荡,收敛缓慢。

附加动量法使网络在修正权值时不仅考虑误差在梯度上的 作用,而且考虑在误差曲面上变化趋势的影响。

其中:

  • D(k)D(k)D(k)为kkk时刻的负梯度,D(k−1)D(k-1)D(k−1)为k−1k-1k−1时刻的负梯度。
  • ααα为学习率, α>0α>0α>0
  • ηηη为动量项因子, $0≤η<1 $

所加入的动量项实质上相当于阻尼项,它减小了学习过程 的振荡趋势,改善了收敛性,是一种应用比较广泛的改进 算法。

2.尺度变换法

标准BP学习算法采用的是一阶梯度法,因而收敛较慢。若 采用二阶梯度法,则可以大大提高收敛性。

虽然二阶梯度法具有较好的收敛性,但是需要计算EEE对www的 二阶导数,这个计算量很大。所以一般不直接采用二阶梯度法,而常常采用变尺度法或共轭梯度法,它们具有如二阶梯度法收敛较快的优点,又无需直接计算二阶梯度。

3.自适应学习率调整法

在BP算法中,网络权值的调整取决于学习速率和梯度。

自适应学习率调整准则是:检查权值的修正是否真正降低了误差函数,如果确实如此,则说明所选的学习率小了,可对其增加一个量;若不是则说明产生了过调,那么就应减小学习速率的值。

当连续两次迭代其梯度方向相同时,表明下降太慢,这时可使步长加倍;当连续两次迭代其梯度方向相反时,表明下降过头,这时可使步长减半。

六、BP神经网络的训练

1.产生数据样本集

包括原始数据的收集、数据分析、变量选择和数据的预处理

  • 首先要在大量的原始测量数据中确定出最主要的输入模式。
  • 在确定了最重要的输入量后,需进行尺度变换和预处理。

尺度变换常常将它们变换到[-1,1]或[0,1]的范围。

在进行尺度变换前必须先检查是否存在异常点(或称野点),这些点必须删除。

通过对数据的预处理分析还可以检验其是否存在周期性、固定变换趋势或其它关系。

对数据的预处理就是要使得经变换后的数据对于神经网络更容易学习和训练。

对于一个问题应该选择多少数据,这也是一个很关键的问题。

系统的输入输出关系就包含在数据样本中。一般来说,取的 数据越多,学习和训练的结果便越能正确反映输入输出关系。

但选太多的数据将增加收集、分析数据以及网络训练付出的代价;选太少的数据则可能得不到正确的结果。

事实上数据的多数取决于许多因素,如网络的大小、网络 测试的需要以及输入输出的分布等。

其中网络的大小最关键。通常较大的网络需要较多的训练数据。

在神经网络训练完成后,需要有另外的测试数据来对网络加以检验,测试数据应是独立的数据集合。

最简单的方法是(交叉验证):将收集到的可用数据随机地分成两部分,比如其中三分之二用于网络的训练。另外三分之一 用于将来的测试。随机选取的目的是为了尽量减小这两部分数据的相关性。

影响数据大小的另一个因素是输入模式和输出结果的分布, 对数据预先加以分类可以减小所需的数据量。相反,数据 稀薄不匀甚至覆盖则势必要增加数据量。

2.确定网络的类型和结构

神经网络的类型很多,需根据问题的性质和任务的要求来 合适地选择网络类型。

一般从已有的网络类型中选用一种比较简单而又能满足要求的网络,新设计一个网络类型来满足问题的要求往往比 较困难。

若主要用于模式分类,尤其是线性可分的情况,则可采用 较为简单的感知器网络。

若主要用于函数估计,则可应用BP网络。

在网络的类型确定后,需要选择网络的结构和参数。

以BP网络为例,需选择网络的层数、每层的节点数、初始 权值、阈值、学习算法、学习率等参数。

有些项的选择有一些指导原则,但更多的是靠经验和试凑。

对于网络层数的选取:
增加层数主要可以更进一步降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间。
而误差精度的提高实际上也可以通过增加隐含层中的神经元数目来获得,其训练效果也比增加层数更容易观察和调整。所以,一般情况下,应优先考虑增加隐含层中的神经元数。

对于每层节点数的选取:
对于具体问题若确定了输入和输出变量后,网络输入层和输出层的节点个数也便随之确定了。
隐层节点数对网络的泛化能力有很大的影响。节点数太多,倾向于记住所有的训练数据,包括噪声的影响,反而降低了泛化能力;节点数太少,不能拟和样本数据,没有较好的泛化能力。
原则:选择尽量少的节点数以实现尽量好的 泛化能力。
具体选择可采用如下方法:先设较少的节点,对网络进行训练,并测试网络的逼近误差,然后逐渐增加节点数,直到测试的误差不再有明显的减少为止。

初始权值的选取:
由于系统是非线性的,初始值对于学习是否达到局部最小、是否能够收敛以及训练时间的长短关系很大。
如果初始值太大,使得加权后的输入落到激活函数的饱和区,从而导致其导数非常小,而在计算权值的修正公式中,修正量正比与其导数,从而使调节过程几乎停顿下来。
一般总是希望经过初始加权后的每个神经元的输出值都接近于零,这样可以保证每个神经元的权值都能够在他们的S 型激活函数变化最大之处进行调节。所以,一般取初始权 值在(-1,1)之间的随机数。

学习速率的选取:
学习速率决定每一次循环训练中所产生的权值变化量。大的学习速率可能导致系统的不稳定 ;小的学习速率会导致训练较长,收敛速度很慢。不过能保证网络的误差值不跳出表面的低谷而最终趋于最小误差值。
一般情况下,倾向于选取较小的学习速率以保证系统的稳 定性。学习速率一般的选取范围为0.01-0.80.01-0.80.01-0.8 和初始权值的选取过程一样,在一个神经网络的设计中,网络要经过几个不同的学习速率的训练。通过观察每一次训练后的误差平方和的下降速率来判断选定的学习速率是否合适。 如果下降很快,说明学习速率合适。若出现振荡,则说明学习速率过大。
对于较复杂的网络,为了减小寻找学习速率的训练次数以及训练时间,比较合适的方法是采用自适应学习速率。

3.训练和测试

对所有样本数据正向运行一次并反向修改连接权一次称为一 次训练(或一次学习) 。 通常训练一个网络需要成百上千次。 并非训练的次数越多,越能得到正确的输入输出的映射关系。

训练网络的目的在于找出蕴含在样本数据中的输入和输出之间的本质联系,从而对于未经训练的输入也能给出合适的输出,即局部泛化能力。

网络的性能主要是用它的泛化能力来衡量,它不是用对训练数据的拟和程度来衡量,而是用一组独立的数据来加以测试和检验。

由于所收集的数据都是包含噪声的,训练的次数过多,网络将包含噪声的数据都记录了下来,在极端情况下,训练后的网络可以实现相当于查表的功能。但是对于新的输入数据却不能给出合适的输出,即并不具备很好的泛化能力。

实际操作时应该训练和测试交替进行,即每训练一次,同时用测试数据测试一遍,画出均方误差随训练次数的变换曲线 。

在用测试数据检验时,均方误差开始逐渐减小,当训练次数再增加时,测试检验误差反而增加,误差曲线上极小点所对应的即为恰当的训练次数,若再训练即为“过度训练”了。

七、项目实战

项目实战请转至:
[1] tensorflow学习笔记(三):利用BP线性回归
[2] tensorflow学习笔记(四):利用BP手写体(MNIST)识别

系列相关论文:
1.卷积神经网络CNN模块化剖析
2.用于图像分类的经典的卷积神经网络CNN
3.神经⽹络可以计算任何函数的可视化证明

BP神经网络的详细推导相关推荐

  1. 【深度学习】感知器、线性神经网络案例应用、BP神经网络算法详细推导

    感知器.线性神经网络.BP神经网络及手写数字识别 1. 单层感知器 1.1 感知器的介绍 1.2 感知器的学习规则 1.3 感知器单输入输出示例 1.4 学习率 η\etaη 1.5 模型训练收敛条件 ...

  2. BP神经网络的详细推导 与 完整代码

    文章目录 BP推导全过程 一些变量的含义 一些公式 开始推导 任意层BP网络代码实现 运行结果如 BP推导全过程 最近老师布置了一个神经网络的作业,正好练习下LaTeX,顺便写了这个博客 BP的整个过 ...

  3. matlab 神经网络 参数,BP神经网络matlab详细参数

    基于matlab BP 神经网络参数详解 (1)生成BP 网络 (,[1 2...],{ 1 2...},,,)net newff PR S S SNl TF TF TFNl BTF BLF PF = ...

  4. BP神经网络算法推导

    一:算法推导 神经网络通过模拟人的神经元活动,来构造分类器.它的基本组成单元称为"神经元",离线情况下如果输入大于某值时,设定神经元处于兴奋状态,产生输出,否则不响应.而这个输入来 ...

  5. Matlab 遗传算法优化BP神经网络

    最近在学遗传算法优化BP神经网络,从新浪博客,Matlab中文论坛以及<MATLAB 神经网络43个案例分析>里看了许多资料, 存在着缺少test函数,以及函数名调用错误等问题.自编了te ...

  6. BP神经网络C语言实现

    BP神经网络C语言实现 山人 BP神经网络应用广泛,大概是今年的五月份左右,我需要做一个多元函数的拟合,所以写了这个BP神经网络.为什么要使用C语言来写呢?因为我的程序需要在单片机上跑,所以不得不使用 ...

  7. 深度学习(二) 神经网络基础算法推导与实践

    深度学习的核心就是各种不同的神经网络模型(CNN.RNN.GCN.GNN等)的学习和训练过程.这些神经网络模型的共同点都是一个"黑盒子",通过一定的学习算法将大量数据交给模型训练, ...

  8. BP神经网络原理详解

    从神经网络的生物模型说起 我们知道人大脑信息的传递.对外界刺激产生反应都由神经元控制的,人脑就是由上百亿个的这样神经元构成.这些神经元之间并不孤立而且联系很密切,每个神经元平均与几千个神经元相连接,因 ...

  9. BP神经网络的梯度公式推导(三层结构)

    本站原创文章,转载请说明来自<老饼讲解-BP神经网络>bp.bbbdata.com   目录 一. 推导目标 1.1 梯度公式目标 1.2 本文梯度公式目标 二. 网络表达式梳理 2.1 ...

最新文章

  1. TPAMI 2022 | 国防科大等高校提出光场解耦机制,在超分辨与视差估计任务上取得优异性能...
  2. 洛谷P2672 推销员
  3. 哥本哈根能效中心:阿里云用清洁的计算能力改变世界
  4. 信号处理常用算法介绍
  5. Asp.Net Core 通过中间件防止图片盗链
  6. 升级php7_Drupal 8.8.0 正式发布,升级须知
  7. 第三方支付平台源码 商业支付源码
  8. Android蓝牙通信功能开发
  9. Ubuntu 16.04安装MySQL(5.7.18)
  10. 关于SharePoint V3网站老弹出“此网站需要运行以下载项:'Microsoft Corporation'中的'name.dll'......”的3种解决办法...
  11. python是什么 自学-你是如何自学 Python 的?
  12. Python 二次开发 AutoCAD 简介
  13. 什么软件可以压缩图片大小?这几个软件值得收藏
  14. 永磁同步电机矢量控制学习--MTPA控制策略
  15. 【数学】海 盗 埋 宝 pt.2
  16. 番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案
  17. python修改sheet名称_python excel练习:新建sheet、修改名称、设定颜色、打印sheet名称,复制,保存...
  18. 使用Excel分析数据学习笔记之 二分类与混淆矩阵
  19. Android 百度地图应用定位经纬度返回4.9E-324有关问题
  20. 手机app视频平台开发怎么做

热门文章

  1. Linux下的FTP安装和登录
  2. Unity编码解析以及常用转换
  3. 多态的实现机制是什么?
  4. dparsf是什么_回顾:第五届DPABI/DPARSF特训营暨DPABISurf加强营
  5. spring-cloud-security
  6. 辽宁机电职业技术学院计算机专业在哪个校区,辽宁机电职业技术学院
  7. 2021赤峰二中高考成绩查询,2021年赤峰高考状元名单公布,赤峰高考状元学校资料及最高分...
  8. THANK YOU FOR YOUR CONCERN, SIOBAN AND ANTHONY
  9. canvas 绘制七巧板
  10. MySQL week()函数及参数mode详解