新手关于bp网络的一个问题
大家好,我是matlab新手,昨天用matlab做神经网络的仿真,可仿真结果与我预想的不一样,想请高手帮忙。以下是问题的描述:
我写的是两层sigmoid单元,8个输入单元,3个隐藏单元,8个输出单元,全相连。希望通过网络训练能使输出和输入一致,如输入【0 0 0 0 1 0 0 0】则输出为【0 0 0 0 1 0 0 0】。初始的网络权值都设为0,所有的mc设为0,lr设为0.3,并将biasConnect全设为0。用adapt函数训练样例:输入【1 0 0 0 0 0 0 0】训练值为【1 0 0 0 0 0 0 0】一次。
输出 =
0.5018
0.4982
0.4982
0.4982
0.4982
0.4982
0.4982
0.4982
输出层权值 =
0.0047 0.0047 0.0047
-0.0047 -0.0047 -0.0047
-0.0047 -0.0047 -0.0047
-0.0047 -0.0047 -0.0047
-0.0047 -0.0047 -0.0047
-0.0047 -0.0047 -0.0047
-0.0047 -0.0047 -0.0047
-0.0047 -0.0047 -0.0047
然而,按照我的计算,对于输出层的sigmiod单元的梯度方向是:d = o*(1-o)*(t -o)*x,其中d为梯度,o为网络输出,t为训练值,x为隐藏层的输出。w = w + d*lr ,其中w是输出层权值,d是梯度方向,lr是学习数率。按照我的计算,按上面的训练过程,所有o = 0.5,x = 0.5,对于第一个输出单元t = 1。这样d = 0.5*(1-0.5)*(1-0.5)*0.5 = 0.0625,而w = 0+0.0625*0.3 = 0.01875 。与仿真实验不符!
|