stub Co to jest autoenkoder? - Unite.AI
Kontakt z nami
Kurs mistrzowski AI:

AI 101

Co to jest autoenkoder?

mm
Zaktualizowano on

Jeśli czytałeś już o technikach uczenia się bez nadzoru, być może spotkałeś się z terminem „autokoder”. Autoenkodery to jeden z głównych sposobów opracowywania modeli uczenia się bez nadzoru. Czym dokładnie jest autoenkoder?

W skrócie, autoenkodery działają poprzez pobieranie danych, kompresję i kodowanie danych, a następnie rekonstrukcję danych z reprezentacji kodowania. Model jest szkolony do momentu zminimalizowania strat i możliwie najwierniejszego odtworzenia danych. Dzięki temu procesowi autoenkoder może poznać ważne cechy danych. Chociaż jest to krótka definicja autoenkodera, warto przyjrzeć się bliżej autoenkoderom i lepiej zrozumieć ich działanie. W tym artykule postaramy się wyjaśnić tajemnice autoenkoderów, wyjaśniając architekturę autoenkoderów i ich zastosowania.

Co to jest autoenkoder?

Autoencodery są sieci neuronowe. Sieci neuronowe składają się z wielu warstw, a cechą charakterystyczną autoenkodera jest to, że warstwy wejściowe zawierają dokładnie tyle samo informacji, co warstwa wyjściowa. Powodem, dla którego warstwa wejściowa i warstwa wyjściowa mają dokładnie tę samą liczbę jednostek, jest to, że autoenkoder ma na celu replikację danych wejściowych. Generuje kopię danych po ich przeanalizowaniu i zrekonstruowaniu bez nadzoru.

Dane przechodzące przez autoenkoder nie są po prostu mapowane bezpośrednio z wejścia na wyjście, co oznacza, że ​​sieć nie tylko kopiuje dane wejściowe. Autoenkoder składa się z trzech komponentów: część kodująca (wejściowa), która kompresuje dane, komponent obsługujący skompresowane dane (lub wąskie gardło) oraz część dekodera (wyjściowa). Gdy dane są wprowadzane do autoenkodera, są kodowane, a następnie kompresowane do mniejszego rozmiaru. Sieć jest następnie szkolona na zakodowanych/skompresowanych danych i generuje odtworzenie tych danych.

Dlaczego więc chcesz szkolić sieć, aby po prostu rekonstruowała dane, które są jej przekazywane? Dzieje się tak dlatego, że sieć uczy się „istoty”, czyli najważniejszych cech danych wejściowych. Po przeszkoleniu sieci można utworzyć model, który może syntetyzować podobne dane, dodając lub odejmując pewne cechy docelowe. Można na przykład wytrenować autoenkoder na ziarnistych obrazach, a następnie użyć wyszkolonego modelu do usunięcia ziarna/szumu z obrazu.

Architektura autoenkodera

Rzućmy okiem na architektura autoenkodera. Omówimy tutaj główną architekturę autoenkodera. Istnieją odmiany tej ogólnej architektury, które omówimy w poniższej sekcji.

Zdjęcie: Michela Massi za pośrednictwem Wikimedia Commons, (https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Jak wspomniano wcześniej, autoenkoder można zasadniczo podzielić na trzy różne elementy: koder, wąskie gardło i dekoder.

Część kodera autoenkodera to zazwyczaj gęsto połączona sieć z wyprzedzeniem. Celem warstw kodowania jest pobranie danych wejściowych i skompresowanie ich w reprezentację w przestrzeni ukrytej, 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 lub, inaczej mówiąc, cechy danych, które są najważniejsze dla rekonstrukcji danych. Celem jest określenie, które aspekty danych należy zachować, a które można odrzucić. Kod wąskiego gardła musi równoważyć dwa różne czynniki: rozmiar reprezentacji (jak zwarta jest reprezentacja) i znaczenie zmiennych/cech. Wąskie gardło powoduje aktywację elementarną na podstawie wag i odchyleń sieci. Warstwa wąskiego gardła jest czasami nazywana ukrytą reprezentacją lub ukrytymi zmiennymi.

Warstwa dekodera jest odpowiedzialna za pobranie skompresowanych danych i przekształcenie ich z powrotem w reprezentację o tych samych wymiarach, co oryginalne, niezmienione dane. Konwersja odbywa się za pomocą reprezentacji przestrzeni ukrytej utworzonej przez koder.

Najbardziej podstawową architekturą autoenkodera jest architektura ze sprzężeniem zwrotnym, której struktura przypomina perceptron jednowarstwowy stosowany w perceptronach wielowarstwowych. Podobnie jak w przypadku zwykłych sieci neuronowych ze sprzężeniem zwrotnym, autokoder jest szkolony przy użyciu propagacji wstecznej.

Atrybuty autoenkodera

Istnieje wiele typów autoenkoderów, ale wszystkie mają pewne właściwości, które je łączą.

Autoenkodery uczą się automatycznie. Nie wymagają etykiet, a jeśli ma się wystarczającą ilość danych, łatwo jest uzyskać autoenkoder, który osiągnie wysoką wydajność dla określonego rodzaju danych wejściowych.

Autoenkodery są specyficzne dla danych. Oznacza to, że mogą kompresować tylko dane, które są bardzo podobne do danych, na których autoenkoder został już przeszkolony. Autoenkodery są również stratne, co oznacza, że ​​dane wyjściowe modelu będą degradowane w porównaniu z danymi wejściowymi.

Projektując autoenkoder, inżynierowie zajmujący się uczeniem maszynowym muszą zwrócić uwagę na cztery różne hiperparametry modelu: rozmiar kodu, liczbę warstw, węzły na warstwę i funkcję straty.

Rozmiar kodu decyduje o tym, ile węzłów rozpoczyna środkową część sieci, a mniejsza liczba węzłów powoduje większą kompresję danych. W głębokim autokoderze liczba warstw może być dowolna, jaką inżynier uzna za odpowiednią, liczba węzłów w warstwie powinna zmniejszać się w miarę pracy kodera. Tymczasem w dekoderze jest odwrotnie, co oznacza, że ​​liczba węzłów na warstwę powinna rosnąć w miarę zbliżania się warstw dekodera do warstwy końcowej. Wreszcie funkcja straty autoenkodera jest zwykle albo binarną entropią krzyżową, albo błędem średniokwadratowym. Binarna entropia krzyżowa jest odpowiednia w przypadkach, gdy wartości wejściowe danych mieszczą się w zakresie 0–1.

Typy autoenkodera

Jak wspomniano powyżej, istnieją odmiany klasycznej architektury autoenkodera. Przyjrzyjmy się różnym architekturom autoenkodera.

Rzadki

Zdjęcie: Michela Massi przez Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Chociaż autoenkodery zazwyczaj mają wąskie gardło, które kompresuje dane poprzez redukcję węzłów, rzadki autokoders stanowią alternatywę dla tego typowego formatu operacyjnego. W sieci rzadkiej warstwy ukryte zachowują ten sam rozmiar co warstwy kodera i dekodera. Zamiast tego karane są aktywacje w obrębie danej warstwy, ustawiając ją tak, aby funkcja straty lepiej oddawała cechy statystyczne danych wejściowych. Inaczej mówiąc, chociaż ukryte warstwy rzadkiego autoenkodera mają więcej jednostek niż tradycyjny autoenkoder, tylko określony procent z nich jest aktywny w danym momencie. Najbardziej wpływowe funkcje aktywacji są zachowywane, inne są ignorowane, a to ograniczenie pomaga sieci określić tylko najbardziej istotne cechy danych wejściowych.

Skurczowe

Autoenkodery kontraktowe zostały zaprojektowane tak, aby były odporne na niewielkie zmiany danych, zachowując spójną reprezentację danych. Osiąga się to poprzez zastosowanie kary do funkcji straty. Ta technika regularyzacji opiera się na normie Frobeniusa macierzy Jacobiego dla aktywacji enkodera wejściowego. Efektem tej techniki regularyzacji jest to, że model jest zmuszony do skonstruowania kodowania, w którym podobne dane wejściowe będą miały podobne kodowanie.

Konwolucyjny

Autoenkodery splotowe kodować dane wejściowe, dzieląc dane na podsekcje, a następnie przekształcając te podsekcje w proste sygnały, które są sumowane w celu utworzenia nowej reprezentacji danych. Podobnie jak splotowe sieci neuronowe, autoenkoder splotowy specjalizuje się w uczeniu się danych obrazu i wykorzystuje filtr przesuwany po całym obrazie sekcja po sekcji. Kodowania wygenerowane przez warstwę kodującą można wykorzystać do rekonstrukcji obrazu, odzwierciedlenia obrazu lub modyfikacji geometrii obrazu. Gdy sieć nauczy się filtrów, można ich użyć na dowolnym wystarczająco podobnym wejściu w celu wyodrębnienia cech obrazu.

Odszumianie

Zdjęcie: MAL przez Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Autokodery odszumiajace wprowadzają szum do kodowania, w wyniku czego kodowanie jest uszkodzoną wersją oryginalnych danych wejściowych. Ta uszkodzona wersja danych służy do uczenia modelu, ale funkcja straty porównuje wartości wyjściowe z oryginalnymi danymi wejściowymi, a nie z uszkodzonymi danymi wejściowymi. Celem jest umożliwienie sieci odtworzenia oryginalnej, nieuszkodzonej wersji obrazu. Porównując uszkodzone dane z danymi oryginalnymi, sieć dowiaduje się, które cechy danych są najważniejsze, a które nieistotne/uszkodzone. Innymi słowy, aby model odszumił uszkodzone obrazy, musi wyodrębnić ważne cechy danych obrazu.

Wariacja

Autoenkodery wariacyjne działają poprzez przyjęcie założeń dotyczących rozkładu ukrytych zmiennych danych. Wariacyjny autoenkoder generuje rozkład prawdopodobieństwa dla różnych cech obrazów szkoleniowych/ukrytych atrybutów. Podczas uczenia koder tworzy utajone rozkłady dla różnych cech obrazów wejściowych.

 

Ponieważ model uczy się cech lub obrazów w postaci rozkładów Gaussa, a nie wartości dyskretnych, można go wykorzystać do wygenerowania nowych obrazów. Rozkład Gaussa jest próbkowany w celu utworzenia wektora, który jest wprowadzany do sieci dekodującej, która renderuje obraz na podstawie tego wektora próbek. Zasadniczo model uczy się wspólnych cech obrazów szkoleniowych i przypisuje im pewne prawdopodobieństwo ich wystąpienia. Rozkład prawdopodobieństwa można następnie wykorzystać do inżynierii wstecznej obrazu, generując nowe obrazy przypominające oryginalne obrazy szkoleniowe.

Podczas uczenia sieci zakodowane dane są analizowane, a model rozpoznawania generuje dwa wektory, rysujące średnią i odchylenie standardowe obrazów. Na podstawie tych wartości tworzony jest rozkład. Odbywa się to dla różnych stanów ukrytych. Następnie dekoder pobiera losowe próbki z odpowiedniej dystrybucji i wykorzystuje je do rekonstrukcji początkowych danych wejściowych do sieci.

Aplikacje autoenkodera

Autoenkodery mogą być używane w szerokim zakresie różnorodność zastosowań, ale są one zwykle używane do zadań takich jak redukcja wymiarowości, odszumianie danych, ekstrakcja cech, generowanie obrazu, przewidywanie sekwencji po sekwencji i systemy rekomendacji.

Odszumianie danych polega na użyciu autoenkoderów w celu usunięcia ziarna/szumu z obrazów. Podobnie autoenkoderów można używać do naprawy innych rodzajów uszkodzeń obrazu, takich jak rozmazane obrazy lub brakujące fragmenty obrazów. Redukcja wymiarowości może pomóc sieciom o dużej przepustowości w nauce przydatnych cech obrazów, co oznacza, że ​​autoenkodery można wykorzystać do wspomagania uczenia innych typów sieci neuronowych. Dotyczy to również używania autoenkoderów do ekstrakcji cech, ponieważ autoenkoderów można używać do identyfikowania cech innych zbiorów danych szkoleniowych w celu uczenia innych modeli.

Jeśli chodzi o generowanie obrazu, autoenkodery mogą służyć do generowania fałszywych obrazów ludzkich lub animowanych postaci, co ma zastosowanie w projektowaniu systemów rozpoznawania twarzy lub automatyzacji niektórych aspektów animacji.

Modele przewidywania sekwencji po sekwencji można wykorzystać do określenia czasowej struktury danych, co oznacza, że ​​autoenkoder może zostać użyty do wygenerowania następnego, nawet w sekwencji. Z tego powodu do generowania filmów można wykorzystać autoenkoder. Wreszcie, głębokie autoenkodery można wykorzystać do tworzenia systemów rekomendacji, wychwytując wzorce związane z zainteresowaniami użytkowników, przy czym koder analizuje dane dotyczące zaangażowania użytkowników, a dekoder tworzy rekomendacje pasujące do ustalonych wzorców.

Bloger i programista specjalizujący się w Nauczanie maszynowe i głęboki Learning tematy. Daniel ma nadzieję pomóc innym wykorzystać moc sztucznej inteligencji dla dobra społecznego.