Jak działa sztuczka reparametryzacji VAE i dlaczego jest ważna?

57

Jak działa sztuczka reparametryzacji dla wariacyjnych autoencoderów (VAE)? Czy istnieje intuicyjne i łatwe wyjaśnienie bez uproszczenia podstawowej matematyki? A dlaczego potrzebujemy „sztuczki”?

David Dao
źródło
5
Jedną częścią odpowiedzi jest zauważenie, że wszystkie dystrybucje normalne są po prostu skalowane i przetłumaczone wersje normalne (1, 0). Aby rysować z normalnego (mu, sigma), możesz rysować z normalnego (1, 0), pomnożyć przez sigma (skalę) i dodać mu (tłumaczyć).
mnich
@monk: powinno być normalne (0,1) zamiast (1,0) w prawo, w przeciwnym razie pomnożenie i przesunięcie całkowicie doprowadziłoby do szaleństwa!
Rika
@Breeze Ha! Tak, oczywiście, dzięki.
mnich

Odpowiedzi:

57

Po przeczytaniu slajdów warsztatowych NIPS 2015 firmy Kingma , zdałem sobie sprawę, że potrzebujemy sztuczki polegającej na ponownej parametryzacji, aby cofnąć propagację przez losowy węzeł.

Intuicyjnie, w oryginalnej formie, VAE pobierają próbkę z losowego węzła który jest aproksymowany przez parametryczny model q ( z ϕ , x ) prawdziwego tylnego. Backprop nie może przepływać przez losowy węzeł.zq(zϕ,x)

Wprowadzenie nowego parametru pozwala nam ponownie sparametryzować z w sposób, który pozwala przepływowi wstecznego przepływać przez węzły deterministyczne.ϵz

oryginalna i sparametryzowana forma

David Dao
źródło
3
Dlaczego deterministyczny jest teraz po prawej? z
bringingdownthegauss
2
Nie jest, ale nie jest „źródłem losowości” - tę rolę przejęła . ϵ
quant_dev
Należy pamiętać, że ta metoda była proponowana wiele razy przed 2014 r .: blog.shakirm.com/2015/10/…
quant_dev
2
Tak proste, takie intuicyjne! Świetna odpowiedź!
Serhiy
2
Niestety tak nie jest. Oryginalna forma może nadal być wstecznie propagowana, jednak z większą wariancją. Szczegóły można znaleźć w moim poście .
JP Zhang
56

Załóżmy, że mamy rozkład normalny który jest parametryzowany przez θ , a konkretnie q θ ( x ) = N ( θ , 1 ) . Chcemy rozwiązać poniższy problem min θqθqθ(x)=N(θ,1) Jest to oczywiście dość głupiutki problem, a optymalne θ jest oczywiste. Jednak tutaj chcemy tylko zrozumieć, w jaki sposób sztuczka reparametryzacji pomaga w obliczeniu gradientu tego celu E q [ x 2 ] .

minθEq[x2]
θEq[x2]

θEq[x2]

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

qθ(x)=N(θ,1)

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

θqθx

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

Oto napisany przeze mnie notatnik IPython, który analizuje wariancję tych dwóch sposobów obliczania gradientów. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb

goker
źródło
4
Jaka jest „oczywista” theta dla pierwszego równania?
gwg
2
to 0. Jednym ze sposobów, aby to zobaczyć, jest odnotowanie, że E [x ^ 2] = E [x] ^ 2 + Var (x), czyli w tym przypadku theta ^ 2 + 1. Zatem theta = 0 minimalizuje ten cel.
goker
Czy to zależy całkowicie od problemu? Na przykład min_ \ theta E_q [| x | ^ (1/4)] może być zupełnie inaczej?
Anne van Rossum,
Co zależy od problemu? Optymalna theta? Jeśli tak, to z pewnością zależy to od problemu.
goker
θEq[x2]=Eq[x2(xθ)qθ(x)]θEq[x2]=Eq[x2(xθ)]
17

Rozsądny przykład matematyki „sztuczki reparametryzacji” podano w odpowiedzi gokera, ale pewna motywacja może być pomocna. (Nie mam uprawnień do komentowania tej odpowiedzi; dlatego tutaj jest osobna odpowiedź).

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θθ, która może być daleka od optymalnej (np. dowolnie wybrana wartość początkowa). To trochę jak historia pijanego, który szuka swoich kluczy w pobliżu latarni (bo tam właśnie widzi / próbkuje), a nie w pobliżu, gdzie je upuścił.

xϵpθGθp

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

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

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

Mam nadzieję że to pomogło.

Seth Bruder
źródło
„Współczynnik 1 / qθ (x) zwiększa twoje oszacowanie, aby to uwzględnić, ale jeśli nigdy nie zobaczysz takiej wartości x, to skalowanie nie pomoże”. Czy możesz to bardziej wyjaśnić?
czxttkl,
qθxxGθest(x)1/qθ
10

Pozwól mi najpierw wyjaśnić, dlaczego potrzebujemy sztuczki reparametryzacji w VAE.

VAE ma koder i dekoder. Dekoder losowo pobiera próbki z prawdziwej tylnej Z ~ q (z∣ϕ, x) . Aby zaimplementować koder i dekoder jako sieć neuronową, musisz przesłuchać ponownie za pomocą losowego próbkowania i to jest problem, ponieważ propagacja wsteczna nie może przepływać przez losowy węzeł; aby pokonać tę przeszkodę, stosujemy sztuczkę reparametryzacji.

Teraz chodźmy oszukać. Ponieważ nasz tylny jest zwykle rozłożony, możemy przybliżać go innym rozkładem normalnym. Przybliżamy Z z normalnie rozłożonym ε .

wprowadź opis zdjęcia tutaj

Ale jak to ma znaczenie?

Teraz zamiast powiedzieć, że Z jest próbkowane z q (z∣ϕ, x) , możemy powiedzieć, że Z jest funkcją, która przyjmuje parametr (ε, (µ, L)), a te µ, L pochodzi z górnej sieci neuronowej (kodera) . Dlatego podczas gdy wsteczna propozycja wszystko, czego potrzebujemy, to pochodne cząstkowe wrt µ, L i ε nie mają znaczenia dla przyjmowania pochodnych.

wprowadź opis zdjęcia tutaj

Sherlock
źródło
Najlepsze wideo, aby zrozumieć tę koncepcję. Polecam obejrzeć cały film dla lepszego zrozumienia, ale jeśli chcesz zrozumieć tylko sztuczkę polegającą na zmianie parametrów, obejrzyj od 8 minut. youtube.com/channel/UCNIkB2IeJ-6AmZv7bQ1oBYg
Sherlock
9

Myślałem, że wyjaśnienie znalezione w kursie Stanford CS228 na probabilistycznych modelach graficznych było bardzo dobre. Można go znaleźć tutaj: https://ermongroup.github.io/cs228-notes/extras/vae/

Dla wygody / własnego zrozumienia streściłem / skopiowałem tutaj ważne części (chociaż zdecydowanie zalecam po prostu sprawdzenie oryginalnego linku).

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

Jeśli znasz estymatory funkcji punktacji (uważam, że REINFORCE to tylko specjalny przypadek tego), zauważysz, że jest to problem, który rozwiązują. Jednak estymator funkcji punktowej ma dużą zmienność, co prowadzi do trudności w uczeniu się modeli przez większość czasu.

qϕ(z|x)

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

Jako przykład użyjmy bardzo prostego q, z którego próbkujemy.

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

p(ϵ)

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

Ma to mniejszą wariancję, z powodów imo, niebanalnych. Wyjaśnienie znajduje się w części D załącznika: https://arxiv.org/pdf/1401.4082.pdf

horace on
źródło
Cześć, czy wiesz, dlaczego w implementacji dzielą std przez 2? (tj. std = torch.exp (z_var / 2)) w reparametryzacji?
Rika
4

Mamy nasz model probablistyczny. I chcesz odzyskać parametry modelu. Ograniczamy nasze zadanie do optymalizacji wariacyjnej dolnej granicy (VLB). Aby to zrobić, powinniśmy być w stanie zrobić dwie rzeczy:

  • obliczyć VLB
  • uzyskać gradient VLB

Autorzy sugerują użycie Estimatora Monte Carlo w obu przypadkach. I faktycznie wprowadzają tę sztuczkę, aby uzyskać bardziej precyzyjny estymator gradientu Monte Carlo VLB.

To tylko ulepszenie metody numerycznej.

Anton
źródło
2

Sztuczka reparametryzacji radykalnie zmniejsza wariancję estymatora MC dla gradientu. Jest to technika redukcji wariancji :

ϕ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)jest bardzo duża, a sama wartość jest ujemna. Mielibyśmy więc dużą wariancję.

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
źródło