【问题标题】:Do we need to derive differential/gradient w.r.t. input data in backward function(chainer)?我们是否需要导出差分/梯度 w.r.t.在后向函数(chainer)中输入数据?
【发布时间】:2017-09-01 08:45:01
【问题描述】:

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

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

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

【问题讨论】:

  • PS:每一层都有自己的参数

标签: chainer


【解决方案1】:

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

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

【讨论】:

  • 例如,假设我有2个conv层,底部是第1层,顶部是最后一层。我的问题是 1 conv 层“权重更新”与“梯度 w.r.t. 2 层输入图像?”
猜你喜欢
  • 2018-10-14
  • 2019-04-14
  • 2019-11-19
  • 2022-01-14
  • 2021-06-22
  • 2019-11-27
  • 2022-01-13
  • 2018-01-31
  • 1970-01-01
相关资源
最近更新 更多