Jakie są różnice między rzadkim kodowaniem a autoencoderem?

35

Kodowanie rzadkie definiuje się jako uczenie się kompletnego zestawu wektorów podstawowych do reprezentowania wektorów wejściowych (<- dlaczego tego chcemy). Jakie są różnice między rzadkim kodowaniem a autoencoderem? Kiedy zastosujemy rzadkie kodowanie i autoencoder?

RockTheStar
źródło
1
Rzadkie kodowanie w rzeczywistości stanowi określony typ autoencodera znanego jako rzadki autoencoder . Możesz więc rozważyć rzadkie kodowanie jako podzbiór autokoderów, jeśli chcesz.
HelloGoodbye,

Odpowiedzi:

34

Znalezienia różnic można dokonać, patrząc na modele. Najpierw spójrzmy na rzadkie kodowanie.

Rzadkie kodowanie

Rzadkie kodowanie minimalizuje cel gdzie W jest macierzą zasad, H jest macierzą kodów, a X jest macierzą danych, które chcemy reprezentować. λ realizuje wymianę między rzadkością a rekonstrukcją. Zauważ, że jeśli otrzymamy H , oszacowanie W jest łatwe za pomocą najmniejszych kwadratów.

Lsc=||WHX||22reconstruction term+λ||H||1sparsity term
WXλHW

Na początku jednak nie mamy Jednak istnieje wiele algorytmów, które mogą rozwiązać powyższy cel względem H . Właściwie w ten sposób wnioskujemy: musimy rozwiązać problem optymalizacji, jeśli chcemy poznać h należące do niewidzialnego x .HHhx

Auto enkodery

Automatyczne enkodery to rodzina nienadzorowanych sieci neuronowych. Jest ich całkiem sporo, np. Głębokie auto kodery lub te, które mają różne sztuczki regularyzacji - np. Denoising, skurcz, rzadki. Istnieją nawet sieci probabilistyczne, takie jak generatywne sieci stochastyczne lub wariacyjny auto koder. Ich najbardziej abstrakcyjną formą jest ale na razie skorzystamy z dużo prostszej: L ae = | | W σ ( W T X )

D(d(e(x;θr);θd),x)
gdzie σ jest funkcją nieliniową, taką jak logistyczna sigmoid σ ( x ) = 1
Lae=||Wσ(WTX)X||2
σ .σ(x)=11+exp(x)

Podobieństwa

Zauważ, że wygląda prawie jak L a e po ustawieniu H = σ ( W T X ) . Różnica polega na tym, że i) auto kodery nie zachęcają do rzadkości w swojej ogólnej formie ii) autoencoder używa modelu do wyszukiwania kodów, podczas gdy rzadkie kodowanie robi to za pomocą optymalizacji.LscLaeH=σ(WTX)

W odniesieniu do danych obrazu, naturalnego związku ze stałą koderów samochodowych i rzadki kodowania często są zbieżne . Auto kodery są jednak znacznie wydajniejsze i można je z łatwością uogólnić na znacznie bardziej skomplikowane modele. Np. Dekoder może być wysoce nieliniowy, np. Głęboka sieć neuronowa. Co więcej, nie ma się związku z kwadratową stratą (od której zależy oszacowanie W dla L s c .)WWLsc

Również różne metody regularyzacji dają reprezentacje o różnej charakterystyce. Wykazano również, że automatyczne kodowanie odszumiania jest równoważne pewnej formie RBM itp.

Ale dlaczego?

Jeśli chcesz rozwiązać problem z prognozowaniem, nie będziesz potrzebował auto koderów, chyba że masz tylko mało danych oznaczonych i dużo danych nieznakowanych. Wtedy na ogół lepiej jest wyszkolić głęboki auto koder i umieścić na nim liniowy SVM zamiast trenować głęboką sieć neuronową.

Są to jednak bardzo potężne modele do przechwytywania charakterystyki dystrybucji. Jest to niejasne, ale obecnie prowadzone są badania przekształcające to w twarde fakty statystyczne. Głęboko utajone modele gaussowskie, zwane także koderami Variational Auto lub generatywnymi sieciami stochastycznymi, są dość interesującymi sposobami uzyskania auto koderów, które w wiarygodny sposób szacują podstawowy rozkład danych.

bayerj
źródło
Dzięki za odpowiedź! Czy to oznacza, że ​​w żadnym wypadku nie należy stosować rzadkiego kodowania, ale autoencoder? Ponadto powinien istnieć dodatkowy termin w rzadkim kodowaniu, który reguluje W?
RockTheStar
Nie ma takiej ogólnej zasady. SC ma jedną zaletę nad AE: kodowanie przez optymalizację może być bardzo potężne.
bayerj
Przepraszam, możesz to rozwinąć?
RockTheStar,
Posiadanie ustalonej mapy, która została oszacowana w celu spełnienia pewnych ograniczeń (tutaj: rzadki wynik) jest mniej wydajna niż posiadanie optymalizatora, który próbuje znaleźć takie rozwiązanie w przypadku wielu iteracji.
bayerj
1
Przepraszam, że ponownie podniosłem to pytanie. Myślę, że Autoencoder może również zachęcać do rzadkości, tj. Rzadkiego autoencodera.
RockTheStar
11

W neuronauce termin Neural Coding jest używany w odniesieniu do wzorców aktywności elektrycznej neuronów indukowanych przez bodziec. Z kolei rzadkie kodowanie jest jednym rodzajem wzoru. Mówi się, że kod jest rzadki, gdy bodziec (jak obraz) wywołuje aktywację tylko stosunkowo niewielkiej liczby neuronów, które łącznie reprezentują go w rzadki sposób. W uczeniu maszynowym można zastosować to samo ograniczenie optymalizacji, które zastosowano do stworzenia rzadkiego modelu kodu, aby zaimplementować rzadkie autokodery, które są zwykłymi autokoderami szkolonymi z ograniczeniem rzadkości. Poniżej podano bardziej szczegółowe wyjaśnienia dla każdego pytania.

Kodowanie rzadkie definiuje się jako uczenie się kompletnego zestawu wektorów podstawowych do reprezentowania wektorów wejściowych (<- dlaczego tego chcemy)

Po pierwsze, przynajmniej od tego czasu (Hubel i Wiesel, 1968) wiadomo, że w regionie V1 istnieją specyficzne komórki, które reagują maksymalnie na bodziec podobny do krawędzi (poza tym, że mają inne „przydatne” właściwości). Kodowanie rzadkie jest modelem, który dobrze wyjaśnia wiele zaobserwowanych cech tego systemu. Zobacz (Olshausen i Field, 1996), aby uzyskać więcej informacji.

Po drugie, wykazano, że model opisujący rzadkie kodowanie jest użyteczną techniką do ekstrakcji funkcji w uczeniu maszynowym i daje dobre wyniki w zadaniach uczenia transferowego. Raina i in. (2007) wykazali, że zestaw „wektorów bazowych” (cech, takich jak pociągnięcia piórem i krawędzie) wyuczony na zestawie szkoleniowym złożonym z odręcznych znaków poprawia klasyfikację w zadaniu rozpoznawania cyfr odręcznie. Później wykorzystano modele oparte na rzadkim kodowaniu do trenowania „głębokich” sieci, układając warstwy rzadkich detektorów cech w celu stworzenia „rzadkiej głębokiej sieci przekonań” (Lee i in., 2007). Niedawno zadziwiające wyniki w rozpoznawaniu obrazów uzyskano przy użyciu modeli opartych na rzadkim kodowaniu do zbudowania sieci z kilkoma warstwami (słynny „Google Brain”), który był w stanie odróżnić obraz kota w sposób całkowicie bez nadzoru (Le i in. , 2013) .

Po trzecie, prawdopodobnie możliwe jest wykorzystanie wyuczonej podstawy do kompresji. Nie widziałem jednak, żeby ktoś to robił.

Jakie są różnice między rzadkim kodowaniem a autoencoderem?

Autoencoder to model, który próbuje zrekonstruować dane wejściowe, zwykle z wykorzystaniem pewnego rodzaju ograniczenia. Według Wikipedii jest to „sztuczna sieć neuronowa używana do uczenia się efektywnego kodowania”. W definicji autoencodera nie ma nic wymagającego rzadkości. Ograniczenia oparte na rzadkim kodowaniu to jedna z dostępnych technik, ale są też inne, na przykład autoodbiorniki Denoising, autokodery Contractive i RBM. Wszystko to sprawia, że ​​sieć uczy się dobrych reprezentacji danych wejściowych (które są często również „rzadkie”).

Kiedy zastosujemy rzadkie kodowanie i autoencoder?

Prawdopodobnie jesteś zainteresowany wykorzystaniem automatycznego kodera do ekstrakcji funkcji i / lub wstępnego szkolenia głębokich sieci. Jeśli zaimplementujesz autoencoder z ograniczeniem rzadkości, będziesz używać obu.

Saul Berardo
źródło
Ta odpowiedź ma wiele interesujących punktów i ważnych odniesień. Jednak pierwszy akapit jest błędny . Rzadkie kodowanie i rzadkie auto kodery to różne bestie.
bayerj
Gdzie jest powiedziane, że są tym samym? Proszę, powiedz mi, a poprawię odpowiedź.
Saul Berardo
W pierwszym zdaniu.
bayerj
„Sparse Coding to tylko jedna z dostępnych technik szkolenia autoencoderów”. To zdanie nie definiuje „rzadkiego kodowania” jako tej samej „bestii” co autoencoder. Mówi, że między wszystkimi dostępnymi technikami szkolenia autoencoderów, jedną z nich jest „Sparse Coding”. Zgadzam się, że zdanie rzeczywiście ma pewną dwuznaczność, która moim zdaniem została wyjaśniona przez resztę odpowiedzi.
Saul Berardo
You say that sparse coding is a method to train auto encoders. That is clearly not the case, as auto encoders have an explicit decoder that is not implemented with an optimisation algorithm. Given an arbitrary auto encoder you cannot train it with sparse coding.
bayerj
1

A sparse coder is kind of like half an auto-encoder. An auto-encoder works like:

input  =>  neural net layer  =>  hidden outputs => neural net layer => output

For back-propagation, the error signal, the loss, is: input - output

If we apply a sparsity constraint on the hidden outputs, then most will be zeros, and a few will be 1s. Then the second layer is essentially a set of linear basis functions, that are added together, according to which of the hidden outputs are 1s.

W rzadkim kodowaniu mamy tylko drugą połowę:

                                codes => neural net layer => output

„Kody” to kilka liczb rzeczywistych, które wybierają podstawowe funkcje reprezentowane przez wagi w warstwie sieci neuronowej. Ponieważ w artykule Olshausena stosują one ograniczenie rzadkości do kodów, kody są, podobnie jak w rzadkim auto-enkoderze, rzadkie: przeważnie zera z kilkoma zerami.

Różnica, którą widzimy teraz wyraźnie: w przypadku rzadkiego kodowania nie ma pierwszej połowy sieci neuronowej: kody nie są nam dostarczane automatycznie przez sieć neuronową.

Jak uzyskać kody w rzadkim kodowaniu? Musimy się zoptymalizować, co robimy, stosując gradient opadający lub podobny, aby znaleźć zestaw kodów, które najlepiej zapewniają wyjście pasujące do obrazu wejściowego. Musimy to zrobić dla każdego obrazu, w tym dla każdego obrazu testowego, za każdym razem.

Hugh Perkins
źródło
0

You might want to read this recent paper, https://arxiv.org/abs/1708.03735v2 on precisely this same topic. In this paper the authors show that indeed one can set up an autoencoder such that the ground truth dictionary is a critical point of that autoencoder's squared loss function.

gradstudent
źródło