Gewichtung des KLD-Verlusts im Vergleich zum Rekonstruktionsverlust bei variierenden automatischen Codierern

26

In fast allen Codebeispielen, die ich von einer VAE gesehen habe, sind die Verlustfunktionen wie folgt definiert (dies ist ein Tensorflow-Code, aber ich habe ähnliche für Theano, Fackel usw. gesehen. Es ist auch für ein Convnet, aber das ist auch nicht allzu relevant betrifft nur die Achsen, die die Summen übernehmen):

# latent space loss. KL divergence between latent space distribution and unit gaussian, for each batch.
# first half of eq 10. in https://arxiv.org/abs/1312.6114
kl_loss = -0.5 * tf.reduce_sum(1 + log_sigma_sq - tf.square(mu) - tf.exp(log_sigma_sq), axis=1)

# reconstruction error, using pixel-wise L2 loss, for each batch
rec_loss = tf.reduce_sum(tf.squared_difference(y, x), axis=[1,2,3])

# or binary cross entropy (assuming 0...1 values)
y = tf.clip_by_value(y, 1e-8, 1-1e-8) # prevent nan on log(0)
rec_loss = -tf.reduce_sum(x * tf.log(y) + (1-x) * tf.log(1-y), axis=[1,2,3])

# sum the two and average over batches
loss = tf.reduce_mean(kl_loss + rec_loss)

Der numerische Bereich von kl_loss und rec_loss hängt jedoch stark von den latenten Raumabmessungen und der Größe des Eingabe-Features (z. B. der Pixelauflösung) ab. Wäre es sinnvoll, die redu_sum's durch redu_mean zu ersetzen, um pro z-dim KLD und pro Pixel (oder Feature) LSE oder BCE zu erhalten? Was noch wichtiger ist, wie gewichten wir den latenten Verlust mit dem Rekonstruktionsverlust, wenn wir den endgültigen Verlust addieren? Ist es nur Versuch und Irrtum? Oder gibt es eine Theorie (oder zumindest eine Faustregel) dafür? Ich konnte dazu nirgendwo Informationen finden (einschließlich des Originalpapiers).


Das Problem, das ich habe, ist, dass, wenn das Gleichgewicht zwischen den Abmessungen meines Eingabe-Features (x) und den Abmessungen des latenten Raums (z) nicht "optimal" ist, entweder meine Rekonstruktionen sehr gut sind, aber der erlernte latente Raum unstrukturiert ist (wenn x Dimensionen sind) ist sehr hoch und der Rekonstruktionsfehler dominiert über KLD) oder umgekehrt (Rekonstruktionen sind nicht gut, aber der erlernte latente Raum ist gut strukturiert, wenn KLD dominiert).

Ich muss den Rekonstruktionsverlust (dividiert durch die Größe des Eingabe-Features) und die KLD (dividiert durch die Z-Dimensionen) normalisieren und dann den KLD-Term manuell mit einem beliebigen Gewichtungsfaktor gewichten (Die Normalisierung ist so, dass ich denselben oder denselben verwenden kann ähnliches Gewicht unabhängig von den Abmessungen von x oder z ). Empirisch habe ich ungefähr 0,1 gefunden, um eine gute Balance zwischen Rekonstruktion und strukturiertem latenten Raum zu finden, die sich für mich wie ein "Sweet Spot" anfühlt. Ich suche nach Vorarbeiten in diesem Bereich.


Auf Anfrage Mathematiknotation von oben (mit Fokus auf L2-Verlust für Rekonstruktionsfehler)

Lleintent(ich)=-12j=1J(1+Log(σj(ich))2-(μj(ich))2-(σj(ich))2)

LrecOn(ich)=-k=1K(yk(ich)-xk(ich))2

L(m)=1Mich=1M(Lleintent(ich)+LrecOn(ich))

Jzμσ2KM(ich)ichL(m)m

Memo
quelle

Antworten:

17

Für alle, die über diesen Beitrag stolpern und auch nach einer Antwort suchen, hat dieser Twitter-Thread eine Menge sehr nützlicher Erkenntnisse hinzugefügt.

Nämlich:

beta-VAE: Grundlegende visuelle Konzepte mit einem eingeschränkten Variationsrahmen erlernen

βnOrm

und zugehörige Lektüre (wo ähnliche Themen besprochen werden)

Memo
quelle
7

Ich möchte noch einen Artikel zu diesem Thema hinzufügen (ich kann wegen meines schlechten Rufs im Moment keinen Kommentar abgeben).

In Unterabschnitt 3.1 des Papiers gaben die Autoren an, dass sie keine direkte Implementierung von VAE trainieren konnten, bei der die Wahrscheinlichkeit und die KL-Divergenz gleichermaßen gewichtet wurden. In ihrem Fall wurde der KL-Verlust unerwünschterweise auf Null reduziert, obwohl erwartet wurde, dass er einen kleinen Wert aufweist. Um dies zu überwinden, schlugen sie die Verwendung des "KL-Kostenglühens" vor, das den Gewichtsfaktor des KL-Divergenzterms (blaue Kurve) langsam von 0 auf 1 erhöhte.

Abbildung 2. Das Gewicht des KL-Divergenzterms der unteren Variationsgrenze gemäß einem typischen Sigmoid-Glühplan, aufgetragen neben dem (ungewichteten) Wert des KL-Divergenzterms für unsere VAE auf der Penn TreeBank.

Diese Umgehungslösung wird auch in Ladder VAE angewendet.

Papier:

Bowman, SR, Vilnis, L., Vinyals, O., Dai, AM, Jozefowicz, R. und Bengio, S., 2015. Generieren von Sätzen aus einem zusammenhängenden Raum . arXiv-Vorabdruck arXiv: 1511.06349.

Cuong
quelle