BP神经网络

【分析】隐节点个数对BP神经网络的影响

作者 : 老饼 发表日期 : 2022-11-23 03:48:41 更新日期 : 2024-12-05 18:47:17
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com




BP神经网络隐节点个数对于BP神经网络的拟合效果有着关键性的影响

本文讲解隐节点个数对BP神经网络的影响,以及为什么会有这样的影响

通过本文,可以更具体的了解过多、过少的隐节点个数分别对BP神经网络建模效果的影响





     01. BP神经网络-隐节点个数的意义      





本节回顾BP神经网络隐节点的意义,下文再探讨隐节点对BP神经网络的效果的影响





       隐节点的意义回顾       


以最常用的三层BP神经网络来分析,三层BP神经网络的数学表达式如下:
 
三层BP神经网络的数学表达式
从表达式中可知,三层BP神经网络的每个隐节点就代表一个tansig
即,三层BP神经网络的本质就是用多个tansig来叠加出目标曲线
 三层BP神经网络的本质
因此,用多少个隐节点,就代表我们打算使用多少个tansig来叠加出目标曲线







     02. 隐节点个数对BP拟合效果的影响    




本节探讨隐节点个数对BP的拟合效果有什么影响




     隐节点个数与BP神经网络的拟合效果   


容易知道,隐节点越多,BP神经网络的拟合能力就越强
 例如一个隐节点(tansig)的时候,怎么搞也只是一个S型的曲线,
而两个隐节点,则能拟合出单峰型曲线,如此类推,越多的隐节点,能叠加出的形态就越多

由于隐节点越多,网络的拟合能力越强,当隐节点足够多时,能拟合任意的曲线
那么,我们设置隐节点时,是不是设得越多越好呢?
那倒不是!因为过强的拟合能力容易令网络出现过拟合!
 总的来说,
 👉隐节点过少,会导致拟合能力不足 
👉隐节点过多,会令网络容易过拟合

 



    小实验:隐节过多易导致过拟合    


下面我们通过一个小实验,说明隐节点过多会导致过拟合
 目标拟合数据
我们企图拟合以下数据点
 隐节点实验数据
少量隐节点时的拟合结果
两个隐节点时,拟合的结果如下,
少量隐节点时的拟合结果
大量隐节点时的拟合结果 
10个节点的时候拟合结果如下
 大量隐节点时的代码与拟合结果
 实验总结
从实验结果可以轻易看出,10个节点的曲线已经扭扭曲曲,
这主要是我们设置10个隐节点,给予了模型过强的拟合能力
对于以上数据来说,10个隐节点不如2个隐节点的结果来得更合理
 备注:以上实验用的是matlab2018a







     03. 隐节点个数对BP训练误差的影响    




本节讲解隐节点过多对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 




联系老饼