反向传播公式似乎无法实现

Backpropagation formula seems to be unimplementable as is

我一直致力于精通反向传播,并且 运行 掌握了执行此操作的标准数学公式。我实施了一个似乎可以正常工作的解决方案(并以优异的成绩通过了相关测试)。

但是...实际解决方案(在 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,但公式转置。

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

乔什

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

首先我们要做一些简化。

我们将只使用一个 in_Data 集合,所以: vector in_Data[N] (在下面的情况下 N = 2 )(如果我们只成功一个pat不难扩展成矩阵)。

我们将使用这个结构:2 I, 2 H, 2 O(I 我们成功了,我们将成功)这个网络(我'已从以下位置盗取:this blog )

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

注意: M=num_pattern,但是我们之前声明了in_data为vector,所以可以删除公式中的和上面和下面公式中的矩阵。所以这是你的新公式:

我们将研究 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 中扩展它,请将其写在我将扩展代码的注释中。

这样你就找到了所有的导数。也许这不是您要搜索的内容。我什至不确定我写的所有内容是否正确(我希望是)我将在这些天尝试编写反向传播代码,以便能够纠正错误(如果有)。我希望这会有所帮助;聊胜于无

此致,马可。