0

我在我的研究中实现了一个非常复杂的函数,它在这一层使用了信念传播。我已经导出了该层的梯度wrt W(参数),但是由于它的复杂性,我没有导出梯度wrt input_data(数据来自前一层)。

我对反向传播的细节非常困惑。我搜索了很多关于 BP 算法的内容,一些注释说只对 W(参数)进行微分并使用残差来获得梯度就可以了吗?您的示例似乎我们还需要计算梯度 wrt 输入数据(前层输出)。我很困惑?非常典型的例子是,如何在卷积层中导出输入图像的梯度?

我的网络有两层,我需要在最后一层手动输入 X 来推导梯度吗?(向后需要返回 gx 以让 BP 工作以梯度流到前一层)?

4

1 回答 1

0

如果你不需要输入的梯度,你可以省略它的计算。在这种情况下,返回None作为省略输入梯度的占位符。请注意,在这种情况下,grad反向传播之后的输入的 将不正确。如果你想编写一个可以在任何上下文中使用的函数(包括想要输入梯度的情况),你必须计算所有输入的梯度(除了函数没有微分的情况输入)。这就是为什么 Chainer 的内置函数会为所有输入计算梯度的原因。

顺便说一句,从卷积层的输入图像导出梯度很简单:使用相同的权重将转置卷积(由于历史原因在 Chainer 中称为“反卷积”)应用于输出。

于 2017-09-01T00:45:01.513 回答