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:

  1. Kompresję danych — zwarta reprezentacja zajmuje mniej pamięci
  2. Redukcję wymiarów — alternatywa dla PCA, ale nieliniowa
  3. Uczenie reprezentacji — cechy wydobyte przez enkoder są użyteczne w innych zadaniach
  4. Detekcję anomalii — dane „normalne" mają niski błąd rekonstrukcji, anomalie — wysoki
  5. 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.