本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
我们都知道BP神经网络初始化的重要性,
但是我们写自己的BP神经网络代码时往往都没有对权值阈值初始化方法进行深入设计,这就严重影响了我们神经网络的效果
笔者通过阅读matlab工具箱源码,发现matlab工具箱在权重阈值的初始化上采用的是《nguyen_Widrow法》
本文结合matlab的源代码与《nguyen_Widrow法》原文整理出初始化的原理和思路
通过本文,可以学习和理解BP神经网络初始化的原理,是之后我们复现工具箱源代码的基础
nguyen_Widrow法的目标
我们已经知道,BP神经网络就是通过叠加多个tansig,拼凑出最终的目标函数
对于神经元的初始化,
以单输入网络为例,
nguyen_Widrow希望网络初始化成以下的形式
![]()
可以看到,它的目的就是让各个隐节点均匀分布在输入数据的范围
也就是让每个隐神经元各自负责一小块
nguyen_Widrow法的好处
为什么nguyen_Widrow法希望将各个隐节点均匀分布?
因为这样的初始化的好处有两点
👉 01. 每个神经元都充分被利用
👉 02. 输入域(即x轴)处处都被神经元的非线性区间覆盖到
下面我们推导出这种初始化方法的具体数学表达
w的取值公式推导
w的取值公式推导如下
1.先推导出每个tansig需要覆盖的长度
设数据的范围在[-1,1]之间(长度为2),现有个隐节点
则每个隐节点非线性部分需要覆盖的长度为:
2.再算出tansig(wx+b) 非线性部分的长度
设的非线性区间为[-1,1](长度为2)
则非线性区间的长度就为:
3.w的取值
现要求的非线性部分覆盖住2/hn,
则有:
可得:
✍️补充
如果需要让每个区间有部分重叠
可以适当放宽非线性部分的长度
例如
b的取值公式推导
b 的作用就是使每个隐节点均匀地落在输入域
下面我们根据这一需求,推导出b的取值公式
tansig中心所要落在的位置
每个tansig的中心需要落在的位置不同,
但所有tansig的中心应在输入范围内线性均匀分布
因此可以根据输入范围直接线性生成每个隐节点的中心C
例如
现在有5个隐节点,那么在输入域[-1,1]之间线性生成中心
即
将tansig平移到各个中心点
要将第i个隐节点移到第i个中心点
只需如下操作
根据上式易得
下面我们仍然按此思路,扩展到多输入。
多维与一维的区别
输入为多维时,要比一维更复杂一些
下面以二维为例,说明多维与二维的不同之处
区域划分的差异
下面是一个二维函数
可以看到,
每个区域都有自己的特性,
我们需要每个区域都照顾到位
对于区域的划分,就需要以网格的形式,
如下
网络的参数意义的差异
仍用二维举例
WX+b就是 的中心线
|W| 控制了 的宽度
W的方向控制了的方向
则是原点到中心线的距离,即控制了垂直于W方向的平移距离
W的取值公式推导
对于多输入情况,
W的取值公式推导如下
1.先推导出每个tansig需要覆盖的长度
假设将区域每个维度都等量划分为份,如下
则区域共有 个小网格(N为输入的维度)
现在我们需要每个隐神经元负责一个小网格,
所以网格个数等于隐神经元个数:
即
由于每个输入的范围在 [-1,1] (即每维长为2),
可以算得每个网格长为
即每个tansig需要覆盖的范围为
2.再算出tansig(wx+b) 非线性部分的长度
设 tansig(x)的非线性区间为 [-1,1],
则的有效范围为:
用二维的情况来理解
的有效范围就是
平面 与平面之间的距离
不难求出,有效长度为
即的有效长度为:
3.W的长度
现要求的有效长度覆盖网格的长度
则有:
即
如果需要让每个区间有部分重叠
可以适当放宽非线性部分的长度
例如
4.W的取值公式
以上我们仅仅是确定了W的长度|W|
对于W的具体取值,还需依赖于W的方向
而W的方向并不是那么的重要
所以只需先生成一个方向随机的单位W(这里记为)
然后再把这个W的长度放宽到上述|W|即可
生成方向随机的单位W方法如下:
假设有3个输入
(1)随机生成
(2)将 W 归一化:
这样,就生成了方向随机的单位
将 乘以(3)中确定的宽度,即有:
其中,是随机数
这里的公式有些不严谨,请结合之前的讨论理解
b的取值公式
在一维时,我们将第i个神经元移到由[-1,1]线性生成的的第i个元素上
同样地,在多维的时候,我们则是移到 上
由于
易得
将代入其中
可得
End