como ponderar a perda de KLD versus perda de reconstrução no codificador automático variacional


26

em quase todos os exemplos de código que eu já vi de um VAE, as funções de perda são definidas da seguinte forma (este é o código do tensorflow, mas eu já vi similar para theano, tocha etc.) Também é para uma convnet, mas também não é muito relevante , afeta apenas os eixos em que as somas são assumidas):

# 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)

No entanto, o intervalo numérico de kl_loss e rec_loss depende muito das dims do espaço latente e do tamanho do recurso de entrada (por exemplo, resolução de pixels), respectivamente. Seria sensato substituir as reduzidas_um_de_ redução_mean para obter por KLD z-dim e por LSE ou BCE por pixel (ou recurso)? Mais importante, como ponderamos a perda latente com a perda de reconstrução ao somarmos a perda final? É apenas tentativa e erro? ou existe alguma teoria (ou pelo menos regra geral) para isso? Não encontrei nenhuma informação sobre isso em nenhum lugar (incluindo o artigo original).


O problema que estou tendo é que, se o equilíbrio entre as dimensões do recurso de entrada (x) e do espaço latente (z) não for "ideal", minhas reconstruções serão muito boas, mas o espaço latente aprendido não será estruturado (se x dimensões é muito alto e o erro de reconstrução domina o KLD) ou vice-versa (as reconstruções não são boas, mas o espaço latente aprendido é bem estruturado se o KLD dominar).

Estou tendo que normalizar a perda de reconstrução (dividindo pelo tamanho do recurso de entrada) e KLD (dividindo pelas dimensões z) e depois pesar manualmente o termo KLD com um fator de peso arbitrário (a normalização é para que eu possa usar o mesmo ou peso semelhante, independente das dimensões de x ou z ). Empiricamente, descobri que cerca de 0,1 fornece um bom equilíbrio entre a reconstrução e o espaço latente estruturado, que me parece um "ponto ideal". Estou procurando trabalho prévio nesta área.


Mediante solicitação, notação matemática acima (com foco na perda de L2 por erro de reconstrução)

eueuumatent(Eu)=-12j=1J(1+registro(σj(Eu))2-(μj(Eu))2-(σj(Eu))2)

eurecon(Eu)=-k=1K(yk(Eu)-xk(Eu))2

eu(m)=1MEu=1M(eueuumatent(Eu)+eurecon(Eu))

onde é a dimensionalidade do vetor latente z (e a média correspondente μ e variância σ 2 ), K é a dimensionalidade dos recursos de entrada, M é o tamanho do mini lote, o sobrescrito ( i ) indica o i é o ponto de dados e L ( m ) é a perda para o m th mini-lote.Jzμσ2KM(i)iL(m)m

Respostas:


17

7

Gostaria de acrescentar mais um artigo relacionado a esse problema (não posso comentar devido à minha baixa reputação no momento).

Na subseção 3.1 do artigo, os autores especificaram que falharam em treinar uma implementação direta do VAE que pesasse igualmente a probabilidade e a divergência de KL. No caso deles, a perda de KL foi indesejávelmente reduzida a zero, embora se esperasse que tivesse um valor pequeno. Para superar isso, eles propuseram usar o "recozimento de custo de KL", que aumentou lentamente o fator de peso do termo de divergência de KL (curva azul) de 0 para 1.

Figura 2. O peso do termo de divergência KL do limite inferior variacional de acordo com um esquema típico de recozimento sigmóide, plotado ao lado do valor (não ponderado) do termo de divergência KL para o nosso VAE no Penn TreeBank.

Essa solução alternativa também é aplicada no Ladder VAE.

Papel:

Bowman, SR, Vilnis, L., Vinyals, O., Dai, AM, Jozefowicz, R. e Bengio, S., 2015. Gerando frases a partir de um espaço contínuo . pré-impressão do arXiv arXiv: 1511.06349.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.