

ロスファンクションとしてベルヌーイの交差エントロピーを使いたいと思っています。

１つ目の引数は真の確率です。そしてもう１つがソフトマックスを使ったラベルに対応する予測の確率です。この交差エントロピーを図りたいといった状況です

実際ドキュメントに次のようにあるのですが、  
<http://docs.chainer.org/en/stable/reference/generated/chainer.functions.bernoulli_nll.html>

これはシグモイド関数を使っています、ぼくはソフトマックスが使いたいといった状況なのでこちらは使えません。また  
<http://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html>  
についてもこれはラベルを使って計算していますが、ぼくは確率そのものを扱いたいので使えません。

よろしくお願いします


CC BY-SA 4.0
2018-08-04T08:02:13.510
47237
2018-10-22T02:39:39.303
2018-08-04T23:56:03.390
question
python python3 python2
chainer自作ロスファンクションについて

[code]

    from chainer import functions as F
    
    crossEntropy = - F.sum(t * F.log_softmax(y))
    
[/code]

もし確率分布の距離を最小化したいのであればKL-divergenceを使ったほうがいいと思うよ．ぜひ貴方のメンターと相談してみてください．

[code]

    entropy = - F.sum(t[t.data.nonzero()] * F.log(t[t.data.nonzero()]))
    klDivergence = (crossEntropy - entropy) / y.shape[0]
    
[/code]

追記：  
なんでdonw voteされてるのかわからないのですが，まだ質問者がいるようなので，メモを残しておきます．  
「確率分布の距離」は対象となる確率分布の確からしさによって正当な計量が変わります．

「ラベルが既知」という普通のクラス分類課題では，正解ラベルの分布(one-hot
vector)は「真の確率分布」であると言えます．対して，推定したラベルの分布は「確かではない分布」であるといえます．このような場合，推定分布の真の分布に対するKL-
divergenceを求めることが適切です．

KL-divergenceを求めるコードは上に記されているので，ご参考に．

一方で，「推定されたふたつの分布を近づけたい」ようなときには，KL-divergenceを用いることはできません．そもそも，KL-
divergenceは分布A→分布Bの「違い」と分布B→分布Aの「違い」が異なる計量なので，このような事態には不向きです．

多くの場合，このようなときには，地球移動距離(Earth-mover divergence: Wasserstein
divergence)を用いることが一般的です．コードは「Chainer」「WGAN」あたりでググると出てくると思います．

[参照リンク](https://stats.stackexchange.com/questions/265966/why-do-we-use-
kullback-leibler-divergence-rather-than-cross-entropy-in-the-t-sne/265989)


CC BY-SA 4.0
2018-08-07T02:54:32.700
47306
2018-10-22T02:39:39.303
2018-10-22T02:39:39.303
29620
29620
47237
answer