冰冰点灯,照亮我家门前~
欢迎进入nnetinfo
用户名:
密码:
深圳学习数据分析,数据挖掘,请联系yahushuxue@163.com~
nnetinfo : 本网发布神经网络相关的学习与研讨内容。
当前位置:教学区
Matlab的初始化
作者:梁小h   日期:2015-12-30 11:22:06.0

我们都知道神经网络初始化的重要性,但是我们写自己的神经网络代码时往往都没有对权值阈值初始化方法进行深入设计,这就严重影响了我们神经网络的效果。

 

本文主要讲述了matlab工具箱初始化权值阈值的方法,是作者读完matlab工具箱底层代码和相关文献后完成的一编文章,主要用来解答大家阅读《[重要]写自己的BP神经网络(traingd)》初始化部分的代码时遇到的困惑。

闲话不说,正文开始!

对于神经元的初始化,以单输入网络为例,我们希望网络初始化成以下的形式:

                                              

可以看到各个隐节点均匀分布在输入数据的范围,这样的初始化,一来每个神经元都充分被利用,二来输入域(即x轴)处处都被神经元的非线性区间覆盖到。

 

下面我们推导出这种初始化方法的数学表达式:

 

为便于理解,我们先从单输入讲解:

一.单输入情况

1.求w

设数据的范围在[-1,1]之间(长度为2),则每个隐节点非线性部分需要覆盖的长度为:2/hn。

下面计算每个隐节点tansig(wx+b)非线性部分的长度。现设Tansig(x)的非线性区间为[-1,1],此时tansig(x)的非线性区间长度为2,易知tansig(wx+b)的非线性区间长度就为2/w,于是,有:

2/W = 2/hn。   即    w =hn.

2.求b

B的作用就是使每个隐节点均匀地落在输入域。我们先线性生成每个隐节点的中心,例如现在有5个隐节点,那么在输入域[-1,1]之间线性生成中心:c1=-1,c2=-0.5,c3=0,c4=0.5,c5=1.那么第i个隐节点如下表示:tansig(w(x-c))=tansig(wx-wc),即可求出b的值b=-wc。

 

下面扩展到多输入的情况:

 

二.多输入网络

1.求w  

如同单输入的情况,我们需要计算每个隐节点非线性区域的大小与它们覆盖的区域大小。

隐节点非线性区域的大小:

先看2个输入的情况,即tansig(w1x1+w2x2 +b ) 的非线性区域大小,它是每一个方向有效长度的乘积:(2/w1) *(2 /w2),希望下图能帮助你理解为什么是乘积:

                                         

假设有in个输入,非线性区域大小自然是(2/w1)*(2/w2)*...(2/win),

 

 

每个输入的长度为2,in个输入,则长度为2^in。每个隐节点非线性部分负责覆盖的长度为2^in/hn

因此:

(2/w1)*(2/w2)*...(2/win)=2^in/hn

即hn = w1*w2*w3*...win;

那平均每个wi =hn^(1/in)

 

  1. 对b
  2. 的作用就是使每个隐节点均匀地落在输入域。在输入为多维向量的时候,我们只需要选择其中一维,使隐节点在这一维均匀分布即可。在这里我们选择第一维。

例如现在有5个隐节点,那么在输入域[-1,1]之间线性生成中心:c1=-1,c2=-0.5,c3=0,c4=0.5,c5=1.那么第i个隐节点如下表示:tansig(w1(x1-ci)+w2*x2)=tansig(w1x1+w2x2-w1ci),即可求出bi的值bi=-w1*ci

 

三.加入随机因素

 

  我们上面已经得到了w和b,但为了得到多样性的初始值,我们对初始值作一定的随机 扰动,先生成一个随机化矩阵:

R = rand(hn,in); %hn是隐节点个数,in是输入个数

为了不让某个神经元的值过饱和或不足,我们对每个神经元标准化:

即对第i个神经元有:

然后将扰动矩阵用在上面已经初始化好的w上就可以了:

W = hn^(1/in).*R;

这样w就带有一定的随机性了。

根据(二)中b的计算方法, bi=-w1*ci= -hn^(1/in).*Ri1* ci。为了使b有一定的随机性,可以如下处理:bi=-w1*ci= -hn^(1/in).*sign(Ri1)* ci,这样,bi就有一定的随机性了。

 

 

理论暂且分析到这里。想真正了解每一个步骤,还是需要读代码,《[重要]写自己的BP神经网络(traingd)》里有初始化权值阈值的代码,想深入掌握的同学请耐心阅读代码。

 

   这里推荐作者读的文献给大家:<Nguyen_Widrow初始化权值(原文) >

   初步的翻译:《神经网络初始化nguyen_Widrow法(上)》《神经网络初始化nguyen_Widrow法(下)