在反向传播中,当神经网络的误差收敛到0.5时是什么意思?

问题描述 投票:0回答:1

我一直在尝试学习神经网络背后的数学,并已在Matlab中实现了以下等式的一个版本,其中包括偏置项。

Backpropogation equations matrix form

Visual representation of the problem and Network

clear;clc;close all;
#Initialize weigths and bias from input to hidden layer
W1 = rand(3,4)
b1 = ones(3,1)
#Initialize weights from hidden to output
W2 = rand(2,3)
b2 = ones(2,1)

#define sigmoid funciton
s = @(z) 1./(1 + exp(-z));
ds = @(z) s(z).*(1-s(z));

data = csvread("data.txt");

for j = 1 : 100
  for i = 1 : length(data)
      x0 = data(i,2:5)';

      #Find the truth
      if data(i,6) == 1 ;
        t = [1;0]   ;
      else
        t = [0;1];
      end

      #Forward propogate
      x1 = s(W1*x0 + b1);
      x2 = s(W2*x1 + b2);
      iter = (j-1)*length(data) + i;
      E((j-1)*length(data) + i) = norm(x2-t)^2;
      E(length(E))

      #Back propogate
      delta2 = (x2-t).*ds(W2*x1+b2);
      delta1 = W2'*delta2.*ds(W1*x0+b1);

      dedw2 = delta2*x1';
      dedw1 = delta1*x0';

      alpha = 0.001*(40000-iter)/40000;
      W2 = W2 - alpha*dedw2;
      W1 = W1 - alpha*dedw1;
      b2 = b2 - alpha*delta2;
      b1 = b1 - alpha*delta1;
  end
end
plot(E)
title('Gradient Descent')
xlabel('Iteration')
ylabel('Error')

[我运行此程序时,我收敛于权重,该权重给出的恒定误差为0.5而不是0.0根据W1和W2的初始样本,误差图看起来像this

整个集合的权重W1和W2的输出为〜[0.5,0.5],而不是[1,0](isStairs = true)或[0,1](isStairs = False)

其他信息:

  • 如果我遍历单个数据点而不是整个学习集,那么对于该特定情况,它确实收敛到零误差。 (例如20次迭代左右)所以我认为我的导数是正确的吗?
  • 为了使模型收敛,学习率必须非常小。不知道这意味着什么。

该神经网络是否有效解决上述问题?如果是这样,那么收敛到0.5的误差意味着什么?

matlab machine-learning neural-network gradient-descent backpropagation
1个回答
0
投票

NN从数据中学习。如果只有一个示例,它将通过听觉学习该示例,并且您的错误为零。但是,如果您有更多示例,则它们可能不会处于良好的曲线上,而是嘈杂的。因此,很难通过网络来听到数据(这也取决于NN拥有的自由参数的数量,但您有所了解)...但是,您不希望NN详细了解所有信息。您希望它了解整体趋势(而不是噪音)。但这也意味着,由于存在噪声,您的错误不会收敛到零,而您的NN则不应该学习该噪声。因此,如果最后出现一个(小)错误,请不要担心。

但是学习率呢?好吧,假设您有10个示例。其中有8条描述出一条完美的线条,但有2条显示出噪点。一个看向右边(让我们说+1),另一个看向左边(-1)。如果NN估计了这些点之一并进行更新以最小化由此得出的误差。更新将从+跳到-,反之亦然。取决于您的学习速度,这种跳跃最终可能会收敛到中间(这是正确的功能),或者可能永远持续下去...本质上,这就是学习速度的作用:它确定估计误差对更新有多大影响/学习网络。因此,一个好主意是从一开始就选择较大的学习速率(由于随机初始化,网络的性能确实很差),并在已经学习到某些东西时降低速率。您可以以较低的学习率实现相同的目标,但是需要更长的时间;)

© www.soinside.com 2019 - 2024. All rights reserved.