数学建模智能算法之BP神经网络基本原理

一个典型的神经网络结构

数学建模智能算法之BP神经网络基本原理_第1张图片

1、什么是人工神经网络

  • 人工神经网络是由具有适应性的简单单员组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。
  • 人工神经网络(ANN)具有自学习、自组织、较好的容错性和优良的非线性逼近能力。
  • 在实际应用中,80%~90%的人工神经网络模型是采用误差反传算法或其变化形式的网络模型。

2、 ANN能干什么

数学建模智能算法之BP神经网络基本原理_第2张图片

3、神经网络模型和网络结构

神经元模型的确定

  1. 网络结构的确定
    包含网络的拓扑结构和每个神经元相应函数的选取;
  2. 权值和阈值的确定
    通过学习得到,为有指导的学习,也就是利用已知的一组正确的输入、输出数据,调整权和阈值使得网络输出与理想输出偏差尽量小;
    2.1. 权值:对每个影响结果的因子进行加权的权重大小。
    2.2. 阈值:能够让神经元产生反应的最小值数,省略掉无用的反应(降低敏感性,没必要做出反馈的)。
  3. 工作阶段
    用带有确定权重和阈值的神经网络解决实际问题的过程,也叫模拟(simulate)。
  4. 神经元
    大脑可以视为1000亿个神经元组成的神经网络。
    数学建模智能算法之BP神经网络基本原理_第3张图片
    数学建模智能算法之BP神经网络基本原理_第4张图片
激活函数

神经元的信息传递和处理是一种电化学活动.树突由于电化学作用接受外界的刺激;通过胞体内的活动体现为轴突电位,当轴突电位达到一定的值则形成神经脉冲或动作电位;再通过轴突末梢传递给其它的神经元.从控制论的观点来看;这一过程可以看作一个多输入单输出非线性系统的动态过程。

3.1 人工神经元的模型

  • 作为神经网络的基本元素,神经元的模型如下
    数学建模智能算法之BP神经网络基本原理_第5张图片
  • x 1 − x n x_1-x_n x1xn是从其他神经元传来的信号。
  • w i j w_{ij} wij表示从神经元 j j j到神经元 i i i连接的权值。
  • θ \theta θ表示一个阈值(threshold),或称偏置(bias)
  • 神经元的输出与输入的关系为:
    • n e t i = ∑ j = 1 n w i j x j − θ = ∑ j = 0 n w i j x j net_i = \sum_{j=1}^nw_{ij}x_j-\theta = \sum_{j=0}^nw_{ij}x_j neti=j=1nwijxjθ=j=0nwijxj  净激活量
    • y i = f ( n e t i ) y_i = f(net_i) yi=f(neti)               激活函数
  • 若用X表示输入向量,用W表述权重向量:
    • X = [ x 0 , x 1 , x 2 , . . . , x n ] , W = [ w i 0 , w i 1 , w i 2 , . . . , w i n ] T X = [x_0,x_1,x_2,...,x_n], W = [w_{i0},w_{i1},w_{i2},...,w_{in}]^T X=[x0,x1,x2,...,xn],W=[wi0,wi1,wi2,...,win]T
    • n e t i = X W     y i = f ( X W ) net_i = XW  y_i = f(XW) neti=XW  yi=f(XW)

3.2 激活函数

  • 激活函数是对净激活量与输出进行映射的函数。一些常用的激活函数,由于输入数据与期望值之间可能并不是量级一样,所以需要激活。
  • 神经网络说到底求的就是权值。你可以想,我们的输入是无法改变的,输出也是无法改变的,所以能够改变的也就只有权值和激活函数,激活函数只是把数据拉到同一个量级,只有权值才是能直接影响结果是否正确的
  • 那我们要如何使得权值正确呢?首先我们拟合的模型一定是有一个误差的,我们的目的就是让误差函数最小,当我们把权值和误差函数联系在一起时,误差最小时的权值不正是我们所要求的正确的权值吗?
  • 线性函数: f ( x ) = k x + c f(x) = kx+c f(x)=kx+c
  • S形函数: f ( x ) = 1 1 + e − a x f(x) = \frac{1}{1+e^{-ax}} f(x)=1+eax1
  • 阈值函数: f ( x ) = { T , x > c k ∗ x , ∣ x ∣ ≤ c − T x < − c f(x) = \begin{cases}T, & x>c\\k*x , & |x|\leq c\\-T & x<-c \end{cases} f(x)=T,kx,Tx>cxcx<c
  • 双极S形函数: f ( x ) = 2 1 + e − a x − 1 f(x) = \frac{2}{1+e^{-ax}}-1 f(x)=1+eax21
  • 一般来说S形函数和双极S形函数,它求导方便,不容易陷入极端值,对量纲的规划也比较好。
  • 它们的图像为:(它们均为连续函数,一个是0~1,一个是-1~1)求导也方便
    数学建模智能算法之BP神经网络基本原理_第6张图片

3.3 网络结构

  • 根据网络中神经元的互联方式的不同,网络模型分为:
  • 前馈神经网络:
    • 只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到到达输出层,层间没有向后的反馈信号
  • 反馈神经网络
    • 输出到输入具有反馈连接的神经网络,其结构比前馈网络要复杂得多
    • 权值一开始是给出的(初始权值),然后通过权值计算误差,然后再返回去修正权值的神经网络。
  • 自组织神经网络
    • 通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构。
      数学建模智能算法之BP神经网络基本原理_第7张图片

3.4. 工作与学习

  • 神经网络的工作状态分为学习和工作两种状态
  • 学习
    • 利用学习算法来调整神经元间的连接权重,是的网络输出更符合实际。
  • 工作
    • 神经元间的连接权值不变,可作为分类器或者预测数据。
  • 学习分为监督学习和非监督学习
    • 监督学习
      • 将一组训练集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。
      • 例如:BP算法
        数学建模智能算法之BP神经网络基本原理_第8张图片
    • 无监督学习
      • 抽取样本集合红蕴含的统计特性,并以神经元之间的连接权的形式存于网络中。
      • 例如:Hebb学习率
        数学建模智能算法之BP神经网络基本原理_第9张图片

BP算法

基本原理

  • 利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。

信号的正向传播和反向传播

  • 正向传播:
    • – 输入样本---输入层---各隐层---输出层
  • 判断是否转入反向传播阶段:
    • 若输出层的实际输出与期望的输出不符
  • 误差反传
    • 误差以某种形式在各层表示---修正各层单元的权值
  • 网络输出的误差减少到可接受的程度进行到预先设定的学习次数为止

假设输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元

  • 符号定义
    • 输入向量: x = ( x 1 , x 2 , . . . , x n ) x = (x_1,x_2,...,x_n) x=(x1,x2,...,xn)
    • 隐含层输入向量: h i = ( h i 1 , h i 2 , . . . , h i p ) hi = (hi_1, hi_2,..., hi_p) hi=(hi1,hi2,...,hip)
    • 隐含层输出向量: h o = ( h o 1 , h o 2 , . . , h o p ) ho = (ho_1, ho_2,..,ho_p) ho=(ho1,ho2,..,hop)
    • 输出层输入向量: y i = ( y i 1 , y i 2 , . . . , y i q ) yi = (yi_1,yi_2,...,yi_q) yi=(yi1,yi2,...,yiq)
    • 输出层输出向量: y o = ( y o 1 , y o 2 , . . . , y o q ) yo = (yo_1,yo_2,...,yo_q) yo=(yo1,yo2,...,yoq)
    • 误差函数: e = 1 2 ∑ o = 1 q ( d o ( k ) − y o o ( k ) ) 2 e = \frac{1}{2}\sum_{o = 1}^q (d_o(k)-yo_o(k))^2 e=21o=1q(do(k)yoo(k))2
  • 首先,计算各层神经元的输入和输出
    • h i h ( k ) = ∑ i = 0 n w h i x i ( k )       h = 1 , 2 , . . . , p hi_h(k) = \sum_{i=0}^nw_{hi}x_i(k)   h = 1,2,...,p hih(k)=i=0nwhixi(k)   h=1,2,...,p
    • h o h ( k ) = f ( h i h ( k ) )           h = 1 , 2 , . . . , p ho_h(k) = f(hi_h(k))      h = 1,2,...,p hoh(k)=f(hih(k))     h=1,2,...,p
    • y i o ( k ) = ∑ h = 0 p w o h h o h ( k )       o = 1 , 2 , . . . , q yi_o(k) = \sum_{h = 0}^p w_{oh}ho_h(k)   o = 1,2,...,q yio(k)=h=0pwohhoh(k)   o=1,2,...,q
    • y o o ( k ) = f ( y i o ( k ) )         o = 1 , 2 , . . . , q yo_o(k) = f(yi_o(k))    o = 1,2,...,q yoo(k)=f(yio(k))    o=1,2,...,q
  • 第二步利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏倒数
    数学建模智能算法之BP神经网络基本原理_第10张图片
    数学建模智能算法之BP神经网络基本原理_第11张图片
    数学建模智能算法之BP神经网络基本原理_第12张图片
    数学建模智能算法之BP神经网络基本原理_第13张图片
    数学建模智能算法之BP神经网络基本原理_第14张图片

训练和仿真

训练

BP网络的训练就是通过应用误差反传原理不断调整网络权值使网络模型输出值与已知的训练样本输出值之间的误差平方和达到最小或小于某一期望值。虽然理论上早已经证明:具有1个隐层(采用Sigmoid转换函数)的BP网络可实现对任意函数的任意逼近。但遗憾的是,迄今为止还没有构造性结论,即在给定有限个(训练)样本的情况下,如何设计一个合理的BP网络模型并通过向所给的有限个样本的学习(训练)来满意地逼近样本所蕴含的规律(函数关系,不仅仅是使训练样本的误差达到很小)的问题,目前在很大程度上还需要依靠经验知识和设计者的经验。因此,通过训练样本的学习(训练)建立合理的BP神经网络模型的过程,在国外被称为“艺术创造的过程”,是一个复杂而又十分烦琐和困难的过程。

仿真

给出新的输入,得到新的结果,称为仿真。

BP网络的构建

  1. 生成BP网络
    net=newff(PR,[S1 S2…SNl]),{TF1 TF2…TFNl},BTF)
    PR:由R维的输入样本最小最大值构成的R*2维矩阵。
    [S1 S2…SNl]各层的神经元个数。
    {TF1 TF2…TFNl}各层的神经元传递函数。
    BTF训练用函数的名称。
  2. 网络训练
    net=train(net,P,T)
  3. 网络仿真
    Y2=sim(net,P2)

实例

  %traingd
  clear;
  clc;
  P=[-1 -1 2 2 4;0 5 0 5 7];
  T=[-1 -1 1 1 -1];
  %利用minmax函数求输入样本范围
  net = newff(minmax(P),[7,1],{'tansig','purelin'},'trainlm');
  net.trainParam.show=50;%
  net.trainParam.lr=0.05;
  net.trainParam.epochs=1000;
  net.trainParam.goal=1e-5;
[net,tr]=train(net,P,T);
net.iw{1,1}%隐层权值
net.b{1}%隐层阈值
net.lw{2,1}%输出层权值
net.b{2}%输出层阈值
y3=sim(net,P);

输入输出

P =
    -1    -1     2     2     4
     0     5     0     5     7
T =
    -1    -1     1     1    -1

这里你可以认为1代表“有”
这里你可以认为-1代表“无”

输入是"-1,0"时输出为-1
输入是“-1,5”时输出位-1
输入是“-2,0”时输出位1

训练函数

  net = newff(minmax(P),[7,1],{'tansig','purelin'},'trainlm');
  • [7,1]隐藏层神经元为7,输出层神经元为1。
  • 隐藏层传递函数:tansig
  • 隐藏层和输出层的传递函数:purelin
  • 训练函数:trainlm
  • 每50步出现一个结果: net.trainParam.show=50
    数学建模智能算法之BP神经网络基本原理_第15张图片
  • 学习率:net.trainParam.lr=0.05;
  • 迭代最大值:net.trainParam.epochs=1000;
  • 误差最小值:net.trainParam.goal=1e-5;
  • 训练:[net,tr]=train(net,P,T);
  • 权值:
    • net.iw{1,1}%隐层权值
    • net.b{1}%隐层阈值
    • net.lw{2,1}%输出层权值
    • net.b{2}%输出层阈值

你可能感兴趣的:(算法,数学建模)