Neural network 如何在torch中写入UPDATEGRADIPUT和ACCGRADPUT参数?

Neural network 如何在torch中写入UPDATEGRADIPUT和ACCGRADPUT参数?,neural-network,deep-learning,backpropagation,torch,gradient-descent,Neural Network,Deep Learning,Backpropagation,Torch,Gradient Descent,我知道这两个函数用于火炬的反向传播,接口如下 updateGradInput(输入、梯度输出) accGradParameters(输入、gradOutput、缩放) 我对gradInput和gradioutput在层中的真正含义感到困惑。 假设网络的成本是C和一层L。层L的gradInput和gradioutput是否表示d_C/d_input_L和d_C/d_output_L 如果是,如何根据梯度输出计算梯度输入 此外,accGradParameters是否意味着累积d_C/d_Weig

我知道这两个函数用于火炬的反向传播,接口如下

updateGradInput(输入、梯度输出)
accGradParameters(输入、gradOutput、缩放)
我对
gradInput
gradioutput
在层中的真正含义感到困惑。 假设网络的成本是
C
和一层
L
。层
L
gradInput
gradioutput
是否表示
d_C/d_input_L
d_C/d_output_L

如果是,如何根据
梯度输出计算
梯度输入

此外,
accGradParameters
是否意味着累积
d_C/d_Weight_L
d_C/d_bias_L
?如果是,如何计算这些值

层L的
gradInput
gradioutput
表示
d_C/d_输入
d_C/d_输出

是的:

  • gradInput
    =成本w.r.t层输入的导数
  • gradeoutput
    =成本w.r.t层输出的导数
如何根据
gradeoutput

从(警告:在该模式中,成本表示为
L
=
损失
,层
f
),我们有:

对于LogSoftMax层上此类计算的具体分步示例,您可以参考

accGradParameters
是否意味着累积
d\u C/d\u Weight\u L
d\u C/d\u bias\u L

对。在torch/nn中命名为
gradwight
gradBias

如何计算这些值

同上。仍在使用上述博文中的公式:

除了雅可比矩阵没有相同的维度(更多细节请参见博客文章)。例如,对于线性层,这转化为:

这是层的输入和输出之间的外积。火炬:

以及:

这是
梯度输出
。火炬:

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

self.gradWeight:addr(scale, gradOutput, input)
self.gradBias:add(scale, gradOutput)