Connect with us

Co to jest Autoencoder?

AI 101

Co to jest Autoencoder?

mm

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 rozwijane są modele unsupervised learning. Ale co to jest autoencoder dokładnie?

Krótko mówiąc, autoencodery działają, pobierając dane, kompresując i kodując dane, a następnie odtwarzając dane 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 bliżej i lepiej zrozumieć, jak one działają. Ten artykuł 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, co 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/skompresowanych danych i wyprowadza odtworzenie tych danych.

Dlaczego więc chciałbyś szkolić sieć, aby po prostu odtworzyć dane, które są jej podane? Powodem jest to, że sieć uczy się „istoty” lub najważniejszych cech danych wejściowych. Po przeszkoleniu sieci można utworzyć model, który może syntetyzować podobne dane, z dodaniem lub odjęciem pewnych docelowych cech. Na przykład, możesz przeszkolić autoencoder na obrazach zaszumionych, a następnie użyć przeszkolonego modelu, aby usunąć szum/zaszumienie z obrazu.

Architektura Autoencodera

Zobaczmy architekturę autoencodera. Omówimy tutaj główną architekturę autoencodera. Istnieją wariacje tej ogólnej architektury, które omówimy w sekcji poniżej.

Photo: 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 dekoder.

Część encodera 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, która ma zmniejszoną wymiarowość.

Warstwy kodu, lub wąskie gardło, zajmują się skompresowaną reprezentacją danych. Wąskie gardło jest starannie zaprojektowane, aby określić najbardziej istotne części obserwowanych danych, lub innymi słowy, 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ć. Wąskie gardło musi balansować dwie różne kwestie: rozmiar reprezentacji (jak kompaktowa jest reprezentacja) i istotność zmiennych/cech. Wąskie gardło wykonuje elementowe aktywacje na wagach i biasach sieci. Warstwa wąskiego gardła nazywana jest czasem latentną reprezentacją lub latentnymi zmiennymi.

Warstwa dekodera jest odpowiedzialna za pobranie skompresowanych danych i przekonwertowanie ich z powrotem do reprezentacji o takich samych wymiarach, jak oryginalne, niezmienione dane. Konwersja jest wykonywana z latentnej przestrzeni reprezentacji, która została utworzona przez encodera.

Najbardziej podstawowa architektura autoencodera to architektura feed-forward, o strukturze podobnej do pojedynczej warstwy perceptronu używanego w wielowarstwowych perceptronach. Podobnie jak regularne sieci 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ć autoencoder, który osiągnie wysoką wydajność 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ż przeszkolony. Autoencodery są również stratne, co oznacza, że wyjścia 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 tym, ile węzłów zaczyna środkową część sieci, a mniej węzłów kompresuje dane bardziej. W głębokim autoencoderze, podczas gdy liczba warstw może być dowolną liczbą, którą inżynier uzna za odpowiednią, liczba węzłów w warstwie powinna maleć, gdy encodor postępuje. Odwrotnie, liczba węzłów na warstwę powinna wzrastać, gdy warstwy dekodera zbliżają się do ostatniej 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 wcześniej, istnieją wariacje na temat klasycznej architektury autoencodera. Zobaczmy różne architektury autoencoderów.

Rzadki

Photo: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Podczas gdy autoencodery zwykle mają wąskie gardło, które kompresuje dane poprzez redukcję węzłów, rzadkie autoencodery są alternatywą dla tego typowego trybu operacyjnego. W sieci rzadkiej, warstwy ukryte mają ten sam rozmiar, co warstwy encodera i dekodera. 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 danym 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 poprzez zastosowanie kary do funkcji straty. Ta technika regularizacji oparta jest na normie Frobeniusa macierzy Jacobiego dla aktywacji encodera wejściowego. Efektem tej techniki regularizacji jest to, że model jest zmuszony do konstruowania kodowania, w którym podobne dane wejściowe będą miały podobne kodowania.

Wydzielony

Wydzielone autoencodery kodują dane wejściowe, dzieląc je na sekcje i konwertując je na proste sygnały, które są sumowane, aby utworzyć nową reprezentację danych. Podobnie jak sieci neuronowe wydzielone, wydzielony autoencoder specjalizuje się w nauce 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. Gdy filtry są nauczone przez sieć, mogą być użyte na dowolnych wystarczająco podobnych danych wejściowych, aby wyodrębnić cechy obrazu.

Usuwanie szumu

Photo: 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 zaszumioną wersją oryginalnych danych wejściowych. Ta zaszumiona 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 zaszumionymi danymi. Celem jest to, aby sieć była w stanie odtworzyć oryginalną, niezaszumioną wersję obrazu. Porównując zaszumione dane z oryginalnymi danymi, sieć uczy się, które cechy danych są najważniejsze, a które są nieistotne/zaszumieniami. Innymi słowy, aby model mógł usunąć szum z zaszumionych 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 danych szkoleniowych/latentnych atrybutów. Podczas szkolenia, encodor tworzy latentne rozkłady dla różnych cech danych wejściowych.

 

Ponieważ model uczy się cech lub obrazów jako rozkładów Gaussa zamiast dyskretnych wartości, może być użyty do generowania nowych obrazów. Rozkład Gaussa jest próbkowany, aby utworzyć wektor, który jest wprowadzany do sieci dekodującej, która renderuje obraz na podstawie tego wektora próbek. Podstawowo, model uczy się wspólnych cech obrazów szkoleniowych i przypisuje im pewne prawdopodobieństwo, że wystąpią. Rozkład prawdodobieństwa może być następnie użyty do odwrotnego inżynierii obrazu, generując nowe obrazy, które przypominają oryginalne, szkoleniowe obrazy.

Podczas szkolenia sieci, zakodowane dane są analizowane, a model rozpoznawania wyprowadza dwa wektory, wyciągając średnią i odchylenie standardowe obrazów. Rozkład jest tworzony na podstawie tych wartości. To jest robione dla różnych latentnych stanów. Dekoder następnie 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 są zwykle używane do zadań takich jak redukcja wymiarowości, usuwanie szumu, wyodrębnianie cech, generowanie obrazów, sekwencyjna predykcja i systemy rekomendacji.

Usuwanie szumu jest użyciem autoencoderów do usunięcia szumu/zaszumienia 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 w nauce 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 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 sekwencyjnej predykcji 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. Z tego powodu, autoencoder mógłby być użyty do generowania filmów. Wreszcie, głębokie autoencodery mogą być użyte do tworzenia systemów rekomendacji, wybierając wzorce związane z zainteresowaniami użytkownika, z encodera analizującym dane zaangażowania użytkownika i dekodera tworzącym rekomendacje, które pasują do ustanowionych wzorców.

Blogger i programista ze specjalnościami w Machine Learning i Deep Learning tematy. Daniel liczy, że pomoże innym wykorzystać moc sztucznej inteligencji dla dobra społecznego.