感知器与BP神经网络的简单应用
一、概念
1、BP神经网络
基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
2、感知器
感知器是一种前馈人工神经网络模型,其将输入的多个数据集映射到单一的输出的数据集上,可以解决任何线性不可分问题。
二、BP神经网络算法流程
1、初始化网络权重
假设输入层的节点个数为n,隐含层的节点个数为m,输出层的节点个数为l。其中激励函数为g(x)取Sigmoid函数。形式为:
2、隐含层的输出
如上面的三层BP网络所示,隐含层的输出为
3、输出层的输出
4、误差的计算
我们取误差公式为:
其中为期望输出。我们记,则可以表示为
5、权值和偏重的更新
权值的更新公式为:
隐含层到输出层的权重更新
则权重的更新公式为:
输入层到隐含层的权重更新
偏置的更新公式为:
隐含层到输出层的偏置更新
则偏置的更新公式为:
输入层到隐含层的偏置更新
6、判断结束
常见方法是指定迭代的代数,判断迭代次数是否达到了阈值或者输出误差是否小于可接受的范围。
代码:
% BP网络
% BP神经网络的构建
net=newff([-1 2;0 5],[3,1],{
'tansig','purelin'},'traingd')
net.IW{
1}
net.b{
1}
p=[1;2];
a=sim(net,p)
net=init(net);
net.IW{
1}
net.b{
1}
a=sim(net,p)
%net.IW{
1}*p+net.b{
1}
p2=net.IW{
1}*p+net.b{
1}
a2=sign(p2)
a3=tansig(a2)
a4=purelin(a3)
net.b{
2}
net.b{
1}
net.IW{
1}
net.IW{
2}
0.7616+net.b{
2}
a-net.b{
2}
(a-net.b{
2})/ 0.7616
help purelin
p1=[0;0];
a5=sim(net,p1)
net.b{
2}
% BP网络
% BP神经网络的构建
net=newff([-1 2;0 5],[3,1],{
'tansig','purelin'},'traingd')
net.IW{
1}
net.b{
1}
%p=[1;];
p=[1;2];
a=sim(net,p)
net=init(net);
net.IW{
1}
net.b{
1}
a=sim(net,p)
net.IW{
1}*p+net.b{
1}
p2=net.IW{
1}*p+net.b{
1}
a2=sign(p2)
a3=tansig(a2)
a4=purelin(a3)
net.b{
2}
net.b{
1}
P=[1.2;3;0.5;1.6]
W=[0.3 0.6 0.1 0.8]
net1=newp([0 2;0 2;0 2;0 2],1,'purelin');
net2=newp([0 2;0 2;0 2;0 2],1,'logsig');
net3=newp([0 2;0 2;0 2;0 2],1,'tansig');
net4=newp([0 2;0 2;0 2;0 2],1,'hardlim'