无法理解自定义 Theano Op 中的 grad() 方法

can't understand the grad() method in custom Theano Op

当我阅读有关 Creating a new Op 的文档时,我无法理解示例中的 grad() http://deeplearning.net/software/theano/extending/extending_theano.html#example-op-definition。为什么他们 return output_grads[0] * 2 而不是 2output_grads[0] 代表什么?

如果 output_grads[0] 表示关于输入 x 的链导数,在下一个示例中 http://deeplearning.net/software/theano/extending/extending_theano.html#example-props-definition,为什么 grad() return a * output_grads[0] + b (应该是 self.a * output_grads[0] + self.b)不是 self.a * output_grads[0]?

更复杂的自定义操作怎么样?像y = exp(x1)/(a*(x1**3)+log(x2)),它的grad()怎么写?还有,如果输入是向量或者矩阵,grad()怎么写?

正如 the extended .grad() documentation 指出的那样,output_grads 参数是

dC/df

(其中 f 是您的 Op 输出之一,C 是您调用 theano.tensor.grad(...))

页面还说 Op.grad(...) 方法必须 return

dC/dx=(dC/df)(df/dx)

(其中 xOp 的输入)

我认为 ax+b 的例子是错误的。如果您查看实际代码,例如 Sigmoid or the XLogX, 它似乎只是执行链式规则。


免责声明:到目前为止,我还没有实现自定义 Op,我自己正在研究这个,这就是我的理解。