神经网络反向传播公式 - 矩阵尺寸不匹配?

数据挖掘 神经网络
2022-02-10 21:07:01

我想首先以具有 2 个输入节点、3 个隐藏节点和 2 个输出节点的普通神经网络为例。让输入和隐藏节点之间的权重为Wij(2x3)和隐藏节点和输出(3x2)之间的权重是Wjk. 最后一层具有线性激活。误差梯度:

Wij=Wjkg(Wijx)xerr

但这不满足权重更新方程,因为产品的大小为 2x1。但它应该是 2x3。

1个回答

请务必注意,您将权重存储在列中的前一层。所以我的例子将专门针对这种情况。

如果您使用不同的符号(从神经元到前一层的权重在矩阵的行中) - 交换下面的“行”和“列”:


对于您的情况,任何传入梯度(来自上面的层或来自 Error aka Cost 函数)必须具有维度 2。它必须是向量。否则它不会在物理上“匹配”您的输出节点。

A节

您的权重(隐藏到输出层)的梯度将是一个 3x2 矩阵。你可以从你的权重中减去这个矩阵来纠正它们。不要忘记学习率。

要构建此矩阵,请将传入的梯度(维数为 2 的 vec,已通过激活函数)复制到新的空矩阵 ​​(3x2) 的每一行中,然后将其每一列按组件乘以 3 的 fwdprop 输出-节点隐藏层。这是你的GradForWeights矩阵

B节

梯度 wrt 隐藏节点将是一个 3d 向量。

为此,请在Weights(3x2) 和传入梯度向量 (2d) 之间使用点积。结果向量的维数为 3,也可以用作下面层的“输入梯度向量”(当然,在您通过该子层的激活函数之后)。