本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
BP神经网络隐节点个数对于BP神经网络的拟合效果有着关键性的影响
本文讲解隐节点个数对BP神经网络的影响,以及为什么会有这样的影响
通过本文,可以更具体的了解过多、过少的隐节点个数分别对BP神经网络建模效果的影响
本节回顾BP神经网络隐节点的意义,下文再探讨隐节点对BP神经网络的效果的影响
隐节点的意义回顾
以最常用的三层BP神经网络来分析,三层BP神经网络的数学表达式如下:
从表达式中可知,三层BP神经网络的每个隐节点就代表一个tansig
即,三层BP神经网络的本质就是用多个tansig来叠加出目标曲线
因此,用多少个隐节点,就代表我们打算使用多少个tansig来叠加出目标曲线
本节探讨隐节点个数对BP的拟合效果有什么影响
隐节点个数与BP神经网络的拟合效果
容易知道,隐节点越多,BP神经网络的拟合能力就越强
例如一个隐节点(tansig)的时候,怎么搞也只是一个S型的曲线,
而两个隐节点,则能拟合出单峰型曲线,如此类推,越多的隐节点,能叠加出的形态就越多
由于隐节点越多,网络的拟合能力越强,当隐节点足够多时,能拟合任意的曲线
那么,我们设置隐节点时,是不是设得越多越好呢?
那倒不是!因为过强的拟合能力容易令网络出现过拟合!
总的来说,
👉隐节点过少,会导致拟合能力不足
👉隐节点过多,会令网络容易过拟合
小实验:隐节过多易导致过拟合
下面我们通过一个小实验,说明隐节点过多会导致过拟合
目标拟合数据
我们企图拟合以下数据点
少量隐节点时的拟合结果
两个隐节点时,拟合的结果如下,
大量隐节点时的拟合结果
10个节点的时候拟合结果如下
实验总结
从实验结果可以轻易看出,10个节点的曲线已经扭扭曲曲,
这主要是我们设置10个隐节点,给予了模型过强的拟合能力
对于以上数据来说,10个隐节点不如2个隐节点的结果来得更合理
备注:以上实验用的是matlab2018a
本节讲解隐节点过多对BP神经网络求解带来的负面影响
隐节点个数对BP训练误差的影响
隐节点个数越多,BP神经网络的拟合能力越强
那么,是不是只要隐节点越多,训练出来的模型在训练数据上的拟合误差越小呢?
当然不是!因为隐节点越多,参数就越多!参数增加的同时会给求解带来难度,
在隐节点极极极极多的时候,要找到一个好的解就像大海捞针一样
因此,隐节点过多,最终训练结果的误差未必会小
总的来说
隐节点过少,虽然求解压力小,但即使求得最好的解误差也还很大
隐节点过多,虽然最好的解误差会很小,但很难找到这个最好的解
在设置时隐节点时,也要适当考虑求解的压力,才能获得一个好的训练结果
小实验:隐节点过多导致训练误差增大
我们还是以上面的实验数据为例
分别用2个隐节点和100个隐节点进行拟合,
拟合结果如下
两者误差如下
👉 2 个隐节点的均方误差:0.0753
👉 100个隐节点的均方误差:0.4567
可以看到,100个隐节点的误差反而提升了
close all
setdemorandstream(88888);%设定随机种子,让结果每次都一样
% 生成数据
x = 0:0.1:7;
y = sin(x)+ rand(size(x));
% --------用2个隐节点---------
net = newff(x,y,2,{'tansig','purelin'}); % 建立网络
[net,tr] = train(net,x,y); % 训练网络
py = sim(net,x); % 用网络进行预测
mse2 = mean((py-y).^2) % 求均方误差
figure
subplot(1,2,1)
plot(1:length(y),y,'*',1:length(y),py,'-')
title('2个隐节点')
% --------用100个隐节点---------
net = newff(x,y,100,{'tansig','purelin'}); % 建立网络
[net,tr] = train(net,x,y); % 训练网络
py = sim(net,x); % 用网络进行预测
mse100 = mean((py-y).^2) % 求均方误差
subplot(1,2,2)
plot(1:length(y),y,'*',1:length(y),py,'-')
title('100个隐节点')
好了,以上就是隐节点个数对BP神经网络的影响了~
End