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'?
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'?
Respostas:
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.
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.
Suponha que temos uma distribuição normal que é parametrizada por θ , especificamente q θ ( x ) = N ( θ , 1 ) . Queremos resolver o problema abaixo min θ 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 ] .
Uma forma de calcular é como se segue ∇ θ E Q [ x 2 ] = ∇ θ ∫ q θ ( x ) x 2 d x = ∫ x 2 ∇ θ q θ ( x ) q θ ( x )
Para o nosso exemplo, onde , este método dá ∇ θ E Q [ x 2 ] = E Q [ x 2 ( 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 = θ + ϵ , 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 ] =
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
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.)
, 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.
Espero que ajude.
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 .
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.
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).
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.
Como exemplo, vamos usar um q muito simples a partir do qual provamos.
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
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:
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.
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 :