有关神经网络训练函数与学习函数区别
有关神经网络训练函数与学习函数区别这个问题也有人问过,不过看了他们的讨论后有些地方还是不太清楚,这次我换个角度阐述一下,希望各路大神来指点,希望我的帖子不要沉,有任何想法都说出来大家一起讨论。以BP神经网络为例,在创建BP神经网络时,网络默认的训练函数和学习函数如下:
训练函数: 'trainlm'--Levenberg-Marquardt反向传播算法;
学习函数: 'learngdm'--动量梯度下降权值和阈值学习函数。
当然还有其他训练函数,例如:
'traingd'--标准梯度下降法
'traingdm'--有动量梯度下降法。
下面举某个参考书中两个例子:
创建一个利用标准的梯度下降算法的网络:net=newff(minmax(p),,{'tansig','purelin'},'traingd');
创建一个利用有动量的梯度下降算法的网络:net=newff(minmax(p),,{'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意见。。。。
这是我最近研究神经网络遇到的问题,求各路大神指点。
页:
[1]