Skip to content

loss_hard_target & soft の混合比率 #1

@daisukelab

Description

@daisukelab

リポジトリありがとうございます。実装例のおかげで手元の応用もスムーズに行きました。
Qiita記事で日本語でしたので、こちらもあえて日本語でコメントを書かせてください。
一点だけ気づいたのですが、こちらの混合比率がひょっとすると違うかもしれません。

loss_hard_target = -tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])
loss_soft_target = -tf.reduce_sum(soft_target_ * tf.log(y_soft_target), \
                                  reduction_indices=[1])

In [16]: loss = tf.reduce_mean(\
                      tf.square(T) * loss_hard_target \
                      + tf.square(T) * loss_soft_target)

lossにhard/softどちらも$T^2$を乗じた和の平均を代入されていますが、softだけでいいのかもしれません。
元の論文を読むと、

"... We found that the best results were generally obtained by using a condiderably lower weight on the second objective function. Since the magnitudes of the gradients produced by the soft targets scale as $1/T^2$ it is important to multiply them by $T^2$ when using both hard and soft targets. "

2つ目の目的関数(=hardの目的関数)のウェイトをぐっと下げると良い結果で、softターゲットのgradientが$1/T^2$されているので$T^2$を掛ける必要がある、と書いてあるように見えます。手元の応用では、そのようにしたほうがうまくいきました。

(余談 - considerably と書きたかったところが condiderably と誤植のようです)

以上ご参考まで、公開していただきありがとうございました。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions