机器学习面试问题6
以下内容接机器学习面试问题5.
神经网络参数相关
参数的范围
目前还没有明确的参数范围,只有个人总结性的原则。如下:
网络参数确定原则:
①、网络节点 网络输入层神经元节点数就是系统的特征因子(自变量)个数,输出层神经元节点数就是系统目标个数。隐层节点选按经验选取,一般设为输入层节点数的75%。如果输入层有7个节点,输出层1个节点,那么隐含层可暂设为5个节点,即构成一个7-5-1 BP神经网络模型。在系统训练时,实际还要对不同的隐层节点数4、5、6个分别进行比较,最后确定出最合理的网络结构。
②、初始权值的确定 初始权值是不应完全相等的一组值。已经证明,即便确定 存在一组互不相等的使系统误差更小的权值,如果所设Wji的的初始值彼此相等,它们将在学习过程中始终保持相等。故而,在程序中,我们设计了一个随机发生器程序,产生一组一0.5~+0.5的随机数,作为网络的初始权值。
③、最小训练速率 在经典的BP算法中,训练速率是由经验确定,训练速率越大,权重变化越大,收敛越快;但训练速率过大,会引起系统的振荡,因此,训练速率在不导致振荡前提下,越大越好。因此,在DPS中,训练速率会自动调整,并尽可能取大一些的值,但用户可规定一个最小训练速率。该值一般取0.9。
④、动态参数 动态系数的选择也是经验性的,一般取0.6 ~0.8。
⑤、允许误差 一般取0.001~0.00001,当2次迭代结果的误差小于该值时,系统结束迭代计算,给出结果。
⑥、迭代次数 一般取1000次。由于神经网络计算并不能保证在各种参数配置下迭代结果收敛,当迭代结果不收敛时,允许最大的迭代次数。
⑦、Sigmoid参数 该参数调整神经元激励函数形式,一般取0.9~1.0之间。
⑧、数据转换。在DPS系统中,允许对输入层各个节点的数据进行转换,提供转换的方法有取对数、平方根转换和数据标准化转换。
转自http://blog.csdn.net/mingyuanlove/article/details/7448338
如何防止过拟合
1)选择合适的隐层神经元数目来避免过拟合现象。
一般来说,隐含层神经元的数目可以根据下式来确定:
nH=(nI+nO)1/2+l
其中:nH,nI和nO分别为隐含层、输入层和输出层的神经元数目;l一般为1~10之间的一个整数(特别情况可以大于10)。
2)调整法:调整衡量网络拟合能力的误差准则函数,添加一项含有网络权值和偏置值的均方值。
最好的策略是能自动地设置调整参数,一种较好的方法是基于Bayes决策规则的调整法,该方法假定网络的权值和偏置值是具有特定分布的随机变量,可以用统计方法来估计调整参数。
3)提前停止法:将训练样本分为3个子集,第1个子集做为训练子集,用来计算梯度和网络的权值及偏置值。第2个子集称为确认子集,在训练过程中它用来检验网络误差(称之为确认误差)。在训练的初始阶段,确认误差将减小,但当网络开始出现过拟合时,确认误差将会上升,当确认误差在一定次数的迭代过程中均上升时,网络停止训练,此时可以得到在确认误差最小时网络的权值和偏置值。第3个子集是测试子集,用于比较不同子集划分时网络的适应性。如果测试子集产生的误差达到最小时的迭代次数与确认子集相差很大,则表明子集的划分是不合适的,需要重新进行划分。这种方法称为提前停止法,所谓提前,是指在到达误差目标之前可能会结束训练过程。
提前停止法可以应用于任何算法,只需要在训练过程中用确认子集检验网络误差。
4)隐层节点自生成法:先设计一个仅含有一个隐层节点的网络,在训练过程中,根据误差下降的速率和验证误差的变化来确定是否增加一个隐层节点,即当误差下降的速率低于阈值,并且验证误差已经到达最小值时,增加一个隐层节点,当验证误差的最小值在增加节点后变大,或者网络训练达到误差目标时,停止网络训练。
以含有一个隐层的网络结构为例,隐层节点自生成法的具体实现算法可以结合BP算法或者其改进算法来进行,其一般步骤如下:
(1)设定误差目标X和误差下降率阈值U;
(2)初始化网络结构,隐层节点数n=1,初始化网络权值和偏置值(为小的随机数),计算误差准则函数E;
(3)利用训练子集进行网络学习,调整网络权值和偏置值;
(4)计算误差准则函数E和误差下降率ΔE/E,同时利用验证子集进行验证误差Ev的计算,如果E<X,则到第(8)步,否则到第(5)步;
(5)如果ΔE/E<U,则到第(6)步,否则到第(3)步;
(6)如果验证误差Ev未达到最小值,则到第(3)步;如果验证误差Ev达到最小值且比增加节点前更大,则到第(8)步,否则到第(7)步;
(7)生成新的隐节点n+1,并为其设置权值和偏置值,转到第(3)步;
(8)学习结束,返回学习结果。
隐层节点的个数多了怎样少了怎样
隐层一般是一层或两层,很少会采用三层以上,至少隐层的节点数确定,一般有以下几种方法:1、有经验的人员根据以往的经验凑试出节点个数。2、某些学术研究出固定的求节点方法,如2m+1个隐层节点,m为输入个数。3、修剪法。刚开始建立足够多的节点数,在训练过程中,根据节点数的相关程度,删除重复的节点。
在确定隐层节点数时必须满足下列条件:
(1)隐层节点数必须小于N-1(其中N为训练样本数),否则,网络模型的系统误差与训练样本的特性无关而趋于零,即建立的网络模型没有泛化能力,也没有任何实用价值。同理可推得:输入层的节点数(变量数)必须小于N-1。
(2) 训练样本数必须多于网络模型的连接权数,一般为2~10倍,否则,样本必须分成几部分并采用“轮流训练”的方法才可能得到可靠的神经网络模型。
总之,若隐层节点数太少,网络可能根本不能训练或网络性能很差;若隐层节点数太多,虽然可使网络的系统误差减小,但一方面使网络训练时间延长,另一方面,训练容易陷入局部极小点而得不到最优点,也是训练时出现“过拟合”的内在原因。因此,合理隐层节点数应在综合考虑网络结构复杂程度和误差大小的情况下用节点删除法和扩张法确定。
什么情况下参数是负数
有负值是可能的,因为是非线性拟合函数,说明拟合不好。
主成分分析中的主成分指特征向量。