Estimer la divergence Kullback Leibler (KL) avec Monte Carlo


10

Je veux estimer la divergence KL entre deux distributions continues f et g. Cependant, je ne peux pas écrire la densité pour f ou g. Je peux échantillonner à la fois f et g via une méthode (par exemple, la chaîne markov monte carlo).

La divergence KL de f à g est définie comme ceci

DKL(f||g)=f(x)log(f(x)g(x))dx

C'est l'attente de par rapport à f, donc vous pourriez imaginer une estimation de monte carlolog(f(x)g(x))

1NiNlog(f(xi)g(xi))

Où i indexe N échantillons tirés de f (c'est-à-dire pour i = 1, ..., N)xif()

Cependant, comme je ne connais pas f () et g (), je ne peux même pas utiliser cette estimation de monte carlo. Quelle est la méthode standard d'estimation du KL dans cette situation?

EDIT: Je ne connais PAS la densité non normalisée pour f () ou g ()


Avez-vous pensé à utiliser les ecdfs?
Toby

cela fonctionnera mais cela peut être arbitrairement lent pour un choix difficile de f et g (fermer ou fermer les queues). Si vous décidez d'ignorer les échantillons loin des queues, vous pourriez avoir plus de chance avec la limite supérieure du roc.
Christian Chapman

Réponses:


7

Je suppose que vous pouvez évaluer et jusqu'à une constante de normalisation. Notons et .g f ( x ) = f u ( x ) / c f g ( x ) = g u ( x ) / c gfgf(x)=fu(x)/cfg(x)=gu(x)/cg

Un estimateur cohérent qui peut être utilisé est où est un estimateur d'échantillonnage d'importance pour le rapport . Ici, vous utilisez et comme densités instrumentales pour et respectivement, et pour cibler le rapport de log des densités non normalisées. r = 1 / n

DKL^(f||g)=[n1jfu(xj)/πf(xj)]11NiN[log(fu(zi)gu(zi))fu(zi)πr(zi)]log(r^)
cf/cgπfπgfuguπr
(1)r^=1/n1/njfu(xj)/πf(xj)jgu(yj)/πg(yj).
cf/cgπfπgfuguπr

Soit donc , et . Le numérateur de (1) converge vers . Le dénominateur converge vers . Le rapport est cohérent par le théorème de cartographie continue. Le log du rapport est cohérent par cartographie continue à nouveau. { y i } π g { z i } π r c f c g{xi}πf{yi}πg{zi}πrcfcg

En ce qui concerne l'autre partie de l'estimateur, par la loi des grands nombres.

1NiN[log(fu(zi)gu(zi))fu(zi)πr(zi)]ascfE[log(fu(zi)gu(zi))]

Ma motivation est la suivante:

DKL(f||g)=f(x)log(f(x)g(x))dx=f(x){log[fu(x)gu(x)]+log[cgcf]}dx=Ef[logfu(x)gu(x)]+log[cgcf]=cf1Eπr[logfu(x)gu(x)fu(x)πr(x)]+log[cgcf].
Je le décompose donc en morceaux traitables.

Pour plus d'idées sur la façon de simuler le rapport de probabilité, j'ai trouvé un article qui en contient quelques-uns: https://projecteuclid.org/download/pdf_1/euclid.aos/1031594732


(+1) Il convient de noter ici que l'échantillonnage d'importance peut avoir une variance extrêmement élevée (même une variance infinie) si la distribution cible a des queues plus grosses que la distribution à partir de laquelle vous échantillonnez et / ou si le nombre de dimensions est important.
David J. Harris

@ DavidJ.Harris très très vrai
Taylor

6

Ici, je suppose que vous pouvez uniquement échantillonner à partir des modèles; une fonction de densité non normalisée n'est pas disponible.

Tu écris ça

DKL(f||g)=f(x)log(f(x)g(x)=:r)dx,

où j'ai défini le rapport de probabilités à . Alex Smola écrit, bien que dans un contexte différent, vous pouvez estimer ces ratios "facilement" en formant simplement un classificateur. Supposons que vous avez obtenu un classificateur , qui peut vous indiquer la probabilité qu'une observation ait été générée par . Notez que . Alors:rp(f|x)xfp(g|x)=1p(f|x)

r=p(x|f)p(x|g)=p(f|x)p(x)p(g)p(g|x)p(x)p(f)=p(f|x)p(g|x),

où la première étape est due à Bayes et la dernière découle de l'hypothèse que .p(g)=p(f)

Obtenir un tel classificateur peut être assez facile pour deux raisons.

Tout d'abord, vous pouvez effectuer des mises à jour stochastiques. Cela signifie que si vous utilisez un optimiseur basé sur un gradient, comme c'est généralement le cas pour la régression logistique ou les réseaux de neurones, vous pouvez simplement tirer des échantillons de chaque et et effectuer une mise à jour.fg

Deuxièmement, comme vous avez des données pratiquement illimitées - vous pouvez simplement échantillonner et à mort - vous n'avez pas à vous soucier du sur-ajustement ou similaire.gfg


0

Outre la méthode de classification probabiliste mentionnée par @bayerj, vous pouvez également utiliser la borne inférieure de la divergence KL dérivée dans [1-2]:

KL[fg]supT{Exf[T(x)]Exg[exp(T(x)1)]},
où est un arbitraire une fonction. Dans certaines conditions douces, la limite est serrée pour: T:XR
T(x)=1+ln[f(x)g(x)]

Pour estimer la divergence KL entre et , nous maximisons la limite inférieure wrt à la fonction .fgT(x)

Références:

[1] Nguyen, X., Wainwright, MJ et Jordan, MI, 2010. Estimation des fonctions de divergence et du rapport de vraisemblance par minimisation convexe du risque. Transactions IEEE sur la théorie de l'information, 56 (11), pp.5847-5861.

[2] Nowozin, S., Cseke, B. et Tomioka, R., 2016. f-gan: formation d'échantillonneurs neuronaux génératifs utilisant la minimisation de la divergence variationnelle. Dans Advances in neural information processing systems (pp. 271-279).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.