私は、 Hoffer and Ailon, Deep Metric Learning Using Triplet Network , ICLR 2015で説明されている Caffe のトリプレット損失のソフトマックス バージョンを実装しようとしています。
私はこれを試しましたが、指数の L2 が二乗されていないため、勾配を計算するのが難しいと感じています。
誰かがここで私を助けてくれますか?
私は、 Hoffer and Ailon, Deep Metric Learning Using Triplet Network , ICLR 2015で説明されている Caffe のトリプレット損失のソフトマックス バージョンを実装しようとしています。
私はこれを試しましたが、指数の L2 が二乗されていないため、勾配を計算するのが難しいと感じています。
誰かがここで私を助けてくれますか?
Caffe の既存のレイヤーを使用して L2 基準を実装すると、すべての手間を省くことができます。
||x1-x2||_2
これは、「底」のx1
andを caffe で計算する 1 つの方法です ( andがblobであるとx2
仮定し、次元差分のノルムを計算します)。x1
x2
B
C
B
C
layer {
name: "x1-x2"
type: "Eltwise"
bottom: "x1"
bottom: "x1"
top: "x1-x2"
eltwise_param {
operation: SUM
coeff: 1 coeff: -1
}
}
layer {
name: "sqr_norm"
type: "Reduction"
bottom: "x1-x2"
top: "sqr_norm"
reduction_param { operation: SUMSQ axis: 1 }
}
layer {
name: "sqrt"
type: "Power"
bottom: "sqr_norm"
top: "sqrt"
power_param { power: 0.5 }
}
この論文で定義されているトリプレット損失については、 と の L2 ノルムを計算し、これら 2 つのブロブを連結し、連結ブロブをレイヤーにフィードする必要がx-x+
ありx-x-
ます"Softmax"
。
汚れた勾配計算は必要ありません。