Podstawy AI
Co to jest Autoencoder?
Jeśli czytałeś o technikach unsupervised learning wcześniej, możesz natknąć się na termin „autoencoder”. Autoencodery są jednym z głównych sposobów, w jaki modele unsupervised learning są rozwijane. Ale co to właściwie jest autoencoder?
Krótko mówiąc, autoencodery działają przez pobieranie danych, kompresowanie i kodowanie danych, a następnie odtwarzanie danych z reprezentacji kodowej. Model jest szkolony, aż do momentu, gdy straty są minimalizowane, a dane są odtwarzane jak najdokładniej. W ten sposób autoencoder może nauczyć się ważnych cech danych. Chociaż to jest szybka definicja autoencodera, byłoby korzystne, aby przyjrzeć się autoencoderom i lepiej zrozumieć, jak one działają. Artykuł ten będzie starał się wyjaśnić autoencodery, wyjaśniając architekturę autoencoderów i ich zastosowania.
Co to jest Autoencoder?
Autoencodery są sieciami neuronowymi. Sieci neuronowe składają się z wielu warstw, a cechą charakterystyczną autoencodera jest to, że warstwy wejściowe zawierają dokładnie tyle informacji, ile warstwa wyjściowa. Powodem, dla którego warstwa wejściowa i warstwa wyjściowa mają taką samą liczbę jednostek, jest to, że autoencoder ma na celu odtworzyć dane wejściowe. Wyprowadza kopię danych po analizie i odtworzeniu ich w sposób nienadzorowany.
Dane, które przepływają przez autoencoder, nie są po prostu mapowane bezpośrednio z wejścia na wyjście, co oznacza, że sieć nie po prostu kopiuje dane wejściowe. Istnieją trzy składniki autoencodera: część kodowania (wejściowa), która kompresuje dane, składnik, który obsługuje skompresowane dane (lub wąskie gardło), oraz część dekodowania (wyjściowa). Gdy dane są wprowadzane do autoencodera, są one zakodowane, a następnie skompresowane do mniejszego rozmiaru. Sieć jest następnie szkolona na podstawie zakodowanych i skompresowanych danych, a następnie wyprowadza odtworzenie tych danych.
Dlaczego więc chciałbyś szkolić sieć, aby tylko odtworzyć dane, które są jej podane? Powodem jest to, że sieć uczy się „istoty” lub najważniejszych cech danych wejściowych. Po szkoleniu sieci można utworzyć model, który może syntetyzować podobne dane, z dodaniem lub usunięciem pewnych docelowych cech. Na przykład, możesz szkolić autoencoder na zdjęciach zaszumionych, a następnie użyć wyszkolonego modelu, aby usunąć szum z obrazu.
Architektura Autoencodera
Przyjrzyjmy się architekturze autoencodera. Omówimy główną architekturę autoencodera tutaj. Istnieją wariacje tej ogólnej architektury, które omówimy w sekcji poniżej.

Zdjęcie: Michela Massi via Wikimedia Commons, (https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)
Jak wcześniej wspomniano, autoencoder można podzielić na trzy różne składniki: encoder, wąskie gardło i decoder.
Część kodowania autoencodera jest zwykle siecią feedforward, gęsto połączoną. Celem warstw kodowania jest pobranie danych wejściowych i skompresowanie ich do latentnej przestrzeni reprezentacji, generując nową reprezentację danych o zmniejszonej wymiarowości.
Warstwy kodu, czyli wąskie gardło, zajmują się skompresowaną reprezentacją danych. Kod wąskiego gardła jest starannie zaprojektowany, aby określić najbardziej istotne części obserwowanych danych, czyli cechy danych, które są najważniejsze dla odtworzenia danych. Celem jest określenie, które aspekty danych należy zachować, a które można odrzucić. Kod wąskiego gardła musi balansować między rozmiarem reprezentacji (jak ściśle jest reprezentacja) a istotnością zmiennych/cech. Warstwa wąskiego gardła wykonuje elementowo aktywację wag i biasów sieci. Warstwa wąskiego gardła nazywana jest również czasem latentną reprezentacją lub latentnymi zmiennymi.
Warstwa dekodowania jest odpowiedzialna za pobranie skompresowanych danych i przekonwertowanie ich z powrotem na reprezentację o takich samych wymiarach, jak oryginalne, niezmienione dane. Konwersja jest wykonywana z latentnej przestrzeni reprezentacji, którą utworzył encoder.
Najbardziej podstawowa architektura autoencodera to architektura feed-forward, o strukturze podobnej do pojedynczej warstwy perceptronu wielowarstwowego. Podobnie jak regularne sieci neuronowe feed-forward, autoencoder jest szkolony za pomocą algorytmu backpropagation.
Atrybuty Autoencodera
Istnieją różne typy autoencoderów, ale wszystkie mają pewne właściwości, które je łączą.
Autoencodery uczą się automatycznie. Nie wymagają etykiet, a jeśli podane są wystarczające dane, łatwo jest uzyskać wysoką wydajność autoencodera na określonym rodzaju danych wejściowych.
Autoencodery są specyficzne dla danych. Oznacza to, że mogą kompresować tylko dane, które są bardzo podobne do danych, na których autoencoder został już wytrenowany. Autoencodery są również lossy, co oznacza, że dane wyjściowe modelu będą pogorszone w porównaniu z danymi wejściowymi.
Podczas projektowania autoencodera, inżynierowie machine learning muszą zwrócić uwagę na cztery różne hiperparametry modelu: rozmiar kodu, liczbę warstw, liczbę węzłów na warstwę i funkcję straty.
Rozmiar kodu decyduje o liczbie węzłów, które rozpoczynają środkową część sieci, a mniej węzłów kompresuje dane bardziej. W głębokim autoencoderze, podczas gdy liczba warstw może być dowolną liczbą, jaką inżynier uzna za odpowiednią, liczba węzłów w warstwie powinna maleć, gdy encoder postępuje. Odwrotnie, w decoderze liczba węzłów na warstwę powinna wzrastać, gdy warstwy dekodera zbliżają się do końcowej warstwy. Wreszcie, funkcja straty autoencodera jest zwykle albo binary cross-entropy, albo mean squared error. Binary cross-entropy jest odpowiedni dla przypadków, w których wartości wejściowe danych są w zakresie 0-1.
Typy Autoencoderów
Jak wspomniano powyżej, istnieją wariacje klasycznej architektury autoencodera. Przyjrzyjmy się różnym architekturom autoencoderów.
Rzadki

Zdjęcie: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)
Pomimo że autoencodery zwykle mają wąskie gardło, które kompresuje dane przez redukcję węzłów, rzadkie autoencodery są alternatywą dla tej typowej operacji. W sieci rzadkiej, warstwy ukryte utrzymują ten sam rozmiar, co warstwy encoder i decoder. Zamiast tego, aktywacje w ramach danej warstwy są karane, ustawiając je w taki sposób, aby funkcja straty lepiej uchwyciła statystyczne cechy danych wejściowych. Innymi słowy, podczas gdy warstwy ukryte rzadkiego autoencodera mają więcej jednostek niż tradycyjny autoencoder, tylko pewien procent z nich jest aktywny w dowolnym momencie. Najbardziej wpływowe funkcje aktywacji są zachowane, a inne są ignorowane, a to ograniczenie pomaga sieci określić tylko najbardziej istotne cechy danych wejściowych.
Kontrakcyjny
Kontrakcyjne autoencodery są zaprojektowane, aby być odporne na małe wahania w danych, utrzymując spójną reprezentację danych. To jest osiągane przez zastosowanie kary do funkcji straty. Ta technika regularizacji oparta jest na normie Frobeniusa macierzy Jacobiego dla aktywacji wejściowych encoder. Efektem tej techniki regularizacji jest to, że model jest zmuszony do konstrukcji kodowania, w którym podobne dane wejściowe będą miały podobne kodowania.
Wydzielnikowy
Wydzielnikowe autoencodery kodują dane wejściowe, dzieląc je na podsekcje, a następnie konwertując te podsekcje na proste sygnały, które są sumowane, aby utworzyć nową reprezentację danych. Podobnie jak sieci neuronowe wydzielnicze, wydzielniczy autoencoder specjalizuje się w uczeniu danych obrazowych i używa filtra, który jest przenoszony przez cały obraz sekcja po sekcji. Kodowania wygenerowane przez warstwę kodowania mogą być użyte do odtworzenia obrazu, odbicia obrazu lub modyfikacji geometrii obrazu. Po tym, jak filtry zostały nauczone przez sieć, mogą być użyte na dowolnych wystarczająco podobnych danych wejściowych, aby wyodrębnić cechy obrazu.
Usuwanie szumu

Zdjęcie: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Autoencodery usuwające szum wprowadzają szum do kodowania, w wyniku czego powstaje kodowanie, które jest zniekształconą wersją oryginalnych danych wejściowych. Ta zniekształcona wersja danych jest używana do szkolenia modelu, ale funkcja straty porównuje wartości wyjściowe z oryginalnymi danymi wejściowymi, a nie z zaniekształconymi danymi wejściowymi. Celem jest to, aby sieć była w stanie odtworzyć oryginalną, niezniekształconą wersję obrazu. Porównując zniekształcone dane z oryginalnymi danymi, sieć uczy się, które cechy danych są najważniejsze i które cechy są nieistotne/zniekształceniami. Innymi słowy, aby model mógł usunąć szum z zaniekształconych obrazów, musi wyodrębnić najważniejsze cechy danych obrazowych.
Wariacyjny
Wariacyjne autoencodery działają, zakładając, jak latentne zmienne danych są rozłożone. Wariacyjny autoencoder wytwarza rozkład prawdopodobieństwa dla różnych cech obrazów szkoleniowych/latentnych atrybutów. Podczas szkolenia, encoder tworzy latentne rozkłady dla różnych cech obrazów wejściowych.

Podczas szkolenia sieci, zakodowane dane są analizowane, a model rozpoznawania wyprowadza dwa wektory, rysując średnią i odchylenie standardowe obrazów. Tworzony jest rozkład na podstawie tych wartości. To jest robione dla różnych stanów latentnych. Następnie decoder pobiera losowe próbki z odpowiedniego rozkładu i używa ich do odtworzenia początkowych danych wejściowych do sieci.
Zastosowania Autoencoderów
Autoencodery mogą być użyte do szerokiej gamie zastosowań, ale zwykle są używane do zadań takich jak redukcja wymiarowości, usuwanie szumu, wyodrębnianie cech, generowanie obrazów, sekwencyjne przewidywanie i systemy rekomendacyjne.
Usuwanie szumu jest użyciem autoencoderów do usunięcia szumu z obrazów. Podobnie, autoencodery mogą być użyte do naprawy innych rodzajów uszkodzeń obrazu, takich jak rozmyte obrazy lub obrazy z brakującymi sekcjami. Redukcja wymiarowości może pomóc sieciom o wysokiej pojemności nauczyć się użytecznych cech obrazów, co oznacza, że autoencodery mogą być użyte do uzupełnienia szkolenia innych rodzajów sieci neuronowych. To samo dotyczy użycia autoencoderów do wyodrębniania cech, ponieważ autoencodery mogą być użyte do identyfikacji cech innych zbiorów danych szkoleniowych w celu szkolenia innych modeli.
W kwestii generowania obrazów, autoencodery mogą być użyte do generowania fałszywych obrazów ludzi lub animowanych postaci, co ma zastosowania w projektowaniu systemów rozpoznawania twarzy lub automatyzacji pewnych aspektów animacji.
Modele sekwencyjne mogą być użyte do określenia struktury czasowej danych, co oznacza, że autoencoder może być użyty do generowania następnego zdarzenia w sekwencji. Dlatego autoencoder może być użyty do generowania filmów. Wreszcie, głębokie autoencodery mogą być użyte do tworzenia systemów rekomendacyjnych, wykrywając wzorce związane z zainteresowaniami użytkownika, z encodera analizującego dane zaangażowania użytkownika i dekodera tworzącego rekomendacje, które pasują do ustalonych wzorców.












