我知道这两个功能是用于割炬的向后传播,界面如下updateGradInput(input, gradOutput)accGradParameters(input, gradOutput, scale)我对gradInputgradOutput在层中的真正含义感到困惑。
假设网络的成本为C和一层L。层gradInputgradOutputL表示d_C/d_input_Ld_C/d_output_L吗?

如果是这样,如何根据gradInput计算gradOutput

此外,accGradParameters意味着要累积d_C/d_Weight_Ld_C/d_bias_L吗?如果是这样,如何计算这些值?

最佳答案

L层的gradInputgradOutput是否表示d_C/d_input_Ld_C/d_output_L
是:

  • gradInput =成本w.r.t层输入的导数
  • gradOutput = w.r.t层的输出成本的导数。

  • 如何根据gradInput计算gradOutput
    The building blocks of Deep Learning修改模式(警告:在此模式中,成本表示为L = Loss和层f),我们有:

    neural-network - 如何在炬管中编写updateGradInput和accGradParameters?-LMLPHP

    有关LogSoftMax层上此类计算的具体分步示例,您可以参考this answer

    accGradParameters是否意味着要累积d_C/d_Weight_Ld_C/d_bias_L
    是。在Torch / nn中分别命名为gradWeightgradBias

    如何计算这些值?

    与上述类似。仍使用上述博客文章中的公式:

    neural-network - 如何在炬管中编写updateGradInput和accGradParameters?-LMLPHP

    除了jacobian的维数不同(有关更多详细信息,请参阅博客文章)。例如,对于线性层,这可以转换为:

    neural-network - 如何在炬管中编写updateGradInput和accGradParameters?-LMLPHP

    这是图层输入和gradOutput之间的外部乘积。在Torch we have中:
    self.gradWeight:addr(scale, gradOutput, input)
    

    和:

    neural-network - 如何在炬管中编写updateGradInput和accGradParameters?-LMLPHP

    这是gradOutput。在Torch we have中:
    self.gradBias:add(scale, gradOutput)
    

    在这两种情况下,scale都是实践中用作学习率的比例因子。

    08-25 05:00