質問: ロスファンクションとしてベルヌーイの交差エントロピーを使いたいと思っています。 1つ目の引数は真の確率です。そしてもう1つがソフトマックスを使ったラベルに対応する予測の確率です。この交差エントロピーを図りたいといった状況です 実際ドキュメントに次のようにあるのですが、 これはシグモイド関数を使っています、ぼくはソフトマックスが使いたいといった状況なのでこちらは使えません。また についてもこれはラベルを使って計算していますが、ぼくは確率そのものを扱いたいので使えません。 よろしくお願いします
回答: ``` from chainer import functions as F crossEntropy = - F.sum(t * F.log_softmax(y)) ``` もし確率分布の距離を最小化したいのであればKL-divergenceを使ったほうがいいと思うよ.ぜひ貴方のメンターと相談してみてください. ``` entropy = - F.sum(t[t.data.nonzero()] * F.log(t[t.data.nonzero()])) klDivergence = (crossEntropy - entropy) / y.shape[0] ``` 追記: なんでdonw voteされてるのかわからないのですが,まだ質問者がいるようなので,メモを残しておきます. 「確率分布の距離」は対象となる確率分布の確からしさによって正当な計量が変わります. 「ラベルが既知」という普通のクラス分類課題では,正解ラベルの分布(one-hot vector)は「真の確率分布」であると言えます.対して,推定したラベルの分布は「確かではない分布」であるといえます.このような場合,推定分布の真の分布に対するKL-divergenceを求めることが適切です. KL-divergenceを求めるコードは上に記されているので,ご参考に. 一方で,「推定されたふたつの分布を近づけたい」ようなときには,KL-divergenceを用いることはできません.そもそも,KL-divergenceは分布A→分布Bの「違い」と分布B→分布Aの「違い」が異なる計量なので,このような事態には不向きです. 多くの場合,このようなときには,地球移動距離(Earth-mover divergence: Wasserstein divergence)を用いることが一般的です.コードは「Chainer」「WGAN」あたりでググると出てくると思います. 参照リンク