Introducere în autoencoderi
Autocodificatorii sunt o tehnică de învățare nesupravegheată în care folosim rețelele neuronale pentru sarcina de învățarea reprezentării. Mai exact, vom proiecta o arhitectură de rețea neuronală astfel încât să impunem un blocaj în rețea care forțează o comprimat reprezentarea cunoașterii intrării originale. Dacă caracteristicile de intrare ar fi independente unele de altele, această comprimare și reconstrucția ulterioară ar fi o sarcină foarte dificilă. Cu toate acestea, dacă există un fel de structură în date (adică corelații între caracteristicile de intrare), această structură poate fi învățată și, prin urmare, utilizată atunci când forțează intrarea prin blocajul rețelei.

După cum s-a vizualizat mai sus, putem lua un set de date neetichetat și îl putem încadra ca o problemă de învățare supravegheată însărcinată cu afișarea $ \ hat x $, a reconstrucția intrării originale $ x $. Această rețea poate fi antrenată prin minimizarea erorii de reconstrucție, $ \ left (\ right) $, care măsoară diferențele dintre intrarea noastră inițială și reconstrucția consecventă. Blocajul este un atribut cheie al proiectării rețelei noastre; fără prezența unui blocaj de informații, rețeaua noastră ar putea învăța cu ușurință să memoreze pur și simplu valorile de intrare trecând aceste valori de-a lungul rețelei (vizualizate mai jos).
Un blocaj constrânge cantitatea de informații care poate traversa întreaga rețea, forțând o comprimare învățată a datelor de intrare.
Notă: De fapt, dacă ar fi să construim o rețea liniară (adică fără utilizarea funcțiilor de activare neliniare la fiecare strat) am observa o reducere a dimensionalității similară cu cea observată în PCA. Vezi aici discuția lui Geoffrey Hinton.
Modelul ideal de codificator auto echilibrează următoarele:
- Sensibil la intrări suficient pentru a construi cu precizie o reconstrucție.
- Suficient de insensibil la intrări pentru ca modelul să nu memoreze sau să nu depășească pur și simplu datele de antrenament.
Acest compromis forțează modelul să mențină doar variațiile datelor necesare pentru reconstituirea intrării, fără a se menține la redundanțele din intrare. Pentru majoritatea cazurilor, aceasta implică construirea unei funcții de pierdere în care un termen încurajează modelul nostru să fie sensibil la intrări (de exemplu, pierderea din reconstrucție $ \ left (\ right) $) și un al doilea termen descurajează memorarea/supra-montarea (de exemplu, un regulator adăugat ).
De obicei, vom adăuga un parametru de scalare în fața termenului de regularizare, astfel încât să putem ajusta compromisul între cele două obiective.
În această postare, voi discuta despre unii dintre arhitecții standard ai codificatorului auto pentru impunerea acestor două constrângeri și reglarea compromisului; într-un post de urmărire voi discuta despre autoencoderii variaționali care se bazează pe conceptele discutate aici pentru a oferi un model mai puternic.
Codificator auto incomplet
Cea mai simplă arhitectură pentru construirea unui autoencoder este constrângerea numărului de noduri prezente în stratul (straturile) ascuns (e) al rețelei, limitând cantitatea de informații care poate circula prin rețea. Penalizând rețeaua în conformitate cu eroarea de reconstrucție, modelul nostru poate învăța cele mai importante atribute ale datelor de intrare și cum să reconstituie cel mai bine intrarea originală dintr-o stare „codificată”. În mod ideal, această codificare va fi învățați și descrieți atributele latente ale datelor de intrare.
Deoarece rețelele neuronale sunt capabile să învețe relații neliniare, acest lucru poate fi considerat o generalizare mai puternică (neliniară) a PCA. În timp ce PCA încearcă să descopere un hiperplan de dimensiuni inferioare care descrie datele originale, autoencoderii sunt capabili să învețe varietăți neliniare (o varietate este definită în termeni simpli ca o suprafață continuă, care nu se intersectează). Diferența dintre aceste două abordări este vizualizată mai jos.
Pentru date cu dimensiuni superioare, autoencoderii sunt capabili să învețe o reprezentare complexă a datelor (varietate) care poate fi utilizată pentru a descrie observațiile într-o dimensionalitate mai mică și decodate corespunzător în spațiul de intrare original.
Un autoencoder incomplet nu are un termen explicit de regularizare - pur și simplu ne instruim modelul în funcție de pierderea din reconstrucție. Astfel, singura noastră modalitate de a ne asigura că modelul nu memorează datele de intrare este să ne asigurăm că am restricționat suficient numărul de noduri din straturile ascunse.
Pentru autoencodere profunde, trebuie să fim conștienți de capacitatea modelelor noastre de codificator și decodor. Chiar dacă „stratul de blocaj” este doar un nod ascuns, este încă posibil ca modelul nostru să memoreze datele de instruire, cu condiția ca modelele de codificator și decodor să aibă capacitatea suficientă de a învăța o funcție arbitrară care poate mapa datele la un index.
Având în vedere faptul că ne-am dori ca modelul nostru să descopere atribute latente în cadrul datelor noastre, este important să ne asigurăm că modelul de codificator automat nu învață pur și simplu un mod eficient de memorare a datelor de antrenament. Similar cu problemele de învățare supravegheate, putem folosi diferite forme de regularizare a rețelei pentru a încuraja proprietăți bune de generalizare; aceste tehnici sunt discutate mai jos.
Autocodificatoare rare
Autocodificatoarele rare ne oferă o metodă alternativă pentru introducerea unui blocaj de informații fără a necesita o reducere a numărului de noduri la straturile noastre ascunse. Mai degrabă, vom construi funcția noastră de pierdere astfel încât să penalizăm activările dintr-un strat. Pentru orice observație dată, vom încuraja rețeaua noastră să învețe o codificare și decodificare care se bazează doar pe activarea unui număr mic de neuroni. Este demn de remarcat faptul că aceasta este o abordare diferită a regularizării, deoarece în mod normal regularizăm greutățile unei rețele, nu activările.