我知道这两个功能是用于割炬的向后传播,界面如下updateGradInput(input, gradOutput)accGradParameters(input, gradOutput, scale)
我对gradInput
和gradOutput
在层中的真正含义感到困惑。
假设网络的成本为C
和一层L
。层gradInput
的gradOutput
和L
表示d_C/d_input_L
和d_C/d_output_L
吗?
如果是这样,如何根据gradInput
计算gradOutput
?
此外,accGradParameters
意味着要累积d_C/d_Weight_L
和d_C/d_bias_L
吗?如果是这样,如何计算这些值?
最佳答案
L层的gradInput
和gradOutput
是否表示d_C/d_input_L
和d_C/d_output_L
是:
gradInput
=成本w.r.t层输入的导数gradOutput
= w.r.t层的输出成本的导数。 如何根据
gradInput
计算gradOutput
从The building blocks of Deep Learning修改模式(警告:在此模式中,成本表示为
L
= Loss
和层f
),我们有:有关LogSoftMax层上此类计算的具体分步示例,您可以参考this answer。
accGradParameters
是否意味着要累积d_C/d_Weight_L
和d_C/d_bias_L
是。在Torch / nn中分别命名为
gradWeight
和gradBias
。如何计算这些值?
与上述类似。仍使用上述博客文章中的公式:
除了jacobian的维数不同(有关更多详细信息,请参阅博客文章)。例如,对于线性层,这可以转换为:
这是图层输入和
gradOutput
之间的外部乘积。在Torch we have中:self.gradWeight:addr(scale, gradOutput, input)
和:
这是
gradOutput
。在Torch we have中:self.gradBias:add(scale, gradOutput)
在这两种情况下,
scale
都是实践中用作学习率的比例因子。