RSS
热门关键字:  数据挖掘  数据仓库  商业智能  人工智能  搜索引擎
当前位置 :| 首页>人工智能>神经网络>

【原创】神经网络焦点问题的解决方案

来源: 作者: 时间:2008-01-04 点击:

版主wh6831183提议对神经网络焦点问题做一个集中讨论,我积极响应。因为这些问题网友讨论热烈,但常常又没有一个结论性的结果。下面谈谈我的解决方案。
神经网络是一个非线性回归模型。给定样本,不同的网络结构决定了它的泛化性能。一般来说,网络结构不能过于复杂,因为复杂的网络结构意味着要估计更多的参数,因而模型的精度变差。控制模型复杂程度,可采用选择少的神经元数量或者对系数的收缩。系数收缩的思想来自岭回归(ridge regression)就是在误差平方和的目标函数后面再加一项对绝对值过高的系数的惩罚。
min S(β)=sum[yi-f(xi,β)]^2 + c * R(β)

R(β)=sum βj^2 或者 R(β)=sum βj^2/(1+βj^2) ,罚函数不包括截距项。

1.【讨论】如何选择训练集和测试集数据?
一般需要将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中训练集用来估计模型,验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。
样本少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。 数据挖掘研究院

2.【讨论】数据归一化问题
数据归一化属于数据的预处理。因为sigmoid函数根据不同的变换,输出在0到1或者-1到1之间,因此如果不做归一,就会出现样本输出超出神经网络输出的范围。选择最大的值max和最小值min,做如下变换
x=(x-min)/(max-min)就是归一化。
需要注意的是max和min不应该直接选择为x中的最大值和最小值。原因是样本只是有限的观测,有可能还有更大或者更小的观测,因此合适的选择应该max选取xmax大一些和min比xmin小一些的。
归一化并不总是合适的预处理,因为它不能使分布不对称的样本变得更对称一些,标准化要好一些。另外,有时候主成分分析也能起到降维的作用。

3.【原创】关于目标训练误差的设置以及LM训练算法
关于目标训练的误差值,我觉得不应该人为地设定误差平方和目标,设定太小的目标会出现过度拟合。倒是可以设定本次权值与上次权值的平方和距离除以所有的权值数目,这个指标反映了收敛性。然后多算几次,以避免局部收敛,保留验证集误差平方和最小的权值作为最终的权值。

4.【讨论】神经元数量的选择问题
神经元数量的选择有很多经验法则,但都没有理论的依据,有时好用有时好用。建议采用开篇介绍的岭回归方法,选择较多的神经元数目。有的朋友可能担心,一般神经元数目都是宁缺勿滥,这样行吗?即使选择了过多的数目,通过选择惩罚系数c,它会使过多的权值收缩到0。问题是如何选择惩罚系数,方法是根据交叉验证法选择在验证集预测误差平方和最小的惩罚系数。

数据挖掘研究院



5.【求助】用遗传算法优化神经网络
遗传算法是一个通用的优化算法,通常是在面对一个复杂的问题,没有特定的高效的优化算法可用的时候才用它。神经网络本来就慢,再用遗传算法更是慢上加慢。采用岭回归办法,遗传算法根本没有必要。遗传算法并不是化腐朽为神奇的万能灵药。技术的使用效果不取决于技术的高级程度和复杂程度,而取决于各种技术和问题的针对性和紧密性。

6.【讨论】如何解决泛化问题
因为模型参数是根据训练集估计的,泛化能力是估计模型在训练集以外的样本的预测能力。只要选择足够复杂的结构,神经网络可以任意地降低训练误差,但泛化能力很差。泛化能力的解决关键在于选择合适的模型评价函数,合适的模型评价函数能够反映模型偏差和方差的折衷。常用的R square 拟合优度不是一个好的评价函数,更好的是
AIC=-2log(L(x,β^))+2d
BIC=-2log(L(x,β^))+dlogN
其中log(L(x,β^))是对数似然密度,d是有效参数个数,N为训练样本数
对于神经网络,有效参数个数为
d=sum ai/(ai+c)
其中ai是Hessian矩阵(误差平方和目标函数对参数二次导数)的特征值。
另一个办法就是交叉验证,前文已经讨论,不再重复。交叉验证适用于有效参数难以定义的模型,虽然需要更多的计算量,但比较稳健。

十分感谢malearning能和大家分享自己的宝贵经验~~~



[parse]malearning wrote:[/parse]

2.【讨论】数据归一化问题
我认为还是用PRESTD进行样本的归一化比较好



【下载】图像处理基础算法源代码MATLAB集合---初学者进
http://bbs.matwav.com/post/view?bid=6&id=389458&sty=1&tpg=1&age=0

【下载】图像处理基础算法源代码VC++集合---初学者进
http://bbs.matwav.com/post/view?bid=6&id=388963&sty=1&tpg=1&age=0

好专业啊,虽然仍然是似懂非懂,但是仍然十分感谢楼主

malearning您的几点解决方案真的很不错,我有个问题请教:
您说“max选取比xmax大一些和min比xmin小一些”,那么就是说max、min的值是自己根据以测样本估计出来的??这样估计会有依据吗?对于实际问题的解决是否会有副作用呢?
烦劳您帮着解答一下,谢谢!!

有没有想过将寻优方法换一下呢,比如bp神经网络中的梯度寻优转换成具有全局性的凸二次优化问题,有人有兴趣吗

好像有这种算法了。我觉得SVM就是这种思想吧?

遗传算法优化神经网络比单纯用神经网络好一些的

俺是初学者,不太懂耶!版主厉害!

看的出malearning 是一位“神经百战”的高手。我也聊几句。

数据挖掘研究院



首先向malearning请教一个问题,您说

[关于目标训练的误差值,我觉得不应该人为地设定误差平方和目标,设定太小的目标会出现过度拟合。倒是可以设定本次权值与上次权值的平方和距离除以所有的权值数目,这个指标反映了收敛性。然后多算几次,以避免局部收敛,保留验证集误差平方和最小的权值作为最终的权值。]

这不正是局部极小特征呢?其实这种方法我也在用,只是不明白,心理没底,有什么理论依据吗?。

1。也谈[岭回归]

神经网络之所以能做{{非线性}}回归,是因为通过调整权值,可以将输入推到sigma函数的非线性区,
从而完成非线性映射;而要完成这一步,就要增大权系数。而岭回归却反其道行之,对[权系数增大]实施
惩罚,必然会影响网络的非线性映射能力。我的看法是,当你的样本的输入输出感觉非线性不太厉害时适
合采用岭回归。而系数惩罚对非性形映射的影响通过增大网络规模来补偿。
所以我对岭回归的印象是:岭回归就象老总开会,挑起矛盾双方争斗,老总权衡利弊,选一个折中方案。

2。也谈常见BP网络算法的优劣

a) 标准梯度算法
标准梯度算法是每次求出网络对某一个样本的权值修正值dW,并立即更新。由于不同样本的权 数据挖掘研究院
值修正方向不同,直接相加相互抵消,所以收敛速度太慢。但是,标准梯度算法有坚实的理论基础,当步
长足够小时,证明是稳定收敛的。
b) 加动量项
加动量项算法是每次求出网络对某一个样本的权值修正值dW后不是立即更新,而是对这些修正
值作移动平均并保存,然后用平均值avW更新权值。这样做有两个好处,首先avW在一定程度反映最近一段时
间权值的前进方向,同时avW比dW大的多,所以使得网络的收敛速度要快的多;其次是当dW=0(网络前进到极小
值或拐点)时,avW!=0会继续向前搜索,这就使得这种算法有可能跳出局部极小.这也是加动量项的初衷.但是
这也是双刃剑,它也可能从全局最优点跳到局部极小,只不过几率小一点而已,这是因为由avW带来的惯性搜
索是盲目搜索,它并不知道前面一定有更好的结果.这种盲目的惯性搜索在某些方面会带来很大的副作用,比
如自动控制,这种惯性搜索相当于认为给系统增加了一级延迟,使得系统稳定时间加长,还可能导致超调.
c) LM算法
LM算法每次求出网络对某所有样本的权值修正值dW,不立即更新.而是对这些dW做类似线性回归
的运算,求出对所有样本的最优搜索方向,在沿着这个方向尽可能大地前进(跳跃式)一步. 所以网络收敛速

数据挖掘研究院


度最快.LM算法也不能保证收敛于全局最优,但是因为它是跳跃式前进,并且跨度很大,他也可以跳出局部极
小值,并且不会带来延迟,也不会从全局最优点跳到局部极小.虽然LM算法不能保证收敛于全局最小,但在自
动控制中,由于输入的数据不断更新,相当于能量曲面不断处在抖动和摇晃当中,所以最终还是会收敛于全局
最优附近,这也是我在工程中使用了各种算法后的一点体会.
LM算法也有缺点,这就是大家常说的容易过拟合.但严格地说,这不是LM算法的过错,应该说这是神经网
络的通病,只不过因为其他算法的收敛速度较慢,这个现象不太突出而已.我们知道多层神经网络可以以任意
精度逼近一个非线性函数,如果训练样本有噪声,并且样本较少(和网络规模相比),训练的结果就将噪声也拟
合进去,虽然噪声幅度较小,但是把噪声信号你和进去会严重影响样本附近的扁导数,从而造成网络的泛化能
力降低.
LM算法真正缺点是算法复杂,占用内存大.

对于噪声引起的过拟合,可以控制u值得下限来控制网络的收敛速度,或采用[岭回归]进行权值惩罚,有意
降低网络的非线性映射能力,减弱噪声的影响(在matlab工具箱中对应trainrp训练算法),增加样本(常用方
法,很有效).
另外LM算法的理论依据是高斯-牛顿算法和标准梯度算法.LM算法也可以加动量项,也可以立即转换成标 数据挖掘实验室
准梯度算法.

LM算法能适应各种目标函数比如岭回归.常用的目标函数是T-Y 和 (T-Y)^2,这两种收敛速度相近,可训练
结果不同,泛化能力也不同.前一种要好得多,特别是样本多的时候.matlab工具箱里用的是哪一种,不知道.
这也是我不愿意和matlab的使用者讨论LM算法的原因,以免哭了半天,不知道哭的是谁.



d) 模拟退火
对于全局最优效果还行,收敛速度太慢,运行时间太长且不好控制.我曾把它用到控制算法中,不论怎么
干扰,它总能恢复,可是巨大的超调和超长的稳定时间让人难以忍受.也不知谁发明的这种算法,不收敛就不降
温,难受.
c) 遗传算法
没有用过,感觉像拼图游戏.谁发明的,把样本割来割去,再拼来拼去,不收敛就割死你,残忍!




有时间再和大家聊聊泛化、激活函数目标函数。

好啊,真是受益非浅!!!

岭回归跟正则化是一回事吗?好象都是对实施系数惩罚,二者是什么关系呢

我在自己的程序中加入了楼主的岭回归,发现效果一般,尤其是前面那个系数很难定,训练误差大多不收敛,而收敛方向全部集中到权值的惩罚项去了,好像还和初始的权值有关系

我在自己的程序中加入了楼主的岭回归,发现效果一般,尤其是前面那个系数很难定,训练误差大多不收敛,而收敛方向全部集中到权值的惩罚项去了,好像还和初始的权值有关系

楼主谈到的k折交叉验证法,能否给出程序段做一具体讲解呢?


不胜感激!

我对神经网络的分类问题较为感兴趣。但是有以下问题:(1)很多资料介绍MLP神经网络有很强的分类能力,但是根据所查阅的资料,这些MLP实际上都是多层网络,采用函数是sigmode,训练算法竟然是BP算法,那么MLP和BP到底有什么区别?(2)这些资料中激活寒士sigmode函数,它的输出结果应该是连续的,即不一定是0或1,但是我们一般在分类时都是将类别设为0或1或者2等,不是任一的数,而sigmode函数有可能是任一数,所以不知这些文献资料怎么处理。(3)一般教材上讲的都是2类区分,这时输入2个,而输出只有一个,输出的结果为0或1,分别对应着2个类别,如果要区分3个或4个或更多个类,那么输出神经元的个数应怎样确定?如何以这些输出神经元的输出结果来划分类别模式?谢谢高手的帮助。

对于AIC,BIC是如何评价网络泛化能力?个人感觉AIC,BIC是一种模型误差和模型复杂度(也就是网络中的权系数个数)之间折中的准则。

另外在实际计算中AIC和BIC中的似然函数如何估计?前几天验证一片paper中的这两个准则数据,结果始终和文章中的数据不相同,而且差别很大
大家可以来讨论一下

谢谢楼主和不起眼 两位高手的点评,希望以后还能发表一些自己的体会。

谢谢楼主和不起眼 两位高手的点评,希望以后还能发表一些自己的体会。

[parse]dreamquiet0 wrote:[/parse]

数据挖掘实验室


俺是初学者,不太懂耶!版主厉害!


俺也是初学者,也不太懂耶!版主好厉害!

楼上的几位高手能不能告诉我在MATLAB中,newrb的中心的选择是用的什么方法呀?
看了好久一直看不明白呀

好啊,真是受益非浅!!!

几位讲得不错 ,收获不小!!!!!

guanzhu

想请教楼主一个问题,我用newff训练的结果每次都不相同,试问当我训练好网络达到目标的时候,我怎么保存我的运行结果和运行的图像及权值等,我现在训练好了,但是关闭matlab后找不到上次的训练结果了,这样怎么来仿真网络呢??谢谢啊

不错,多谢楼主归纳呀!"Cool"

newrb中心的选择是从输入的训练样本中随机选取的,它的过程就是从少到多的添加中心,直到满足要求

保存训练结果:file/save workspace as
保存图像:figure的菜单file/save figure as
打开保存的数据:file/open
打开保存的图像:open(’路径/文件名’)
BP网络是MLP中的一种

好多高手啊 ,收益非浅。另,小弟有个问题,我最近在做NN的算法改进,基于自然梯度算法,一直苦恼无人讨论,楼主或别的人有意见没,我的想法是在原有的算法 上改进得到NG新算法

初学者,感觉相当不错。

hao ! thank you very much!!!

非常谢谢各位高手的指教啊!

写的不错!

BP算法用扩展卡尔曼滤波来调节权值,本人正在编程,前人的研究结果是非常理想的!我在想用其他的滤波器可能会更好!

我觉得借助小波函数可优化神经网络

比较明白了,谢谢了。 数据挖掘实验室
支持再发好的观点。

我想问问大家都是做什么工作得?
我也刚刚开始学习神经网络!
各位前辈可否指点1,2

malearning 如何联系你。
我想请教你一些具体的问题,我正在做一个神经网络,思路,程序都做好了。
想就一些细节向你请教!
我的联系方式:泡泡:brucechan2003@163.com
MSN: brucechan98411@hotmail.com
欢迎有兴趣的同学一起讨论.

"Question""Question""Question"我不是很懂

大家不要总是把BP网络及以其为中心的模型就看成是神经网络。

BP模型已经被研究人员都给做烂了,现在已经陷入局部极小点,要有大的突破不太可能,因为就像局部极小值是优化方法的天然缺陷一样,BP网络的诸多问题就是它的“阿基里斯之踵”,在理论界没有大的突破之前,纯粹的这种修修补补耗时又耗力,而且不可能解决本质问题,而且都已经让人做得差不多。相反换一种思路,现在的SVM则更有希望。 数据挖掘研究院

其实神经网络领域还有很多更有吸引力更有前途的模型,如竞争网络、反馈网络、波尔兹曼机、RBF,神经网络领域的专业人士从来最看不起的就是BP模型,因为它的生物学背景最差,耗费的人力最多,收益不成比例,换句话说,就是性价比不高。

还是研学论坛好啊!!

shouyifeiqian xiexie

我是初学者,真的受益匪浅,感谢各位高手的指点啊

我是个初学者,研二,正在写毕业论文。我上一届师姐的论文是用遗传算法来改进BP神经网络算法,我跟她交流过,她觉得这种改进只是理论上的,在实际的应用中却很难实现。
另外,我还想请教一下,我使用MATLAB7.0编了一个拟和函数的程序,想用来进行信用评级,但是得到的网络非常不稳定,两次运行结果可以完全不同,有什么办法进行改善吗?

初学者,感觉不错~!

个人感觉:
遗传算法得到近似全局最优解,再用bp算法得到"准"全局最优解,理论上应该还是可以的.主要是实际难以处理大样本数据

我也是刚刚学习,虽然看不太懂,但还是感谢各位大侠的共享精神!

Create By Any-Extract(WL-AE)

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?