本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
在初学BP神经网络的时候,总是非常抽象和难理解
但是,学久了会发现,BP神经网络原来就是曲线拟合!
一下子才具体、深入的理解到BP神经网络是什么
本文讲解如何从曲线拟合角度理解BP神经网络,从列举相关好处
本节讲解如何从曲线拟合角度理解BP神经网络
BP神经网络就是曲线拟合
我们一般看到的是如下的三层BP神经网络
但从这样的拓扑图来看,总感觉BP神经网络就是个黑箱
并不知道它为什么能够起到预测的效果
但是,如果注意到BP神经网络的表达式是以下形式
就会突然灵光一闪,天!这东西不就是一个曲线拟合吗?
每个tansig其实就是一个S形曲线,而内外层的w、b则控制了S曲线的高矮肥瘦
所以总的来说,BP神经网络就是用多个S曲线拼凑出目标曲线
而训练则是调整各个S曲线的形态,使最终拼凑出的目标曲线与数据的误差尽量小~
本节讲解从曲线拟合角度理解BP神经网络的一些好处
从曲线拟合角度理解隐节点
从曲线拟合理解BP,
很容易就可以知道每个隐节点其实就是一个tansig,
隐节点越多,就意味着用越多的tansig来凑合目标曲线,
理论上只要tansig足够多,就可以凑合出任何形态的曲线
也就是说,隐节点越多,模型的拟合能力就越强,
但是,隐节点过多未必是好事
如下,我们希望拟合以下的数据点
我们设置了10个隐节点,就会得到如下的结果
它相对较扭曲,但我们希望它更平滑些,
那么就可以减少tansig的个数,使它"不能凑出这么扭曲的曲线"
将隐节点设为2个后,就得到以下曲线
所以,总的来说,
如果目标曲线简单平滑,就应该设少一些隐节点,限制拟合能力
如果目标曲线起伏跌宕,就应该设多一些隐节点,增强拟合能力
从曲线拟合角度理解神经元饱和
由于我们主要是用tansig曲线去拼凑目标曲线,
而tansig的非线性部分在【-1.7,1.7】之间
因此,每个tansig的输出应该包含【-1.7,1.7】区间
如果不包含,那么该tansig的输出基本就是一条横线,
也就是说,该tansig对网络没有起到什么作用,
因为阈值b已经包含了横线部分的功能
这种情况也称为神经元过于饱和
所以,在初始化时,我们尽量不要让神经元饱和
同样,在训练后,我们也可以检查神经元是否饱和
从以上两个例子,可以get到从曲线拟合角度理解BP神经网络会非常形象
当然,好处还有很多,就不再一一列举,此处仅为抛砖引玉
在训练不理想时,不妨从曲线拟合角度去思考,往往更容易找到问题所在
End