【问题标题】:Backpropagation formula seems to be unimplementable as is反向传播公式似乎无法实现
【发布时间】:2017-08-02 22:17:35
【问题描述】:

我一直在努力提高对反向传播的熟练程度,并且已经了解了执行此操作的标准数学公式。我实施了一个似乎可以正常工作的解决方案(并通过了相关的测试并取得了优异的成绩)。

但是......实际的解决方案(在 MATLAB 中实现,并使用矢量化)在两个重要方面与公式不一致。

公式如下:

delta-layer2 = (Theta-layer2 transpose) x delta-layer3 dot x gprime(-- 现在不重要)

工作代码如下所示:

% d3 is delta3, d2 is delta2, Theta2 is minus the bias column
% dimensions: d3--[5000x10], d2--[5000x25], Theta2--[10x25]

d3 = (a3 - y2);
d2 = (d3 * Theta2) .* gPrime(z2);

我无法用数学公式来协调我的实现,主要有两点:

  1. 工作代码反转表达式第一部分中的术语;
  2. 工作代码不会转置 Theta-layer2,但公式会。

这怎么可能?各个矩阵的维度似乎不允许任何其他工作组合。

乔什

【问题讨论】:

  • 它可能仅取决于设置,两种实现如何定义矩阵。请注意,您不能使用给定的尺寸执行Theta2.' * d2
  • 哦,我注意到了。这就是促使我首先发布这个问题的原因。

标签: matlab machine-learning backpropagation


【解决方案1】:

这不是一个错误的问题,我不知道为什么会投反对票;反向传播算法的实现并不像看起来那样直观。我数学不是很好,而且我从来没有使用过 MATLAB(通常是 c ),所以我避免先回答这个问题,但这是应得的。

首先我们要做一些简化。

我们将只使用in_Data 集合,因此:vector in_Data[N](在下面的情况下 N = 2)(如果我们成功了,只需轻轻拍一下并不难,将其扩展为矩阵)。

我们将使用这个结构:2 I, 2 H, 2 O(我们通过这个成功;我们将在所有方面都成功)这个网络(我从:@ 987654321@)

让我们开始吧:我们知道要更新权重:

注意:M=num_pattern,但我们之前已将in_data声明为向量,因此您可以删除上式中的和以及下式中的矩阵。所以这是你的新公式:

我们将研究 2 个连接:w1 和 w5。让我们写出导数:

让我们编写代码:(我真的不懂 MATLAB,所以我会写一个伪代码)

vector d[num_connections+num_output_neurons]  // num derivatives = num connections whitout count bias there are 8 connections. ;  +2 derivative of O)
vector z[num_neurons]     // z is the output of each neuron.
vector w[num_connections] // Yes a Vector! we have previous removed matrix and the sum.

// O layer
d[10] = (a[O1] - y[O1]);   // Start from last to calculate the error. 
d[9] = (a[O2] - y[O2]);  

// H -> O layer
for i=5; i<=8; i++ ( Hidden to Out layer connections){
    d[i] = (d)*g_prime(z[i])
}

// I -> H layer

 for i=1; i<=8 i++ (Input to Hidden layer connections){

     for j=1; i<=num_connection_from_neuron i++ (Take for example d[1] it depends on how many connections have H1 versus Outputs){
     d[i] = d1 + (d[j+4]*w[j+4] )

     }
  d[i] = d[i]*g_prime(z[i]);
}

如果您需要在 Matrix 中扩展它,请将其写在评论中,我将扩展代码。

所以你已经找到了所有的衍生物。也许这不是您正在搜索的内容。我什至不确定我写的所有内容是否正确(我希望它是正确的)我将在这些天尝试编写反向传播代码,以便在有错误时能够纠正错误。我希望这会有所帮助;总比没有好。

最好的问候,马可。

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 2017-05-12
    • 2015-09-07
    • 2017-09-28
    • 2017-03-13
    • 2018-10-20
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多