Como o truque de reparameterização para os VAEs funciona e por que é importante?

57

Como funciona o truque de reparameterização para auto-codificadores variacionais (VAE)? Existe uma explicação intuitiva e fácil sem simplificar a matemática subjacente? E por que precisamos do 'truque'?

David Dao
fonte
5
Uma parte da resposta é notar que todas as distribuições normais são apenas versões escaladas e traduzidas de normal (1, 0). Para desenhar a partir de Normal (mu, sigma), você pode desenhar a partir de Normal (1, 0), multiplicar por sigma (escala) e adicionar mu (traduzir).
monk
@monk: deveria ter sido Normal (0,1) em vez de (1,0) à direita, ou então multiplicar e mudar seria completamente errado!
Rika
@Breeze Ha! Sim, claro, obrigado.
monk

Respostas:

57

Depois de ler os slides do workshop NIPS 2015 da Kingma , percebi que precisamos do truque de reparameterização para retropropagar através de um nó aleatório.

Intuitivamente, em sua forma original, os VAEs amostram a partir de um nó aleatório que é aproximado pelo modelo paramétrico q ( z ϕ , x ) do posterior verdadeiro. O backprop não pode fluir através de um nó aleatório.zq(zϕ,x)

A introdução de um novo parâmetro nos permite reparameterizar z de uma maneira que permita que o backprop flua através dos nós determinísticos.ϵz

formulário original e reparameterizado

David Dao
fonte
3
Por que o determinístico agora está à direita? z
bringingdownthegauss
2
Não é, mas não é uma "fonte de aleatoriedade" - esse papel foi assumido por . ϵ
quant_dev
Observe que esse método foi proposto várias vezes antes de 2014: blog.shakirm.com/2015/10/…
quant_dev 17/09/18
2
Tão simples, tão intuitivo! Ótima resposta!
Serhiy
2
Infelizmente, não é. A forma original ainda pode ser retropropagável, porém com maior variação. Detalhes podem ser encontrados no meu post .
JP Zhang
56

Suponha que temos uma distribuição normal que é parametrizada por θ , especificamente q θ ( x ) = N ( θ , 1 ) . Queremos resolver o problema abaixo min θqθqθ(x)=N(θ,1) Este é, obviamente, um problema bastante tolo e o θ idealé óbvio. No entanto, aqui apenas queremos entender como o truque de reparameterização ajuda no cálculo do gradiente desse objetivo E q [ x 2 ] .

minθEq[x2]
θEq[x2]

Uma forma de calcular é como se segue θ E Q [ x 2 ] = θq θ ( x ) x 2 d x = x 2 θ q θ ( x ) q θ ( x )θEq[x2]

θEq[x2]=θqθ(x)x2dx=x2θqθ(x)qθ(x)qθ(x)dx=qθ(x)θlogqθ(x)x2dx=Eq[x2θlogqθ(x)]

Para o nosso exemplo, onde , este método dá θ E Q [ x 2 ] = E Q [ x 2 ( x - θ ) ]qθ(x)=N(θ,1)

θEq[x2]=Eq[x2(xθ)]

O truque de reparameterização é uma maneira de reescrever a expectativa, para que a distribuição em relação à qual tomamos o gradiente seja independente do parâmetro . Para conseguir isso, precisamos tornar o elemento estocástico em q independente de θ . Portanto, escrevemos x como x = θ + ϵ ,θqθx Em seguida, pode-se escrever E Q [ x 2 ] = E p [ ( θ + ε ) 2 ] , onde P é a distribuição de ε , isto é, N ( 0 , 1 ) . Agora podemos escrever a derivada de E q [ x 2 ] da seguinte maneira θ E q [ x 2 ] =

x=θ+ϵ,ϵN(0,1)
Eq[x2]=Ep[(θ+ϵ)2]
pϵN(0,1)Eq[x2]
θEq[x2]=θEp[(θ+ϵ)2]=Ep[2(θ+ϵ)]

Aqui está um caderno IPython que escrevi que analisa a variação dessas duas maneiras de calcular gradientes. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb

goker
fonte
4
Qual é o teta "óbvio" para a primeira equação?
Gwg 29/04/19
2
é 0. Uma maneira de ver isso é notar que E [x ^ 2] = E [x] ^ 2 + Var (x), que é theta ^ 2 + 1 neste caso. Então teta = 0 minimiza esse objetivo.
goker
Então, isso depende completamente do problema? Por exemplo, min_ \ theta E_q [| x | ^ (1/4)] pode ser completamente diferente?
Anne van Rossum
O que depende do problema? O teta ideal? Nesse caso, sim, certamente depende do problema.
goker 13/05
θEq[x2]=Eq[x2(xθ)qθ(x)]θEq[x2]=Eq[x2(xθ)]
17

Um exemplo razoável da matemática do "truque de reparameterização" é dado na resposta do jogador, mas alguma motivação pode ser útil. (Não tenho permissão para comentar sobre essa resposta; portanto, aqui está uma resposta separada.)

Gθ

Gθ=θExqθ[]

Exqθ[Gθest(x)]

Gθest(x)=1qθ(x)θqθ(x)=θlog(qθ(x))

xqθGθestGθθ

GθestGθ

Gθxxqθ(x)1qθ(x)xGθqθGθestxqθθ, que pode estar longe de ser o ideal (por exemplo, um valor inicial escolhido arbitrariamente). É um pouco como a história da pessoa bêbada que procura suas chaves perto da luz da rua (porque é onde ele pode ver / provar) em vez de perto de onde as largou.

xϵpθGθp

Gθ=θEϵp[J(θ,ϵ)]=Eϵp[θJ(θ,ϵ)]
J(θ,ϵ)

θJ(θ,ϵ)pϵpθp

θJ(θ,ϵ)GθGθϵppϵJ

Espero que ajude.

Seth Bruder
fonte
"O fator 1 / qθ (x) está aumentando sua estimativa para explicar isso, mas se você nunca vê esse valor de x, esse dimensionamento não ajudará." Você pode explicar mais?
Czxttkl
qθxxGθest(x)1/qθ
10

Deixe-me explicar primeiro, por que precisamos do truque de Reparameterization no VAE.

O VAE possui codificador e decodificador. O decodificador amostras aleatoriamente do Z ~ q posterior verdadeiro (z∣ϕ, x) . Para implementar o codificador e decodificador como uma rede neural, você precisa retropropagar por meio de amostragem aleatória, e esse é o problema porque a retropropagação não pode fluir através do nó aleatório; Para superar esse obstáculo, usamos o truque de reparameterização.

Agora vamos ao truque. Como nosso posterior é normalmente distribuído, podemos aproximar-lo com outra distribuição normal. Nós aproximamos Z com ε normalmente distribuído .

insira a descrição da imagem aqui

Mas como isso é relevante?

Agora, em vez de dizer que Z é amostrado de q (z∣ϕ, x) , podemos dizer que Z é uma função que recebe o parâmetro (ε, (µ, L)) e esses µ, L vêm da rede neural superior (codificador) . Portanto, enquanto a retropropagação, tudo o que precisamos é de derivadas parciais wr μ, L e ε são irrelevantes para a obtenção de derivadas.

insira a descrição da imagem aqui

Sherlock
fonte
Melhor vídeo para entender esse conceito. Eu recomendaria assistir ao vídeo completo para melhor compreensão, mas se você quiser entender apenas o truque de reparameterização, assista a partir de 8 minutos. youtube.com/channel/UCNIkB2IeJ-6AmZv7bQ1oBYg
Sherlock
9

Eu pensei que a explicação encontrada no curso Stanford CS228 sobre modelos gráficos probabilísticos era muito boa. Pode ser encontrado aqui: https://ermongroup.github.io/cs228-notes/extras/vae/

Resumi / copiei as partes importantes aqui por conveniência / meu próprio entendimento (embora eu recomendo fortemente apenas verificar o link original).

ϕEzq(z|x)[f(x,z)]

Se você estiver familiarizado com os estimadores de função de pontuação (acredito que o REFORÇAR é apenas um caso especial disso), você perceberá que esse é o problema que eles resolvem. No entanto, o estimador da função de pontuação tem uma alta variância, levando a dificuldades na aprendizagem de modelos na maioria das vezes.

qϕ(z|x)

ϵp(ϵ)gϕ(ϵ,x)qϕ

Como exemplo, vamos usar um q muito simples a partir do qual provamos.

zqμ,σ=N(μ,σ)
q
z=gμ,σ(ϵ)=μ+ϵσ
ϵN(0,1)

p(ϵ)

ϕEzq(z|x)[f(x,z)]=Eϵp(ϵ)[ϕf(x,g(ϵ,x))]

Isso tem uma variação menor, por motivos não triviais. Verifique a parte D do apêndice aqui para obter uma explicação: https://arxiv.org/pdf/1401.4082.pdf

Horace ele
fonte
Oi, você sabe, por que, na implementação, eles dividem o padrão por 2? (ie std = torch.exp (z_var / 2)) na reparameterização?
Rika
4

Temos o nosso modelo probablístico. E quer recuperar os parâmetros do modelo. Reduzimos nossa tarefa para otimizar o limite inferior variacional (VLB). Para fazer isso, devemos ser capazes de fazer duas coisas:

  • calcular VLB
  • obter gradiente de VLB

Os autores sugerem o uso do Monte Carlo Estimator para ambos. E, na verdade, eles introduzem esse truque para obter um Estimador de Gradiente Monte Carlo da VLB mais preciso.

É apenas uma melhoria do método numérico.

Anton
fonte
2

O truque de reparameterização reduz drasticamente a variação do estimador de MC para o gradiente. Portanto, é uma técnica de redução de variação :

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]=Eq(z(i)x(i);ϕ)[logp(x(i)z(i),w)ϕlogqϕ(z)]
p(x(i)z(i),w)logp(x(i)z(i),w)é muito grande e o valor em si é negativo. Então teríamos alta variação.

z(i)=g(ϵ(i),x(i),ϕ)

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]=Ep(ϵ(i))[ϕlogp(x(i)g(ϵ(i),x(i),ϕ),w)]

p(ϵ(i))p(ϵ(i))ϕ

z(i)z(i)=g(ϵ(i),x(i),ϕ)

chris elgoog
fonte