2016-01-20 7 views
7

トレーニング中に「正しいラベル」に対する「現在の予測」がどの程度近いか遠いかに基づいて各画像の損失値をスケールします。例えば、正しいラベルが "cat"でネットワークが "dog"であると判断した場合、ネットワークが "car"と判断した場合、ペナルティ(loss)はケースよりも小さくなるはずです。 、Iは"softmaxWithLoss"層の底部のようなマトリックスラベル間の距離の行列、
2-パスを定義caffeの「badness」に基づいて損失値を調整します

1-
3-:

私がやっている方法は、以下の通りであります

しかし、私はbackward_cpuの部分で何をすべきか分かりません。私はグラデーション(bottom_diff)を変更しなければならないとはっきりしていないこと、スケール値をここに組み込む方法を理解しています。数学によると、私は尺度で勾配をスケールする必要があります(それは単なる尺度なので)。

また、カフェでloosLayerは私が間違っていないよ場合に非常に類似した仕事をしていません"InfoGainLoss"と呼ばれる存在であるように思える、しかし、この層の後方部分が少し紛らわしいです:

bottom_diff[i * dim + j] = scale * infogain_mat[label * dim + j]/prob; 

私がなぜわかりませんinfogain_mat[]は、で乗算されるのではなく、probで除算されます。 infogain_matの単位行列を使用すると、前方と後方の両方でsoftmaxの損失のように動作するはずですか?

誰かが私に指針を与えることができれば幸いです。あなたはlog(prob)のためにやっているスケーリングすることを観察することで正しい

答えて

6

は(あなたがそれherehereについての詳細を読むことができます)"InfogainLoss"層がやっているまさにです。誘導体(バックプロパ)として

:あなたは(入力変数がこの層にある)prob(j)に関してこの式を区別する場合、この層によって計算損失は、あなた」

L = - sum_j infogain_mat[label * dim + j] * log(prob(j)) 

ありますあなたは

dL/dprob(j) = - infogain_mat[label * dim + j]/prob(j) 

今、は、なぜあなたは"SoftmaxWithLoss"層のバック小道具に類似した表現が表示されていないことがわかり、なぜlog(x)の誘導体であることをLL通知は1/xこれは何ですか?
この層の名前は実際には2つの層の組み合わせであることを示唆しています。つまり、分類器出力からクラス確率を計算するsoftmaxは、その上にログ損失層です。これらの2つの層を組み合わせることにより、数値的に堅牢な勾配の推定が可能になる。
"InfogainLoss"レイヤーを少し使ってみるときどきprob(j)がグラデーションの不安定な推定につながる非常に小さな値を持つことがあることに気付きました。

は、ここではなくソフトマックス層を使用して、これらの予測に由来する「ソフトマックス」確率より予測(x)に対して"SoftmaxWithLoss""InfogainLoss"層の前後のパスの詳細な計算です。

enter image description here

PS、あなたがのためにinfogain損失を使用しようとしている場合は、その
注意:あなたはより数値的に堅牢なソフトマックス層の上にinfogain損失を計算するよりも"SoftmaxWithInfogainLoss"層を作成するために、これらの式を使用することができます計量する場合は、Hinfogain_mat)に、距離ではなくの類似性というラベルを付けてください。

アップデート:私は最近、この堅牢な勾配の計算を実施し、this pull requestを作成
。 `infogain_mat [ラベル*薄暗い+ J]/PROB(J) - このPRは、誘導体は、`/dLのdprob(J)=あるべき2017年

+1

、4月に枝を習得するためにマージされました。 – nn0p

+0

@ nn0p mmm ...ありがとう! – Shai

関連する問題