- 在线时间
- 16 小时
- 最后登录
- 2017-1-22
- 注册时间
- 2016-7-7
- 听众数
- 13
- 收听数
- 0
- 能力
- 0 分
- 体力
- 161 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 73
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 36
- 主题
- 24
- 精华
- 0
- 分享
- 0
- 好友
- 4
升级   71.58% TA的每日心情 | 开心 2016-9-16 11:54 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
- 自我介绍
- 数学建模爱好者
 群组: 2016国赛备战群组 群组: 2016研赛备战群组 群组: 2015年美赛冲刺 |
有关神经网络训练函数与学习函数区别这个问题也有人问过,不过看了他们的讨论后有些地方还是不太清楚,这次我换个角度阐述一下,希望各路大神来指点,希望我的帖子不要沉,有任何想法都说出来大家一起讨论。
以BP神经网络为例,在创建BP神经网络时,网络默认的训练函数和学习函数如下:
训练函数: 'trainlm'--Levenberg-Marquardt反向传播算法;
学习函数: 'learngdm'--动量梯度下降权值和阈值学习函数。
当然还有其他训练函数,例如:
'traingd'--标准梯度下降法
'traingdm'--有动量梯度下降法。
下面举某个参考书中两个例子:
创建一个利用标准的梯度下降算法的网络:net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingd');
创建一个利用有动量的梯度下降算法的网络:net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingdm');
这里我发现一个问题,很多参考书在利用不同的训练函数创建网络时,都没有考虑改变相应的学习函数,只是设定了训练函数就完了。难道只要设定好训练函数就可以了吗?要是这样子的话可不可以说训练函数和学习函数没有任何关系?
再有我发现动量梯度算法的训练函数‘traingdm’和学习函数'learngdm'中都包含了dw(权值变化)的计算公式(见图),而且计算公式也一样。不仅如此,其他训练函数里面也有dw的计算公式,唯一不同的是训练函数里面有'wb= wb + dw'这一计算过程,而学习函数里只计算了dw。
问题就在这里,既然训练函数和学习函数不一样,那为什么训练函数里面也包含了学习函数中计算dw的公式呢?在设定神经网络的时候,设定好训练函数和学习函数,那dw的计算是按照哪个函数来算?就以默认的BP神经网络网络来说,'trainlm'中权值的计算和‘learngdm’中dw计算方法根本就不一样,那这dw的确定是哪个函数说得算呢?
还有一点,既然训练函数里已经有dw的计算公式了,这里我可不可这么说:训练函数把学习函数该干的活也给干了,他们之间就没有什么联系。
或者换一个角度说,要是利用训练函数的话,就不用再设定学习函数了,即只要选定好训练函数,就不用管学习函数的事了,train函数会自动智能地把结果给算出来。要是用学习函数的话,就得结合sim函数或者adapt函数自己去编辑训练过程。
通过以上讨论,我自己得出的结论:训练函数是个孤僻的单身汉,学习函数和sim/adapt函数才是好基友一辈子。。。训练函数和学习函数在应用上压根就没联系,没有互相调用的说法。不知道对不对,纯熟个人YY意见。。。。
这是我最近研究神经网络遇到的问题,求各路大神指点。
|
zan
|