2

は、私は2つの機能がトーチの後方伝播のために知っていると私はgradInputgradOutputは本当に層に何を意味するかについて混乱してい updateGradInput(input, gradOutput) accGradParameters(input, gradOutput, scale) を次のようにインターフェースがあります。 ネットワークのコストがCであり、レイヤーがLであるとします。層LgradInputgradOutputの平均値はd_C/d_input_Ld_C/d_output_Lですか?トーチのupdateGradInputとaccGradParametersを書き込む方法は?

もしそうなら、gradInputの計算方法はgradOutputですか?

なお、accGradParametersは、d_C/d_Weight_Ld_C/d_bias_Lが累積することを意味しますか?もしそうなら、これらの値を計算する方法は?

答えて

8

はいd_C/d_input_Ld_C/d_output_L

を意味する層LのgradInputgradOutputの操作を行います。コストWRT層の入力の微分

  • gradInput =、
  • gradOutput =コストの誘導体wrtレイヤーの出力。我々が持っている:gradOutputThe building blocks of Deep Learning(このスキーマにコストを= LossLを示され、層f警告)からスキーマを適応さ

    に応じgradInput計算する方法を

enter image description here

LogSoftMaxレイヤでのこのような計算の具体的なステップバイステップの例については、this answerを参照してください。

accGradParametersd_C/d_Weight_Ld_C/d_bias_L

はいを​​蓄積することを意味します。 torch/nnにはgradWeightgradBiasという名前が付けられています。

これらの値の計算方法は?

上記と同様です。それでも上記のブログ記事から式を用い:

enter image description here

をヤコビアンは同じ次元を(詳細はブログ投稿を参照してください)していない場合を除き。一例として、リニア層のために、これはに変換:

enter image description here

これは層の入力とgradOutputとの間の外積です。トーチwe haveで:

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

そして:gradOutputある

enter image description here

。トーチwe haveで:いずれの場合も

self.gradBias:add(scale, gradOutput) 

scaleは学習率として実際に使用されるスケールファクタです。

+0

ありがとうございます。あなたの答えは私の混乱にぴったりです。 –

関連する問題