0Pricing
Learn AI with Python · Lekcja

Wariacyjne autoenkodery (VAE)

Strata ELBO, trik reparametryzacji, eksploracja przestrzeni ukrytej, generowanie obrazów za pomocą VAE.

Wariacyjne autoenkodery (VAE) to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Od autoenkodera do VAE

Zwykły autoenkoder uczy się rozproszonych punktów, więc próbkowanie nowych punktów daje bezwartościowe wyniki. Wariacyjny autoenkoder (VAE) uczy się gładkiej, ciągłej przestrzeni latentnej, z której można próbkować, przekształcając ją w prawdziwy model generatywny.

Kodowanie do rozkładu

Zamiast pojedynczego punktu enkoder VAE zwraca dla każdego wejścia rozkład: średnią mu i logarytm wariancji log_var. Każde wejście jest odwzorowywane na mały, rozmyty obszar przestrzeni latentnej, a nie na pojedynczą kropkę.

class Encoder(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(784, 256)
        self.fc_mu = nn.Linear(256, 64)
        self.fc_logvar = nn.Linear(256, 64)

Dlaczego mu i log_var

Przewidujemy log_var zamiast bezpośredniej wariancji, ponieważ może przyjmować dowolną liczbę rzeczywistą, bez ograniczenia do wartości dodatnich, a ponadto zapewnia stabilność numeryczną. W razie potrzeby potęgowanie pozwala odzyskać wariancję.

    def forward(self, x):
        h = torch.relu(self.fc(x))
        return self.fc_mu(h), self.fc_logvar(h)

Próbkowanie zmiennej latentnej z

Aby dekodować dane, musimy próbkować z z przewidzianego rozkładu. Naiwne losowanie nie jest różniczkowalne, więc nie możemy propagować wstecz przez ten etap. Rozwiązaniem jest trik reparametryzacji.

Trik reparametryzacji

Przepisujemy próbkę jako z = mu + eps * exp(0.5 * log_var), gdzie eps jest losowym szumem. Losowość znajduje się teraz w eps (gradient nie jest tam potrzebny), a gradienty przepływają przez mu i log_var.

def reparameterize(mu, log_var):
    std = torch.exp(0.5 * log_var)
    eps = torch.randn_like(std)
    return mu + eps * std

Dekoder

Dekoder przyjmuje wylosowane z i rekonstruuje obraz, podobnie jak dekoder zwykłego autoenkodera, rozwijając 64 wymiary z powrotem do 784 pikseli za pomocą wyjścia Sigmoid.

decoder = nn.Sequential(
    nn.Linear(64, 256),
    nn.ReLU(),
    nn.Linear(256, 784),
    nn.Sigmoid()
)

Składnik straty rekonstrukcji

Pierwsza część straty VAE dotyczy rekonstrukcji: tego, jak dobrze zdekodowany obraz odpowiada danym wejściowym. Dla pikseli stosuje się binarną entropię krzyżową (lub MSE).

recon_loss = nn.functional.binary_cross_entropy(
    recon, x, reduction="sum"
)

Składnik dywergencji KL

Drugą częścią jest dywergencja KL, która przyciąga każdy zakodowany rozkład do standardowego rozkładu normalnego. Reguluje to przestrzeń latentną, nadając jej gładkość i ciągłość niezbędną do generowania.

kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())

Cel ELBO

Modele VAE maksymalizują ELBO (dolne ograniczenie wiarygodności, Evidence Lower Bound), co jest równoważne minimalizowaniu wyrażenia reconstruction + KL. Rekonstrukcja zapewnia wierność wyników, a KL utrzymuje odpowiedni kształt przestrzeni. Cała trudność polega na znalezieniu równowagi między tymi składnikami.

loss = recon_loss + kl
loss.backward()

Generowanie nowych obrazów

Ponieważ przestrzeń latentna odpowiada standardowemu rozkładowi normalnemu, można generować zupełnie nowe obrazy, próbkować z z N(0,1) i dekodować je bez potrzeby podawania obrazu wejściowego.

with torch.no_grad():
    z = torch.randn(16, 64)
    new_images = decoder(z)  # 16 generated samples

Dlaczego VAE są ważne?

Modele VAE zapewniają uzasadnioną teoretycznie, gładką przestrzeń latentną, w której można interpolować i próbkować. Stanowią podstawę wielu technik generatywnych i uczą kluczowej idei modelowania rozkładów, a nie tylko punktów.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat VAE.

Podsumowanie: wariacyjne autoenkodery

Poznano model VAE: enkoder zwraca mu i log_var, a trik reparametryzacji z = mu + eps * exp(0.5 * log_var) sprawia, że próbkowanie pozostaje różniczkowalne. Strata ma postać ELBO = rekonstrukcja + KL. Próbkowanie z z N(0,1) i dekodowanie pozwala generować nowe obrazy.

Często zadawane pytania

Czy lekcja „Wariacyjne autoenkodery (VAE)” jest bezpłatna?

Tak — pełny tekst „Wariacyjne autoenkodery (VAE)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Wariacyjne autoenkodery (VAE)”?

Strata ELBO, trik reparametryzacji, eksploracja przestrzeni ukrytej, generowanie obrazów za pomocą VAE. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wariacyjne autoenkodery (VAE)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?

Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Autoenkodery do uczenia reprezentacji
  2. Wariacyjne autoenkodery (VAE)
  3. GAN-y: generator i dyskryminator
  4. Warunkowe GAN-y i transfer stylu
← Powrót do Learn AI with Python