【问题标题】:Trouble with backpropogation in a vectorized implementation of a simple neural network简单神经网络的矢量化实现中的反向传播问题
【发布时间】:2015-07-08 03:26:17
【问题描述】:

我一直在阅读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 中产生了异常大的值。这似乎是因为我在处理每个训练输入时没有更新权重(在另一个较早的工作实现中对此进行了测试)。我是对的吗?通过阅读教程,似乎有一种方法可以使这项工作正常进行,但我想不出可行的方法。

【问题讨论】:

    标签: matlab neural-network


    【解决方案1】:

    反向传播有两种实现方式:批量和在线训练算法。最初您描述了在线训练算法。然后,您发现并尝试实现批量训练算法,该算法有时会产生您所描述的副作用。在您的情况下,将学习样本分成更小的块并对其进行学习可能是个好主意。

    【讨论】:

      猜你喜欢
      • 2016-02-19
      • 2011-10-28
      • 2017-09-28
      • 2016-08-17
      • 2019-11-06
      • 2017-08-13
      • 2012-04-14
      • 2018-05-17
      • 2015-03-03
      相关资源
      最近更新 更多