神经网络焦点问题的解决方案
神经网络是一个非线性回归模型。给定样本,不同的网络结构决定了它的泛化性能。一般来说,网络结构不能过于复杂,因为复杂的网络结构意味着要估计更多的参数,因而模型的精度变差。控制模型复杂程度,可采用选择少的神经元数量或者对系数的收缩。系数收缩的思想来自岭回归(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 是一位“神经百战”的高手。我也聊几句。
首先向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) 遗传算法
没有用过,感觉像拼图游戏.谁发明的,把样本割来割去,再拼来拼去,不收敛就割死你,残忍!

您当前的位置: