Steven Wang's Blog
C'est la vie
rss
email
twitter
新浪微博
  • Home
  • About
  • Google Profile
  • 新浪微博

BP网络的函数逼近在Matlab中的实现

0 Comments
Posted on 十二月 6 2009

一、BP网络简介

反向传播网络(Back-Propagation Network,简称BP网络)是将W-H学习规则一般化,对非线性可微分函数进行权值训练的多层网络。其中,权值的调整采用反向传播(Back-propagation)的学习算法。它是一种多层前向反馈神经网络,其神经元的变换函数是S型函数。BP网络输出量为0到1之间的连续量,可实现从输入到输出的任意的非线性映射。

BP网络主要用于下述方面:
1、函数逼近:用输入矢量和相应的输出矢量训练一个网络逼近一个函数;
2、模式识别和分类:用一个特定的输出矢量将它与输入矢量联系起来;把输入矢量以所定义的合适方式进行分类;
3、数据压缩:减少输出矢量维数以便于传输或存储。

BP网络具有一层或多层隐含层,其激活函数必须是处处可微的,因此BP网络经常使用的是S型的对数或正切激活函数和线性函数。

BP网络特点有以下几点:
1、输入和输出是并行的模拟量;
2、网络的输入输出关系是各层连接的权因子决定,没有固定的算法;
3、权因子通过学习信号调节,学习越多,网络越聪明;
4、隐含层越多,网络输出精度越高,且个别权因子的损坏不会对网络输出产生大的影响;
5、只有当希望对网络的输出进行限制,如限制在0和1之间,那么在输出层应当包含S型激活函数;
6、在一般情况下,均是在隐含层采用S型激活函数,而输出层采用线性激活函数。

BP算法由两部分组成,信息的正向传递与误差的反向传播:
1、正向传播过程中,输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态;
2、如果在输出层未得到期望的输出,则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标。

二、利用BP网络做正弦函数逼近

已经证明,两层S型线性网络,如果S型层有足够的神经元,则能够训练出任意输入和输出之间的有理函数关系。

本文设计了一个含有3个神经元的两层S型线性网络,对g(p)=1+sin(Π/4*p)的正弦函数进行逼近,并在Matlab中实现(没有调用Matlab已有的函数),代码如下:

clear;
i = 4;
s = 3;   %神经元个数
maxEpoch = 100000;   %最大训练次数
errGoal = 0.001;   %期望误差最小值
alpha = 0.1;   %学习效率
p = -2 : 0.1 : 2;
t = 1 + sin(i * pi * 0.25 * p);
[m,n] = size(p);
w1 = rand(s,m);
b1 = rand(s,1);
w2 = rand(1,s);
b2 = rand(1,1);
count = 0;
while(count < maxEpoch)
    modNum = mod(count, n) + 1;
    if(modNum == 1)
        sse = 0;
    end
    %正向传播,计算网络输出
    a0 = p(:,modNum);
    a1 = logsig(w1 * a0 + b1);
    a2 = w2 * a1 + b2;
    %计算误差平方和
    e = t(modNum) - a2;
    sse = sse + abs(e)^2;
    if(modNum == n & sse < errGoal)
        break;
    end
    %反向传播,计算敏感性
    s2 = -2 * e;
    s1 = diag((1-a1).*a1) * (w2)' * s2;
    %更新权值矩阵及阈值
    w2 = w2 - alpha * s2 * (a1)';
    b2 = b2 - alpha * s2;
    w1 = w1 - alpha * s1 * (a0)';
    b1 = b1 - alpha * s1;
    count = count + 1;
end
%图表输出
x = -2 : 0.1 : 2; 
f=[];
y = 1 + sin(i * pi * 0.25 * x);
figure,plot(x,y,'k-')
for i = -2 : 0.1 : 2
    f=[f,w2 * logsig(w1 * i + b1) + b2];
end
hold on
plot(x,f,'b-')

利用BP网络做函数逼近只是对BP算法有了一个大概的了解,希望把其运用到数字识别中,可以有效的提高数字识别的准确度。今天在LMS算法识别数字中,加入了20组含有随机噪声的样本后,识别效果稍有改善,所以有些期待BP算法的效果。

Resources & Reference:
1、何建华-神经网络讲义-part4-BP网络.ppt
2、Backpropagation.pdf

--End--
作者:Steven Wang | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://blog.stevenwang.name/bp-function-approximation-matlab-24005.html

Relate Posts:

  • PSO优化BP神经网络在Matlab中的实现

Tags: BP网络  函数逼近  Matlab 
Categories: 人工神经网络 

Leave a Reply



About Me

    Steven Wang
    Student in Computer Software and Theory
    Life@Wuxi, Jiangsu
    Study@Jiangnan University
    more...

Feeds

  • Entries (RSS)
  • Comments (RSS)
  • 订阅到 Google Reader
  • 订阅到 抓虾
  • 订阅到 鲜果
  • 订阅到 QQ

Popular Posts

  • 围着脖子推GTalk机器人V1.0发布(26629)
  • 通过SSH + Chrome + Proxy Switchy!代理上网(19479)
  • 在GAE上部署Micolog博客系统(11098)
  • 围着脖子推V2.0 Beta1版发布 支持Twitter,新浪微博,人人网,嘀咕,做啥 同步更新(10660)
  • 围着脖子推GTalk机器人V1.0更新-增加接收Twitter更新等功能(10464)
  • 围着脖子推更新-增加同步更新网易微博、腾讯微博和搜狐微博(10092)
  • 在Matlab中实现Hough变换检测直线(8248)
  • Micolog主题(theme) —— translucence(7417)

Recent Posts

  • Steven Wang's 2011
  • 工作
  • T400升级Intel SSD
  • Java中的时区转换小结
  • 二值图像连通区标记之区域生长法
  • Steven Wang's 2010
  • 微博提醒应用上线
  • 双喜临门

Recent Comments

  • zhoudi:惊诧了,看来你应该和我是同门师兄弟。。。...
  • zhoudi:哇,校友。Wang Shitong的研究...
  • xiaozhang:第37这一行:int jMax = mi...
  • 小张:这一行:int jMax = min(w...
  • 小张:为什么运行出错呢...

Categories

  • Google App Engine(10)
  • 数字图像处理(11)
  • Micolog(7)
  • VPS(6)
  • 围着脖子推(15)
  • 人工神经网络(5)
  • 算法(11)
  • MyLife(16)
  • 媒体检索(4)
  • Others(8)
  • Python(2)

Archives

  • January 2012(1)
  • December 2011(2)
  • May 2011(1)
  • February 2011(1)
  • December 2010(3)
  • November 2010(1)
  • October 2010(1)
  • September 2010(4)
  • August 2010(2)
  • July 2010(5)
  • June 2010(4)
  • May 2010(7)

Blog roll

  • ~Issue
  • Fenng
  • 刘未鹏 | Mind Hacks
  • Grace Hopper
  • 林海听松
  • Yu Zheng
  • Johnny Han
  • xiang_闹闹
  • 静静的安静
  • Herei
  • Dbger
  • land of promise
  • 小龙的SEO学习之路
  • 星星
  • ISHENS|TECH
  • 天天软件园
  • joyone
  • leezhenchong's notes

  • Home
  • About
  • Google Profile
  • Twitter
  • 新浪微博
  • Login
Powered by Google App Engine  |   Designed by WebTreats  |   由 xuming 提供 Micolog程序