Autoencoder to jedna z fundamentalnych architektur sieci neuronowych, która uczy się kompresować dane do zwartej reprezentacji (kodowanie) i odtwarzać oryginał z tej reprezentacji (dekodowanie). W odróżnieniu od uczenia nadzorowanego, autoencoder nie potrzebuje etykiet — uczy się na samych danych, odtwarzając wejście na wyjściu. To czyni go kluczowym narzędziem uczenia reprezentacji, redukcji wymiarów i generowania danych.
Architektura autoencodera
Autoencoder składa się z trzech części:
Enkoder (Encoder)
Przekształca dane wejściowe x w reprezentację latentną (latent representation) z o mniejszym wymiarze:
z = f_encoder(x)
Enkoder to sekwencja warstw stopniowo redukujących wymiarowość — np. warstwa liniowa 784 → 256 → 64 → 16 z funkcjami aktywacji ReLU.
Przestrzeń latentna (Bottleneck)
Wąskie gardło — warstwa o najmniejszej liczbie neuronów. Reprezentacja z jest skompresowaną esencją danych wejściowych. Autoencoder musi nauczyć się, które cechy danych są najważniejsze, by zmieścić je w ograniczonej przestrzeni.
Dekoder (Decoder)
Odtwarza dane wejściowe z reprezentacji latentnej:
x̂ = f_decoder(z)
Dekoder jest lustrzanym odbiciem enkodera — stopniowo zwiększa wymiarowość z powrotem do oryginalnej.
Funkcja straty
Autoencoder minimalizuje błąd rekonstrukcji — różnicę między wejściem x a wyjściem x̂:
L = ||x - x̂||² (MSE — Mean Squared Error)
lub
L = -Σ[xᵢ · log(x̂ᵢ) + (1-xᵢ) · log(1-x̂ᵢ)] (Binary Cross-Entropy, dla danych binarnych)
Trening odbywa się standardowo przez backpropagation i gradient descent.
Dlaczego autoencoder jest użyteczny?
Na pierwszy rzut oka autoencoder wydaje się bezużyteczny — uczy się kopiować dane. Ale wartość leży w wąskim gardle: sieć musi nauczyć się wydobywać najistotniejsze cechy danych, ignorując szum i redundancję. To daje nam:
- Kompresję danych — zwarta reprezentacja zajmuje mniej pamięci
- Redukcję wymiarów — alternatywa dla PCA, ale nieliniowa
- Uczenie reprezentacji — cechy wydobyte przez enkoder są użyteczne w innych zadaniach
- Detekcję anomalii — dane „normalne" mają niski błąd rekonstrukcji, anomalie — wysoki
- Generowanie danych — dekoder może tworzyć nowe dane z próbkowanej przestrzeni latentnej
Warianty autoencoderów
Undercomplete Autoencoder
Najprostszy wariant — wąskie gardło ma mniej neuronów niż wejście. Wymusza kompresję. Jeśli wąskie gardło jest zbyt duże, sieć może nauczyć się trywialnej tożsamości (kopiowanie bit po bicie). Jeśli zbyt małe — traci zbyt wiele informacji.
Sparse Autoencoder
Zamiast ograniczać liczbę neuronów, dodajemy regularyzację rzadkości (sparsity penalty) — kara za aktywację zbyt wielu neuronów jednocześnie. Nawet z szerokim wąskim gardłem sieć uczy się aktywować tylko kilka neuronów na raz, wydobywając rozłączne cechy.
L = ||x - x̂||² + λ · Σ|aⱼ|
Gdzie aⱼ to aktywacja neuronu j, a λ kontroluje siłę regularyzacji.
Denoising Autoencoder (DAE)
Dane wejściowe są celowo zaszumiane (dodanie szumu gaussowskiego, losowe zerowanie pikseli) — sieć uczy się odtwarzać oryginalne, niezaszumione dane. To wymusza uczenie się głębszych, bardziej odpornych reprezentacji, a nie powierzchownego kopiowania.
x̃ = corrupt(x) → Encoder → z → Decoder → x̂ ≈ x
DAE jest szczególnie przydatny w:
- Odszumianiu obrazów (image denoising)
- Pretreningu głębokich sieci (stacked denoising autoencoders)
- Uczeniu odpornych reprezentacji
Contractive Autoencoder (CAE)
Dodaje karę za wrażliwość reprezentacji na małe perturbacje wejścia — penalizuje norma Frobeniusa jakobianu enkodera. Efekt: reprezentacja latentna jest gładka — podobne wejścia dają podobne kody.
Variational Autoencoder (VAE)
VAE to najważniejszy wariant autoencodera i jednocześnie osobna klasa modeli generatywnych. Zamiast kodować wejście w deterministyczny punkt z, enkoder produkuje parametry rozkładu — średnią μ i wariancję σ²:
q(z|x) = N(μ(x), σ²(x))
Reprezentacja latentna jest próbkowana z tego rozkładu:
z = μ + σ ⊙ ε, gdzie ε ~ N(0, I) (reparametrization trick)
Funkcja straty VAE
L = E[||x - x̂||²] + KL(q(z|x) || p(z))
Dwa składniki:
- Błąd rekonstrukcji — jak dobrze dekoder odtwarza oryginał
- Dywergencja KL — zmusza rozkład q(z|x) do bycia bliskim rozkładowi a priori p(z) = N(0, I)
Dywergencja KL zapewnia, że przestrzeń latentna jest ciągła i regularna — blisko siebie leżące punkty produkują podobne wyjścia, a próbkowanie losowych punktów generuje sensowne dane.
Generowanie z VAE
Po wytrenowaniu dekoder VAE działa jako generator: próbkujemy z ~ N(0, I) i dekodujemy. W odróżnieniu od zwykłego autoencodera, VAE gwarantuje, że przestrzeń latentna jest sensownie zorganizowana — interpolacja między dwoma punktami daje płynne przejście (np. gładkie morphowanie jednej twarzy w drugą).
VAE vs GAN
| Cecha | VAE | GAN |
|---|---|---|
| Trening | Stabilny (ELBO loss) | Niestabilny (gra minimax) |
| Generacja | Rozmyta (blurry) | Ostra (sharp) |
| Przestrzeń latentna | Regularna, ciągła | Niezorganizowana |
| Interpolacja | Płynna | Nieprzewidywalna |
| Dywersyfikacja | Dobra | Mode collapse |
| Metryka | ELBO, reconstruction loss | FID, IS |
β-VAE
Modyfikacja VAE z wagą β > 1 przy dywergencji KL. Wymusza bardziej rozłączną (disentangled) reprezentację latentną — poszczególne wymiary kodują niezależne czynniki wariacji (np. kolor, kształt, rozmiar oddzielnie).
Zastosowania autoencoderów
Redukcja wymiarów
Autoencoder jako nieliniowa alternatywa PCA. Potrafi wychwycić złożone nieliniowe zależności w danych, których liniowe metody pomijają. Przydatne w wizualizacji danych wielowymiarowych (np. t-SNE na przestrzeni latentnej autoencodera).
Detekcja anomalii
Model trenowany na danych „normalnych" osiąga niski błąd rekonstrukcji na podobnych danych. Anomalie — dane istotnie różne od treningowych — mają wysoki błąd rekonstrukcji. Prosta zasada: jeśli ||x - x̂|| > próg → anomalia.
Zastosowania:
- Wykrywanie fraudów finansowych
- Monitorowanie stanu maszyn (predictive maintenance)
- Wykrywanie intruzji sieciowych
- Kontrola jakości w produkcji
Odszumianie
Denoising autoencoders potrafią usuwać szum z obrazów, sygnałów audio i danych sensorowych. Po wytrenowaniu na parach (zaszumiony, czysty) sieć uczy się wydobywać czysty sygnał z zaszumionych danych.
Kompresja danych
Choć nie zastępują specjalizowanych kodeków (JPEG, H.264), autoencodery wyznaczają nowe kierunki w kompresji uczonych danych — np. kompresja obrazów medycznych dostosowana do specyfiki tej domeny.
Pretrenowanie sieci
Stacked autoencoders — kolejne warstwy trenowane warstwa po warstwie jako autoencodery — były jedną z pierwszych skutecznych technik pretrenowania głębokich sieci (Hinton, 2006). Dziś zastąpione przez bardziej efektywne metody (transfer learning), ale historycznie fundamentalne.
Generowanie danych
VAE umożliwia generowanie nowych danych z wyuczonego rozkładu. Choć jakość generacji ustępuje GAN-om, VAE oferuje lepszą kontrolę nad przestrzenią latentną i stabilniejszy trening.
Konwolucyjne autoencodery
Dla danych obrazowych enkoder i dekoder wykorzystują konwolucyjne sieci neuronowe:
- Enkoder: konwolucje + pooling (redukcja rozdzielczości)
- Dekoder: dekonwolucje (transposed convolutions) + upsampling (zwiększanie rozdzielczości)
Konwolucyjne autoencodery zachowują strukturę przestrzenną obrazu, co daje znacznie lepsze wyniki niż wariant w pełni połączony.
Podsumowanie
Autoencodery to wszechstronna architektura łącząca kompresję danych z generowaniem — od prostej redukcji wymiarów po zaawansowane modele generatywne (VAE). Choć w generowaniu obrazów ustąpiły pola GAN-om i modelom dyfuzyjnym, pozostają niezastąpione w detekcji anomalii, odszumianiu i uczeniu reprezentacji. Zrozumienie autoencoderów to kluczowy krok w nauce uczenia maszynowego i architektury głębokich sieci.