Matlab 反向传播公式似乎是不可实现的

Matlab 反向传播公式似乎是不可实现的,matlab,machine-learning,backpropagation,Matlab,Machine Learning,Backpropagation,我一直在努力提高对反向传播的熟练程度,并且已经了解了用于反向传播的标准数学公式。我实现了一个似乎工作正常的解决方案(并以优异成绩通过了相关测试) 然而。。。实际解(在MATLAB中实现,并使用矢量化)在两个重要方面与公式不一致 公式如下所示: % d3 is delta3, d2 is delta2, Theta2 is minus the bias column % dimensions: d3--[5000x10], d2--[5000x25], Theta2--[10x25] d3 =

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

然而。。。实际解(在MATLAB中实现,并使用矢量化)在两个重要方面与公式不一致

公式如下所示:

% 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);

delta-layer2=(θ-layer2转置)x delta-layer3点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);
我无法将我实现的与数学公式相协调,原因有两个:

  • 工作代码反转表达式第一部分中的术语
  • 工作代码不转置θ-layer2,但公式转置θ-layer2
  • 这怎么可能?单个矩阵的维数似乎不允许任何其他工作组合


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

    首先,我们必须做一些简化

    我们将在_数据中只使用
    设置:
    向量在_数据中[N]
    (在下面的情况下,N=2)(如果我们成功,仅使用pat并不难在矩阵中扩展它)

    我们将使用这个结构:2 I,2 H,2 O(我用这个成功了;我们用所有的成功了)这个网络(我从:)

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

    注意:
    M=num\u pattern
    ,但我们之前在\u data中将
    声明为向量,因此您可以删除上面公式中的和以及下面公式中的矩阵。这就是你的新公式:

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

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

    vector d[num\u connections+num\u output\u neurons]//num derivatives=num connections,不带计数偏差有8个连接+2(O的导数)
    向量z[num_neurons]//z是每个神经元的输出。
    向量w[num\u connections]//是向量!我们已经移除了前面的矩阵和和。
    //O层
    d[10]=(a[O1]-y[O1]);//从最后开始计算误差。
    d[9]=(a[O2]-y[O2]);
    //H->O层
    对于i=5;i H层
    
    对于i=1;我这不是一个错误的问题,我不知道为什么那些反对票;反向传播算法的实现看起来并不直观。我的数学不是很好,也从未使用过MATLAB(通常是c),所以我避免先回答这个问题,但这是我应得的

    首先,我们必须做一些简化

    我们将在_数据中只使用
    设置:
    向量在_数据中[N]
    (在下面的情况下,N=2)(如果我们成功,仅使用pat并不难在矩阵中扩展它)

    我们将使用这个结构:2 I,2 H,2 O(我用这个成功了;我们用所有的成功了)这个网络(我从:)

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

    注意:
    M=num\u pattern
    ,但我们之前在\u data
    中将
    声明为向量,因此您可以删除上面公式中的和以及下面公式中的矩阵。这就是你的新公式:

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

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

    vector d[num\u connections+num\u output\u neurons]//num derivatives=num connections,不带计数偏差有8个连接+2(O的导数)
    向量z[num_neurons]//z是每个神经元的输出。
    向量w[num\u connections]//是向量!我们已经移除了前面的矩阵和和。
    //O层
    d[10]=(a[O1]-y[O1]);//从最后开始计算误差。
    d[9]=(a[O2]-y[O2]);
    //H->O层
    对于i=5;i H层
    
    对于i=1;iIt可能仅仅取决于设置,两个实现如何定义矩阵。注意,你不能用给定的尺寸做θ2.*d2。哦,我注意到了。这就是促使我首先提出这个问题的原因。这可能取决于设置,以及两个实现如何定义矩阵。注意,你不能用给定的尺寸做θ2.*d2。哦,我注意到了。这就是促使我首先提出这个问题的原因。