神经网络预测法
数学建模系列讲座
基于神经网络的预测与分类
万敏 理学院
一、有导师学习神经网络的原理; matlab实现; BP、RBF在预测、分类中的应用; PNN在分类中的应用
二、无导师学习神经网络的原理; matlab实现; 竞争神经网络、SOFM在分类、聚类中的应用
人工神经网络产生背景
机器智能
研究怎样用机器(计算机)模仿人脑 从事推理、设计、思考、学习等思维活动, 以解决和处理较复杂的问题。
R
ni wij p j j 1
a f W T p
权值, 求和,激活函数
多层前馈神经网络
x1
w11
w12
w13
n f 1 1 a11 11
n f2 2 a12 11
w21
x2
w22
w23
n f1
1
a
1 2
22
n f2
2
a
2 2
22
wR1 wR 2
wR3
n f 1 s1
a1
1 s1 s1
xR
输入层
如何创建一个三层BP神经网络学习样本?设隐含层
神经元个数为6.
▪ net=newff(P,T,6)
网络结构:2-6-1
P=[0.1,0.2; 0.98, 0.75;…0.87, 0.6;]%每行为一样本的输入
T=[0.7; 0.8;…0.2;]%每行为对应样本的期望输出
▪ Net=newff(P,T,6,{tansig, purelin}, trainlm, lerangdm, mse)
x1
多输入 x2
w1 权值 w2
wn
n 阈值
激活函数
a
f
单输出
xn
输入-输出关系
n
净输入 n wi xi wT x i 1
a f (n) f (wT x)
w1
w2
w 其中,
wn
1
x1
x2
x
xn
常见的几类激活函数
这些非线性函数具有两个显著的特征,一是 突变性,二是饱和性,这正是为了模拟神经 细胞兴奋过程中所产生的神经冲动以及疲劳 等特性
▪ 学习好以后的网络进行预测、分类等等
下面将给出三种典型的有导师学习的神经网 络:BP,RBF,PNN
BP(反向传播)神经网络原理
一、结构
1、多层前馈网络: x1
j
前、后层之间各神经元 x2
实现全联接;同一层的
误差反向传播(学习算法)
i
k
-+
神经元之间无联接。
xn
M wij
q wki
L
输入层 隐含层 输出层
▪ Levenberg-Marquardt法实际上是梯度下降法和牛顿 法的结合,它的优点在于网络权值数目较少时收敛非 常迅速。应用Levenberg-Marquardt优化算法比传统的 BP及其它改进算法(如共轭梯度法,附加动量法、自 适应调整法及拟牛顿法等)迭代次数少,收敛速度快, 精确度高。但对于复杂问题,需要更大的存储空间
shape
p = texture
w eight
a f (W , p)
期望输出 t=1---苹果 t=0---香蕉
有导师的学习
期望输出(向量)
训练样本:{ p1, t 1} { p2, t 2} {pQ,tQ }
输入(向量)
基本思想:
对样本对(输入和期望输出)进行学习;将样本的输 入送至神经网络,计算得到实际输出;若实际输出与 期望输出之间的误差不满足精度要求,则调整权值W
▪ MATLAB中的工具函数trainlm()即对应LevenbergMarquardt法的改进算法。
BP网络的Matlab工具箱函数
1、BP神经网络创建函数:
函数newff用于创建一个BP神经网络,其调用格式为:
net = newff(P,T,[S1 S2...SN],{TF1 TF2...TFN},BTF,BLF,PF)
神经元模型
突触
突触
神经元与神经元之间如何 相互作用(传递信息)?
依赖于突触的联接!突触的联接 会受外界信息的影响或自身生长 过程的影响而变化。正是通过神 经元及其突触联接的可变性,使 得大脑具有学习、记忆和认知等 各种智能。
连接权值w对应于突触
完成输入-输出的非线性映射,有三个关键
连接权值 求和单元 激活函数
Forward Propagation
a0 = p
am + 1 = f m+ 1 Wm + 1am + bm+ 1
m = 0 2 M – 1
a = aM
2、误差反向传播
训练样本: {p1, t1} {p2, t2} {pQ,tQ }
均方误差(单输出)
均方误差(多输出)
Fx= Ee2 = Et – a2 Fx= EeTe = Et – aTt – a
人工神经网络 是机器智能的一部分,它模拟大脑的神经
系统,更简单的说,就是人脑神经系统的一 个数学模型
大脑神经系统
大脑内约含1000亿个神经元 神经系统是由这些神经元经过高 度的组织与相互作用而构成的复 杂的网络
特征:神经元+相互作用
神经元模型
突触 突触
突触
x1
突触是可变的
w1
x2 w2
a
xn
wn
tr:训练记录,包括迭代次数和性能
Y: 网络输出矩阵
E: 网络误差向量
训练好的BP神经网络,
权值不再改变
BP神经网络的Matlab工具箱函数
3、BP神经网络的仿真函数: 函数sim用于利用训练好的BP网络进行仿真预测,其
调用格式为:
[Y, E, Perf] = sim (net, P)
Net: 训练好的BP神经网络,train得到的网络 P:输入向量/矩阵,每行对应于一个样本的输入向量 Y: 网络输出向量/矩阵,每行对应于该样本的预测输出 E: 网络误差向量 Perf: 网络的性能
信息流
2、输入输出关系: a f W , x
激活函数通常采用S形函数,如logsig,tansig函数;输出
层激活函数多采用purelin函数。
3、理论上,具有一个隐含层的BP网络可以以任意精度
逼近任意非线性函数。
二、BP网络的学习算法
训练样本 { p1, t 1} { p2, t 2} {pQ,tQ } BP网络的学习算法是典型的有导师学习算法:
将样本分为训练集和测试集,训练样本用于网络训练(学习),
测试样本用于测试网络的泛化能力。一般,训练集样本数量占总
样本数量的2/3-3/4为宜,剩余的1/4-1/3作为测试集。
要分析网络模型的泛化能力,应该也必须用非训练 样本(称为测试样本)误差的大小来表示和评价,这也 是将总样本分成训练样本和非训练样本主要原因之一。 最直接和客观的指标是从总样本中随机抽取的非训练样 本(测试样本)误差是否和训练样本的误差一样小或稍 大。非训练样本误差很接近训练样本误差或比其小,一 般可认为建立的网络模型已有效逼近训练样本所蕴含的 规律,否则,若相差很多(如几倍、几十倍甚至上千倍) 就说明建立的网络模型并没有有效逼近训练样本所蕴含 的规律,而只是在这些训练样本点上逼近而已。
和阈值b,逐渐减小误差,直至满足精度要求。
学习过程:通过样本更新权值和阈值
输出目标
训练样本 { p1, t 1} { p2, t 2} {pQ,tQ }
输入
p
神经网络
a
a f (W , p)
W(old)
W(new)
学习
▪ 网络的学习:通过样本不断调整权值
▪ 学习好以后的网络:权值不再改变,所学的知 识存储在权值中
{ p1, t1} { p2, t2} {pQ,tQ }
P:输入矩阵,每行对应于一个样本的输入向量
T:输出矩阵,每行对应于该样本的期望输出
Si:第i个隐含层的神经元个数,最后一个为输出层神经元个数
TFi: 第i个隐含层的激活函数(隐含层默认值为tansig,输出层
默认值为purelin) BTF:网络训练函数(默认值为trainlm) BLF:权值/阈值学习函数(默认值为learngdm)
BP神经网络用于预测,分类
创建/训练
产生训练集 /测试集
BP网络 创建/训练 RBF网络
仿真测试 性能评价
创建/训练
训练集和
PNN网络 { p1, t1} { p2, t2} {pQ,tQ }
测试集随 机产生
1、产生训练集/测试集:(P_tain,T_train),(P_test, T_test)
误差反向传播
•
s M 2 F M (n M )(t a)
•
s m F M (n m ) W m1 T s m1 m = M – 1 2 1
BP学习过程
Step1
• 选定样本,p=1,…,P, 随机确定初始权矩阵 W(0)
Step2 • 利用样本计算网络输出,得到误差
Step3
• 利用误差反向计算每一层的sensitivty, 更新权值和阈值。直到误差满足精度 要求。
BP神经网络的Matlab工具箱函数
2、BP神经网络训练函数:
函数train用于训练已经创建好的BP神经网络,其调 用格式为:
[net, tr, Y, E] = train(net, P, T)
训练前的网络,
newff产生的BP
网络
P:输入矩阵,每行对应于一个样本的输入向量
T:输出矩阵,每行对应于该样本的期望输出
a f (n) f (wT x)
w1
w2
其中,w
wn