2017-08-31 60 views
0

我在我的研究中实现了一个非常复杂的函数,它在这一层使用信念传播。我已经推导出梯度w.r.t.这个层的W(参数),但是因为它的复杂性,我没有导出渐变w.r.t. input_data(数据来自前一层)。我们是否需要导出差分/梯度w.r.t.在向后函数(chainer)中输入数据?

我对于反向传播的细节非常混乱。我搜索了很多关于BP算法的知识,有些笔记说只有差分w.r.t才行。 W(参数)并使用残差得到梯度?你的例子似乎也需要计算渐变w.r.t.输入数据(前一层输出)。我很困惑? 非常典型的例子是,如何导出渐变w.r.t.卷积层输入图像?

我的网络有两层,我是否需要手动派生梯度w.r.t.在最后一层输入X?(向后需要返回gx为了让BP工作到前一层的梯度流程)?

+0

PS:每层都有自己的参数 – machen

回答

0

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

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

+0

例如,假设我有2个conv层,底层是第1层,顶层是最后一层。我的问题是,1 conv会将与“梯度w.r.t. 2层输入图像?”相关的“权重更新” – machen

相关问题