在简单神经网络的矢量化实现中的backpropogation问题

时间:2015-04-29 03:08:28

标签: matlab neural-network

我一直在通过UFLDL教程。在简单神经网络的矢量化实现中,教程建议一种方法是通过整个训练集而不是迭代方法。在后传播部分,这将意味着替换:

 gradW1 = zeros(size(W1));
 gradW2 = zeros(size(W2)); 

for i=1:m,
  delta3 = -(y(:,i) - h(:,i)) .* fprime(z3(:,i)); 
  delta2 = W2'*delta3(:,i) .* fprime(z2(:,i));

  gradW2 = gradW2 + delta3*a2(:,i)';
  gradW1 = gradW1 + delta2*a1(:,i)'; 
end;

delta3 = -(y - h) .* fprime(z3)
delta2 = W2'*delta3().*fprime(z2)

gradW2 = delta3*a2'
gradW1 = delta2*a1' 
//apply weight correction now that all gradients
//are computed

请访问this page以获取有关表示法和算法的信息。

然而,这种实现在gradW1和gradW2内部产生了异常大的值。这似乎是我在处理每个训练输入时没有更新权重的结果(在另一个早期的工作实现中对此进行了测试)。我这是对的吗?通过阅读教程,似乎有一种方法可以使这项工作,但我无法想出一些有用的东西。

1 个答案:

答案 0 :(得分:1)

Backpropogation有两种实现方式:批量和在线训练算法。最初你描述了在线训练算法。然后你发现并试图实现批处理训练算法,这种算法有时会产生你所描述的副作用。在您的情况下,将学习样本分成较小的块并学习它们是个好主意。