有什么简单的神经网络万有多项式逼近定理理证明方法

Algorithm(3)
今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据
挖掘等领域。接下来介绍BP神经网络的原理及实现。
& 1. BP神经网络的认识
& 2. 隐含层的选取
& 3. 正向传递子过程
& 4. 反向传递子过程
& 5. BP神经网络的注意点
& 6. BP神经网络的C++实现
1. BP神经网络的认识
&&&BP(Back Propagation)神经网络分为两个过程
&&&&&&(1)工作信号正向传递子过程
&&&&& (2)误差信号反向传递子过程
&&&在BP神经网络中,单个样本有个输入,有个输出,在输入层和输出层之间通常还有若干个隐含层。实际
&& 上,1989年Robert Hecht-Nielsen证明了对于任何闭区间内的一个连续函数都可以用一个隐含层的BP网
&& 络来逼近,这就是万能逼近定理。所以一个三层的BP网络就可以完成任意的维到维的映射。即这三层分
&& 别是输入层(I),隐含层(H),输出层(O)。如下图示
2. 隐含层的选取
&&&在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少
&& 才合适呢?实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层
&& 节点数目,如下
&&&&&&&&&&&&&&&&
&&&其中为隐含层节点数目,为输入层节点数目,为输出层节点数目,为之间的调节常数。
3. 正向传递子过程
&& 现在设节点和节点之间的权值为,节点的阀值为,每个节点的输出值为,而每个节点的输出
&& 值是根据上层所有节点的输出值、当前节点与上一层所有节点的权值和当前节点的阀值还有激活函数来实现
&& 的。具体计算方法如下
&&&&&&&&&&&&&&&&&&&&
&&&其中为激活函数,一般选取S型函数或者线性函数。
&& 正向传递的过程比较简单,按照上述公式计算即可。在BP神经网络中,输入层节点没有阀值。
4. 反向传递子过程
&&&在BP神经网络中,误差信号反向传递子过程比较复杂,它是基于Widrow-Hoff学习规则的。假设输出层
&&&的所有结果为,误差函数如下
&&&&&&&&&&&&&&&&&&&&
&&&而BP神经网络的主要目的是反复修正权值和阀值,使得误差函数值达到最小。Widrow-Hoff学习规则
&& 是通过沿着相对误差平方和的最速下降方向,连续调整网络的权值和阀值,根据梯度下降法,权值矢量
&& 的修正正比于当前位置上E(w,b)的梯度,对于第个输出节点有
&&&&&&&&&&&&&&&&&&&&
&&&假设选择激活函数为
&&&&&&&&&&&&&&&&&&&&
&& 对激活函数求导,得到
&&&&&&&&&&&&&&&&&&&
&& 那么接下来针对有
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&同样对于有
&&&&&&&&&&&&&&&&&
&& 这就是著名的学习规则,通过改变神经元之间的连接权值来减少系统实际输出和期望输出的误差,这个规
&& 则又叫做Widrow-Hoff学习规则或者纠错学习规则。
&& 上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调
&& 整量的计算更为复杂。假设是输入层第k个节点和隐含层第i个节点之间的权值,那么有
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&这样对学习规则理解更为深刻了吧。
&& 有了上述公式,根据梯度下降法,那么对于隐含层和输出层之间的权值和阀值调整如下
&&&&&&&&&&&&&&&&
&&&而对于输入层和隐含层之间的权值和阀值调整同样有
&&&&&&&&&&&&&&&&
&&&至此BP神经网络的原理基本讲完。
5. BP神经网络的注意点
&&&BP神经网络一般用于分类或者逼近问题。如果用于分类,则激活函数一般选用Sigmoid函数或者硬极限函
&& 数,如果用于函数逼近,则输出层节点用线性函数,即。
&& BP神经网络在训练数据时可以采用增量学习或者批量学习。
&& 增量学习要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训
&& 练效果比较差,适合在线处理。批量学习不存在输入模式次序问题,稳定性好,但是只适合离线处理。
&& 标准BP神经网络的缺陷:
&& (1)容易形成局部极小值而得不到全局最优值。
&&&&&& BP神经网络中极小值比较多,所以很容易陷入局部极小值,这就要求对初始权值和阀值有要求,要使
&&&&&& 得初始权值和阀值随机性足够好,可以多次随机来实现。
&& (2)训练次数多使得学习效率低,收敛速度慢。
&& (3)隐含层的选取缺乏理论的指导。
&& (4)训练时学习新样本有遗忘旧样本的趋势。
&&&BP算法的改进:
&&&(1)增加动量项
&&&&&&&引入动量项是为了加速算法收敛,即如下公式
&&&&&&&动量因子一般选取。
&& (2)自适应调节学习率
&& (3)引入陡度因子
&& 通常BP神经网络在训练之前会对数据归一化处理,即将数据映射到更小的区间内,比如[0,1]或[-1,1]。
6. BP神经网络的C++实现
&&&BP神经网络的C++文件如下
Test.cpp:
Makefile:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8369次
排名:千里之外
原创:12篇
转载:25篇
(1)(3)(1)(1)(5)(4)(1)(1)(2)(1)(3)(2)(3)(1)(5)(2)君,已阅读到文档的结尾了呢~~
神经网络逼近中的几个问题问题,逼近,中的,神经网络,逼近问题,神经网络的,几个,逼近中的
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
神经网络逼近中的几个问题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口一个简单的神经网络使用的实例
&现在很多的都是调用工具,机器学习更难的感觉还是理论。搞理论的才是最牛逼的。
&神经网络实现复杂的非线性映射。只要结构足够优秀,三层的神经网络可以实现任意非线性函数的逼近以任意精度。
使用归一化,主要是范围太大的时候并不明显变化,主要是参考那个sigmoid函数的变化,在小的区间里面差别还是比较明显的。
网络结构的选择并没有很好的指导,但是结构直接影响最后的逼近性能。
层数的增多可以使用提高精度,但是速度是比较慢的。
& & 训练之前需要采取的数据预处理的措施:
归一,乱序(分开训练和测试数据主要是为了最后的泛化能力),保存模型,数据进行反归一化。(分类什么的都可以使用matlab自带的函数)
可以查看结果,但是每次可能不一样,主要是每次随机选择的数据集不一样。
& & 查看结果可以使用以下一些语句:
输入到隐层权值:
w1=net.iw{1,1}
隐层阈值:
theta1=net.b{1}
隐层到输出层权值:
w2=net.lw{2,1};
输出层阈值:
theta2=net.b{2}
& & 下面使用matlab
2014a进行简单的分类算法(BP神经网络):使用的是著名的IRIS数据集:http://en.wikipedia.org/wiki/Iris_flower_data_set
&结果如下:
使用的实际代码如下:
%读取训练数据
[f1,f2,f3,f4,class] = textread('data_NN.txt' ,
'%f%f%f%f%f',150);
%特征值归一化
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]')
%构造输出矩阵
s = length( class) ;
output = zeros( s , 3 &) ;
for i = 1 : s&
& &output( i , class( i )
%创建神经网络
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } ,
'traingdx' ) ;&
%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 500 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
net = train( net, input , output' ) ;
%读取测试数据
[t1 t2 t3 t4 c] = textread('data_NN.txt' ,
'%f%f%f%f%f',150);
%测试数据归一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
Y = sim( net , testInput )&
%统计识别正确率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
& & [m , Index] = max( Y( :
, &i ) ) ;
& & if( Index
&== c(i) &
& hitNum = hitNum + 1 ;&
sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。神经网络的通用逼近定理和深度学习 第273期机器学习日报()_好东西传送门_传送门
你是真实用户吗(Are you a robot)?
我们怀疑你不是真实用户,已对你的访问做了限制。如果您是真实用户,非常抱歉我们的误判对您造成的影响,您可以通过QQ()或电子邮件()反馈给我们,并在邮件和QQ请求信息里注明您的IP地址:220.177.198.53,我们会尽快恢复您的正常访问权限。另外,如果您不是在访问的当前页面,我们建议您移步
或者 在浏览器中输入以下地址:http://chuansong.me/n/1472387 访问,您所访问的网站是从抓取的数据,请直接访问,会有更好的体验和更及时的更新。We suspect you are a robot.We are really sorry if you are not,and you can email us () with your current IP address: 220.177.198.53 to get full access to .If you are not accessing
for the current page,you'd better visit
for better performance,as the current website you are accessing is just spam.
觉得不错,分享给更多人看到
好东西传送门 微信二维码
分享这篇文章
6月21日 16:01
好东西传送门 最新头条文章
好东西传送门 热门头条文章}

我要回帖

更多关于 神经网络万能逼近定理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信