批量计算 BCE 反向传播中的 dx
Calculating dx In BCE Backpropagation With Batches
我正在尝试使用批处理从头开始反向传播,但在计算 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 是隐藏层的结果,那么您对反向传播梯度的计算是正确的。
我正在尝试使用批处理从头开始反向传播,但在计算 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 是隐藏层的结果,那么您对反向传播梯度的计算是正确的。