Mimo że autoakodery wariacyjne (VAE) są łatwe do wdrożenia i szkolenia, wyjaśnienie ich wcale nie jest proste, ponieważ łączą koncepcje z głębokiego uczenia się i odmian wariacyjnych, a społeczności głębokiego uczenia się i modelowania probabilistycznego używają różnych terminów dla tych samych pojęć. Wyjaśniając VAE ryzykujesz więc skoncentrowanie się na części modelu statystycznego, pozostawiając czytelnika bez pojęcia, jak go rzeczywiście wdrożyć, lub odwrotnie, aby skoncentrować się na architekturze sieci i funkcji strat, w której wydaje się, że termin Kullback-Leibler jest wyciągnięty z cienkiego powietrza. Spróbuję tu uderzyć w środek, zaczynając od modelu, ale podając wystarczającą liczbę szczegółów, aby faktycznie wdrożyć go w praktyce lub zrozumieć implementację kogoś innego.
VAE to modele generatywne
W przeciwieństwie do klasycznych (rzadkich, denoisingowych itp.) Autokoderów, VAE to modele generatywne , takie jak GAN. Przez model generatywny mam na myśli model, który uczy się rozkładu prawdopodobieństwa w przestrzeni wejściowej . Oznacza to, że po wytrenowaniu takiego modelu możemy następnie próbkować z (naszego przybliżenia) . Jeśli nasz zestaw treningowy składa się z cyfr odręcznych (MNIST), to po treningu model generatywny jest w stanie tworzyć obrazy, które wyglądają jak cyfry odręczne, nawet jeśli nie są one „kopiami” obrazów z zestawu treningowego.p(x)xp(x)
Uczenie się dystrybucji obrazów w zestawie szkoleniowym oznacza, że obrazy, które wyglądają jak odręczne cyfry, powinny mieć wysokie prawdopodobieństwo wygenerowania, podczas gdy obrazy, które wyglądają jak Jolly Roger lub losowy szum, powinny mieć małe prawdopodobieństwo. Innymi słowy, oznacza to poznanie zależności między pikselami: jeśli nasz obraz to pikseli obraz w skali szarości z MNIST, model powinien dowiedzieć się, że jeśli piksel jest bardzo jasny, istnieje duże prawdopodobieństwo, że niektóre sąsiadujące piksele też są jasne, więc jeśli mamy długą, ukośną linię jasnych pikseli, możemy mieć kolejną mniejszą, poziomą linię pikseli powyżej tego (a 7) itp.28×28=784
VAE to ukryte modele zmiennych
VAE jest modelem zmiennych utajonych : oznacza to, że , losowy wektor o intensywności 784 pikseli ( obserwowane zmienne), jest modelowany jako (prawdopodobnie bardzo skomplikowana) funkcja losowego wektora o niższych wymiarach, których składowymi są zmienne nieobserwowane ( utajone ). Kiedy taki model ma sens? Na przykład w przypadku MNIST uważamy, że odręczne cyfry należą do rozmaitości o wiele mniejszej niż wymiarxz ∈ Z xz∈Zx, ponieważ zdecydowana większość losowych układów o intensywności 784 pikseli nie przypomina wcale cyfr odręcznych. Intuicyjnie spodziewalibyśmy się, że wymiar będzie wynosił co najmniej 10 (liczba cyfr), ale najprawdopodobniej jest większy, ponieważ każdą cyfrę można zapisać na różne sposoby. Niektóre różnice są nieistotne dla jakości końcowego obrazu (na przykład globalne rotacje i tłumaczenia), ale inne są ważne. W tym przypadku ukryty model ma sens. Więcej na ten temat później. Należy zauważyć, że, o dziwo, nawet jeśli nasza intuicja mówi nam, że wymiar powinien wynosić około 10, możemy zdecydowanie użyć tylko 2 ukrytych zmiennych do zakodowania zestawu danych MNIST za pomocą VAE (chociaż wyniki nie będą ładne). Powodem jest to, że nawet jedna rzeczywista zmienna może zakodować nieskończenie wiele klas, ponieważ może przyjmować wszystkie możliwe wartości całkowite i więcej. Oczywiście, jeśli klasy mają znaczące nakładanie się między nimi (takie jak 9 i 8 lub 7 i I w MNIST), nawet najbardziej skomplikowana funkcja tylko dwóch ukrytych zmiennych wykona słabą robotę generowania wyraźnie dostrzegalnych próbek dla każdej klasy. Więcej na ten temat później.
VAE zakładają wielowymiarowy rozkład parametryczny (gdzie są parametrami ) i uczą się parametrów dystrybucja wielowymiarowa. Użycie parametrycznego pliku pdf dla , który zapobiega wzrostowi liczby parametrów VAE bez ograniczeń wraz ze wzrostem zestawu treningowego, nazywa się amortyzacją w języku VAE (tak, wiem ...).q(z|x,λ)λqz
Sieć dekodera
Zaczynamy od sieci dekoderów, ponieważ VAE jest modelem generatywnym, a jedyną częścią VAE, która jest faktycznie używana do generowania nowych obrazów, jest dekoder. Sieć enkoderów jest używana tylko w czasie wnioskowania (szkolenia).
Celem sieci dekodera jest wygenerowanie nowych losowych wektorów należących do przestrzeni wejściowej , tj. Nowych obrazów, zaczynając od realizacji ukrytego wektora . Oznacza to wyraźnie, że musi nauczyć się rozkładu warunkowego . W przypadku VAE rozkład ten często przyjmuje się jako wielowymiarowy Gaussian 1 :xXzp(x|z)
pϕ(x|z)=N(x|μ(z;ϕ),σ(z;ϕ)2I)
ϕ to wektor wag (i stronniczości) sieci enkoderów. Wektory i są złożonymi, nieznanymi funkcjami nieliniowymi, modelowane przez sieć dekodera: sieci neuronowe są potężnymi aproksymatorami funkcji nieliniowych.μ(z;ϕ)σ(z;ϕ)
Jak zauważył @amoeba w komentarzach, istnieje uderzające podobieństwo między dekoderem a klasycznym modelem zmiennych ukrytych: Analiza czynnikowa. W analizie czynnikowej zakłada się model:
x|z∼N(Wz+μ,σ2I), z∼N(0,I)
Oba modele (FA i dekoder) zakładają, że rozkład warunkowy obserwowalnych zmiennych na zmiennych utajonych jest Gaussowski, a same są standardowymi Gaussianami. Różnica polega na tym, że dekoder nie zakłada, że średnia jest liniowa w , ani nie zakłada, że odchylenie standardowe jest wektorem stałym. Przeciwnie, modeluje je jako złożone funkcje nieliniowe . Pod tym względem można to postrzegać jako nieliniową analizę czynnikową. Zobacz tutajxzzp(x|z)zzza wnikliwą dyskusję na temat tego połączenia między FA i VAE. Ponieważ FA z izotropową matrycą kowariancji jest po prostu PPCA, wiąże się to również z dobrze znanym wynikiem, który liniowy autoencoder redukuje do PCA.
Wróćmy do dekodera: jak się uczymy ? Intuicyjnie chcemy ukrytych zmiennych które maksymalizują prawdopodobieństwo wygenerowania w zestawie szkoleniowym . Innymi słowy, chcemy obliczyć tylny rozkład prawdopodobieństwa , biorąc pod uwagę dane:ϕzxiDnz
p(z|x)=pϕ(x|z)p(z)p(x)
Zakładamy przed i pozostaje nam zwykły problem z wnioskowania Bayesa, że obliczenie ( dowód ) jest trudne ( całka wielowymiarowa). Co więcej, ponieważ tutaj jest nieznany, i tak nie możemy go obliczyć. Wejdź w Wnioskowanie wariacyjne, narzędzie, które nadaje Autoszyfratorom wariacyjnym swoją nazwę.N(0,I)zp(x)μ(z;ϕ)
Wnioskowanie wariacyjne dla modelu VAE
Wnioskowanie wariacyjne to narzędzie do wykonywania przybliżonego wnioskowania bayesowskiego dla bardzo złożonych modeli. To nie jest zbyt skomplikowane narzędzie, ale moja odpowiedź jest już za długa i nie będę szczegółowo omawiać VI. Możesz spojrzeć na tę odpowiedź i odnośniki, jeśli jesteś ciekawy:
/stats//a/270569/58675
Wystarczy powiedzieć, że VI szuka przybliżenia do w rodzinie parametrycznych rozkładów , gdzie, jak wspomniano powyżej, są parametrami rodziny. Szukamy parametrów, które minimalizują rozbieżność Kullbacka-Leiblera między naszym rozkładem docelowym i :p(z|x)q(z|x,λ)λp(z|x)q(z|x,λ)
minλD[p(z|x)||q(z|x,λ)]
Ponownie nie możemy zminimalizować tego bezpośrednio, ponieważ definicja rozbieżności Kullbacka-Leiblera obejmuje dowody. Przedstawiamy ELBO (dolną granicę dowodu) i po kilku manipulacjach algebraicznych, w końcu dochodzimy do:
ELBO(λ)=Eq(z|x,λ)[logp(x|z)]−D[(q(z|x,λ)||p(z)]
Ponieważ ELBO stanowi dolną granicę dowodów (patrz powyższy link), maksymalizacja ELBO nie jest dokładnie równoważna maksymalizacji prawdopodobieństwa danych podanych (w końcu VI jest narzędziem do przybliżonego wnioskowania bayesowskiego), ale idzie w dobrym kierunku.λ
Aby wnioskować, musimy określić parametryczną rodzinę . W większości VAE wybieramy wielowymiarowy, nieskorelowany rozkład Gaussaq(z|x,λ)
q(z|x,λ)=N(z|μ(x),σ2(x)I)
Jest to ten sam wybór, którego dokonaliśmy dla , chociaż mogliśmy wybrać inną rodzinę parametryczną. Tak jak poprzednio, możemy oszacować te złożone funkcje nieliniowe, wprowadzając model sieci neuronowej. Ponieważ model ten akceptuje obrazy wejściowe i zwraca parametry rozkładu ukrytych zmiennych, nazywamy to siecią enkoderów . Tak jak poprzednio, możemy oszacować te złożone funkcje nieliniowe, wprowadzając model sieci neuronowej. Ponieważ model ten akceptuje obrazy wejściowe i zwraca parametry rozkładu ukrytych zmiennych, nazywamy to siecią enkoderów .p(x|z)
Sieć enkoderów
Nazywana również siecią wnioskowania , jest używana tylko w czasie szkolenia.
Jak wspomniano powyżej, koder musi aproksymować i , więc jeśli mamy, powiedzmy, 24 ukryte zmienne, wynik enkoder jest wektorem . Koder ma wagi (i błędy) . Aby nauczyć się , możemy w końcu napisać ELBO pod względem parametrów i sieci enkodera i dekodera, a także wartości zadanych treningu:μ(x)σ(x)d=48θθθϕ
ELBO(θ,ϕ)=∑iEqθ(z|xi,λ)[logpϕ(xi|z)]−D[(qθ(z|xi,λ)||p(z)]
Możemy wreszcie zakończyć. Przeciwieństwo ELBO, jako funkcja i , jest używane jako funkcja straty VAE. Używamy SGD, aby zminimalizować tę stratę, tj. Zmaksymalizować ELBO. Ponieważ ELBO stanowi dolną granicę dla dowodów, idzie to w kierunku maksymalizacji dowodów, a tym samym generowania nowych obrazów, które są optymalnie podobne do tych z zestawu treningowego. Pierwszym terminem w ELBO jest oczekiwane ujemne prawdopodobieństwo logarytmiczne wartości zadanych treningu, dlatego zachęca dekoder do tworzenia obrazów podobnych do tych szkoleniowych. Drugi termin można interpretować jako regulizator: zachęca koder do wygenerowania rozkładu ukrytych zmiennych, który jest podobny doθϕp(z)=N(0,I). Ale wprowadzając najpierw model prawdopodobieństwa, zrozumieliśmy, skąd bierze się całe wyrażenie: minimalizacja rozbieżności Kullabcka-Leiblera między przybliżonym tylnym i model z tyłu . 2)qθ(z|x,λ)p(z|x,λ)
Kiedy się i poprzez maksymalizację , możemy wyrzucić enkoder. Od teraz, aby wygenerować nowe obrazy, po prostu próbkuj i propaguj go przez dekoder. Wyjściami dekodera będą obrazy podobne do tych w zestawie szkoleniowym.θϕELBO(θ,ϕ)z∼N(0,I)
Referencje i dalsze czytanie
1 To założenie nie jest absolutnie konieczne, choć upraszcza nasz opis VAE. Jednak w zależności od aplikacji możesz założyć inną dystrybucję dla . Na przykład, jeśli jest wektorem zmiennych binarnych, gaussowski nie ma sensu i można założyć wielowymiarową Bernoulliego.pϕ(x|z)xp
2 Wyrażenie ELBO, ze swoją matematyczną elegancją, kryje dwa główne źródła bólu dla praktyków VAE. Jednym z nich jest średni termin . To skutecznie wymaga obliczenia oczekiwania, co wymaga pobrania wielu próbek zEqθ(z|xi,λ)[logpϕ(xi|z)]qθ(z|xi,λ). Biorąc pod uwagę rozmiary zaangażowanych sieci neuronowych i niski współczynnik konwergencji algorytmu SGD, konieczność losowania wielu losowych próbek przy każdej iteracji (w rzeczywistości dla każdej minibatchu, co jest jeszcze gorsze) jest bardzo czasochłonna. Użytkownicy VAE rozwiązują ten problem bardzo pragmatycznie, obliczając to oczekiwanie za pomocą pojedynczej (!) Losowej próbki. Innym problemem jest to, że aby wyszkolić dwie sieci neuronowe (koder i dekoder) z algorytmem propagacji wstecznej, muszę być w stanie rozróżnić wszystkie kroki związane z propagacją do przodu z enkodera do dekodera. Ponieważ dekoder nie jest deterministyczny (ocena jego wydajności wymaga czerpania z wielowymiarowego Gaussa), nie ma nawet sensu pytać, czy jest to architektura różniczkowalna. Rozwiązaniem tego jest sztuczka reparametryzacyjna .