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.

autoencoderi

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.

Un codificator auto generic rar este vizualizat mai jos, unde opacitatea unui nod corespunde nivelului de activare. Este important să rețineți că nodurile individuale ale unui model antrenat care se activează sunt dependente de date, diferite intrări vor avea ca rezultat activarea diferitelor noduri prin rețea.

Un rezultat al acestui fapt este că permitem rețelei noastre să sensibilizeze nodurile individuale ale stratului ascuns către atributele specifice ale datelor de intrare. În timp ce un codificator auto incomplet va folosi întreaga rețea pentru fiecare observație, un codificator auto rar va fi forțat să activeze selectiv regiunile rețelei în funcție de datele de intrare. Prin urmare, am limitat capacitatea rețelei de a memora datele de intrare fără a limita capacitatea rețelei de a extrage caracteristici din date. Acest lucru ne permite să luăm în considerare reprezentarea stării latente și regularizarea rețelei separat, astfel încât să putem alege o reprezentare a stării latente (adică dimensionalitatea codificării) în conformitate cu ceea ce are sens, având în vedere contextul datelor, impunând în același timp regularizarea prin constrângerea de raritate.

Există două modalități principale prin care putem impune această constrângere de raritate; ambele implică măsurarea activărilor stratului ascuns pentru fiecare lot de antrenament și adăugarea unui termen la funcția de pierdere pentru a penaliza activările excesive. Acești termeni sunt:

  • L1 Regularizare: Putem adăuga un termen funcției noastre de pierdere care penalizează valoarea absolută a vectorului activărilor $ a $ în stratul $ h $ pentru observare $ i $, scalat de un parametru de reglare $ \ lambda $.

  • KL-Divergență: În esență, divergența KL este o măsură a diferenței dintre două distribuții de probabilitate. Putem defini un parametru de raritate $ \ rho $ care denotă activarea medie a unui neuron peste o colecție de probe. Această așteptare poate fi calculată ca $ _ j> = \ frac \ sum \ limits_ \ left (x \ right)> \ right]> $ unde indicele $ j $ denotă neuronul specific din stratul $ h $, însumând activările pentru $ m $ observații de antrenament notate individual ca $ x $. În esență, prin constrângerea activării medii a unui neuron asupra unei colecții de probe, încurajăm neuronii să tragă doar pentru un subgrup de observații. Putem descrie $ \ rho $ ca o distribuție variabilă aleatorie a lui Bernoulli, astfel încât să putem utiliza divergența KL (extinsă mai jos) pentru a compara distribuția ideală $ \ rho $ cu distribuțiile observate pe toate nodurile stratului ascuns $ \ hat \ rho $.

Notă: O distribuție Bernoulli este „distribuția probabilității unei variabile aleatorii care ia valoarea 1 cu probabilitatea $ p $ și valoarea 0 cu probabilitatea $ q = 1-p $”. Acest lucru corespunde destul de bine cu stabilirea probabilității unui neuron să declanșeze.

Divergența KL între două distribuții Bernoulli poate fi scrisă ca $ \ sum \ limits _ ^ >> _ j >>>> + \ left (\ right) \ log \ frac> _ j >>> $. Acest termen de pierdere este vizualizat mai jos pentru o distribuție ideală de $ \ rho = 0,2 $, care corespunde penalizării minime (zero) în acest moment.

Autocodificatoare de dezinfectare

Până acum am discutat despre conceptul de formare a unei rețele neuronale în care intrările și ieșirile sunt identice și modelul nostru are sarcina de a reproduce intrarea cât mai aproape posibil în timp ce trece printr-un fel de blocaj de informații. Amintiți-vă că am menționat că ne-ar plăcea ca autoencoderul nostru să fie suficient de sensibil pentru a recrea observația originală, dar suficient de insensibil la datele de formare, astfel încât modelul să învețe o codificare și decodificare generalizată. O altă abordare a dezvoltării unui model generalizat este coruperea ușoară a datelor de intrare, dar păstrarea în continuare a datelor necorupte ca ieșire țintă.

Cu această abordare, modelul nostru nu este capabil să dezvolte pur și simplu o cartografiere care să memoreze datele de antrenament, deoarece intrarea și ieșirea țintă nu mai sunt aceleași. Mai degrabă, modelul învață un câmp vectorial pentru maparea datelor de intrare către o varietate de dimensiuni inferioare (amintim din graficul meu anterior că un distribuitor descrie regiunea de densitate mare în care se concentrează datele de intrare); dacă acest distribuitor descrie cu exactitate datele naturale, am „anulat” efectiv zgomotul adăugat.

Figura de mai sus vizualizează câmpul vectorial descris prin compararea reconstrucției $ x $ cu valoarea inițială de $ x $. Punctele galbene reprezintă exemple de antrenament înainte de adăugarea zgomotului. După cum puteți vedea, modelul a învățat să regleze intrarea coruptă către colectorul învățat.

Este demn de remarcat faptul că acest câmp vectorial se comportă de obicei numai în regiunile în care modelul a fost observat în timpul antrenamentului. În zone îndepărtate de distribuția naturală a datelor, eroarea de reconstrucție este atât mare, cât și nu indică întotdeauna în direcția distribuției reale.

Autoencoderi contractivi

S-ar putea aștepta la asta pentru intrări foarte similare, codificarea învățată ar fi, de asemenea, foarte similară. Putem să ne instruim în mod explicit modelul pentru ca acest lucru să fie cazul cerând ca derivatul activărilor stratului ascuns să fie mic în raport cu intrarea. Cu alte cuvinte, pentru modificări mici la intrare, ar trebui să menținem în continuare o stare codificată foarte similară. Acest lucru este destul de similar cu un autoencoder de denoising, în sensul că aceste mici perturbații la intrare sunt considerate în esență zgomot și că ne-am dori ca modelul nostru să fie robust împotriva zgomotului. Cu alte cuvinte (accentul meu), „autoencoderii de denoising fac ca funcția de reconstrucție (adică Decoder) să reziste la perturbații mici, dar de dimensiuni definite ale intrării, în timp ce autoencoderii contractivi fac ca funcția de extragere a caracteristicilor (de exemplu, Codificatorul) să reziste la perturbații infinitesimale ale intrarea. "

Deoarece încurajăm în mod explicit modelul nostru să învețe o codificare în care intrările similare au codificări similare, forțăm în mod esențial modelul să învețe cum să contracta un cartier de intrări într-un cartier mai mic de ieșiri. Observați cum panta (adică derivată) a datelor reconstituite este în esență zero pentru vecinătățile locale de date de intrare.

Putem realiza acest lucru construind un termen de pierdere care penalizează derivații mari ai activărilor noastre de strat ascuns în raport cu exemplele de instruire de intrare, penalizând în esență cazurile în care o mică modificare a intrării duce la o schimbare mare în spațiul de codare.

În termeni matematici mai neobișnuiți, putem crea termenul nostru de pierdere a regularizării ca norma pătrată Frobenius $ $ a matricei iacobiene $> $ pentru activările stratului ascuns în ceea ce privește observațiile de intrare. O normă Frobenius este în esență o normă L2 pentru o matrice și matricea iacobiană reprezintă pur și simplu toate derivatele parțiale de ordinul întâi ale unei funcții cu valoare vectorială (în acest caz, avem un vector de exemple de antrenament).

Pentru $ m $ observații și $ n $ noduri de strat ascunse, putem calcula aceste valori după cum urmează.

= [δ a 1 (h) (x) δ x 1 ⋯ δ a 1 (h) (x) δ xm ⋮ ⋱ ⋮ δ an (h) (x) δ x 1 ⋯ δ an (h) (x) δ xm]

Scris mai succint, ne putem defini funcția de pierdere completă ca

unde $ a_i ^ \ left (x \ right)> $ definește câmpul de gradient al activărilor noastre de strat ascuns cu privire la intrarea $ x $, însumată peste toate exemplele de instruire $ i $.

rezumat

Un autoencoder este o arhitectură de rețea neuronală capabilă să descopere structura în cadrul datelor pentru a dezvolta o reprezentare comprimată a intrării. Există multe variante diferite ale arhitecturii generale a codificatorului auto cu scopul de a se asigura că reprezentarea comprimată reprezintă atribute semnificative ale intrării de date originale; în mod obișnuit, cea mai mare provocare atunci când lucrezi cu codificatoare automate este de a face ca modelul tău să învețe de fapt o reprezentare spațială latentă semnificativă și generalizabilă.

Deoarece autoencoderii învață cum să comprime datele pe baza atributelor (adică corelații între vectorul caracteristicii de intrare) descoperite din date în timpul antrenamentului, aceste modele sunt de obicei capabile să reconstruiască date similare clasei de observații pe care modelul observat în timpul antrenamentului.

Aplicațiile codificatorilor auto includ:

  • Detectarea anomaliilor
  • Dezactivarea datelor (ex. Imagini, audio)
  • Imaginea în pictură
  • Recuperarea informațiilor