BCE批量反向传播中dx的计算



我正在尝试使用批量从头开始反向传播,并且我在计算dx时遇到问题。首先,我想从定义变量开始,以避免混淆:

a - The activation value calculated by passing z through an activation function
z - The value before the activation function of the layer
x - The inputs into the layer
w - The weights that connect the inputs to the output nodes
da - The derivative of a
dz - The derivative of z
dx - The derivative of x

我知道这是x的导数

dx = w.T*dz
Note: * means dot and .T means transpose

现在让我来介绍这个问题。假设我有一个神经网络,有2个输入节点,3个输出节点,批处理大小为5。如何计算dx呢?在这种情况下,在转置之前,权重的形状将是(z, x)或(3,2),dz的形状将是(z, batches)或(3,5)。如果我要使用上面的公式,我将得到(x, batches)或(2,5)的形状。在使用上面的公式得到dx后,我是否会对最后一个维度求和(得到形状为(2,1))?下面是一个使用虚构值的点积表示:

w.T          *          dz            =        dx
[[1, 2, 3, 4, 5],
[[1,  0.5, 1],    *    [1, 2, 3, 4, 5],    =   [[2.5,  5,  7.5,  10,  12.5],
[-1, -1,  -0.5]       [1, 2, 3, 4, 5]]         [-2.5, -5, -7.5, -10, -12.5]] 

你做的一切都是正确的。在反向传播中X总是需要和dX有相同的维数。如果X是形状(2,5)的中间结果,则梯度也具有形状(2,5)。这样你就可以更新矩阵X,在你的例子中,矩阵X是输入矩阵,你永远不会更新它。您只需要更新W.

如果X是隐藏层的结果,你对反向传播梯度的计算是正确的。

最新更新