ciot Ce este un Autoencoder? - Unite.AI
Conectează-te cu noi
Masterclass AI:

AI 101

Ce este un Autoencoder?

mm
Actualizat on

Dacă ați mai citit despre tehnicile de învățare nesupravegheată, este posibil să fi întâlnit termenul „codificare automată”. Codificatoarele automate sunt una dintre modalitățile principale prin care sunt dezvoltate modelele de învățare nesupravegheate. Totuși, ce este exact un autoencoder?

Pe scurt, autoencoderele funcționează prin preluarea datelor, comprimarea și codificarea datelor și apoi reconstruind datele din reprezentarea de codificare. Modelul este antrenat până când pierderea este minimizată și datele sunt reproduse cât mai aproape posibil. Prin acest proces, un autoencoder poate învăța caracteristicile importante ale datelor. Deși aceasta este o definiție rapidă a unui autoencoder, ar fi benefic să aruncăm o privire mai atentă la autoencoder și să obțineți o mai bună înțelegere a modului în care funcționează. Acest articol se va strădui să demistifice autoencoderele, explicând arhitectura autoencoderelor și aplicațiile acestora.

Ce este un Autoencoder?

Autoencoderi sunt rețele neuronale. Rețelele neuronale sunt compuse din mai multe straturi, iar aspectul definitoriu al unui autoencoder este că straturile de intrare conțin exact la fel de multe informații ca și stratul de ieșire. Motivul pentru care stratul de intrare și stratul de ieșire au exact același număr de unități este că un autoencoder urmărește să reproducă datele de intrare. Emite o copie a datelor după ce le analizează și le reconstruiește într-un mod nesupravegheat.

Datele care se deplasează printr-un autoencoder nu sunt doar mapate direct de la intrare la ieșire, ceea ce înseamnă că rețeaua nu doar copiază datele de intrare. Există trei componente pentru un autoencoder: o porțiune de codificare (intrare) care comprimă datele, o componentă care gestionează datele comprimate (sau blocajele) și o porțiune de decodor (ieșire). Când datele sunt introduse într-un autoencoder, acestea sunt codificate și apoi comprimate la o dimensiune mai mică. Rețeaua este apoi antrenată pe datele codificate/comprimate și emite o recreare a acestor date.

Deci, de ce ați dori să antrenați o rețea pentru a reconstrui doar datele care îi sunt date? Motivul este că rețeaua învață „esența” sau cele mai importante caracteristici ale datelor de intrare. După ce ați antrenat rețeaua, se poate crea un model care poate sintetiza date similare, cu adăugarea sau scăderea anumitor caracteristici țintă. De exemplu, puteți antrena un autoencoder pe imagini granulate și apoi utilizați modelul antrenat pentru a elimina granulația/zgomotul din imagine.

Arhitectura autoencoder

Să aruncăm o privire la arhitectura unui autoencoder. Vom discuta aici despre arhitectura principală a unui autoencoder. Există variații ale acestei arhitecturi generale pe care le vom discuta în secțiunea de mai jos.

Foto: Michela Massi prin Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

După cum am menționat anterior, un autoencoder poate fi împărțit în trei componente diferite: codificatorul, un blocaj și decodorul.

Porțiunea de codificator a autoencoderului este de obicei o rețea de tip feedforward, dens conectată. Scopul straturilor de codificare este de a prelua datele de intrare și de a le comprima într-o reprezentare spațială latentă, generând o nouă reprezentare a datelor care are o dimensionalitate redusă.

Straturile de cod, sau blocajul, se ocupă de reprezentarea comprimată a datelor. Codul de blocaj este proiectat cu atenție pentru a determina cele mai relevante porțiuni ale datelor observate sau pentru a spune altfel caracteristicile datelor care sunt cele mai importante pentru reconstrucția datelor. Scopul aici este de a determina care aspecte ale datelor trebuie păstrate și care pot fi aruncate. Codul de blocaj trebuie să echilibreze două considerații diferite: dimensiunea reprezentării (cât de compactă este reprezentarea) și relevanța variabilei/funcției. Gâtul de sticlă efectuează activare în funcție de elemente pe ponderile și părtinirile rețelei. Stratul de blocaj este uneori numit și o reprezentare latentă sau variabile latente.

Stratul de decodor este cel responsabil pentru preluarea datelor comprimate și convertirea lor înapoi într-o reprezentare cu aceleași dimensiuni ca datele originale, nealterate. Conversia se face cu reprezentarea spațiului latent care a fost creată de codificator.

Cea mai de bază arhitectură a unui autoencoder este o arhitectură feed-forward, cu o structură asemănătoare unui perceptron cu un singur strat utilizat în perceptronii multistrat. La fel ca și rețelele neuronale cu feed-forward obișnuite, codificatorul automat este antrenat prin utilizarea retropropagarii.

Atributele unui autoencoder

Există diferite tipuri de autoencodere, dar toate au anumite proprietăți care le unesc.

Autoencoderele învață automat. Nu necesită etichete și, dacă li se oferă suficiente date, este ușor să obțineți un autoencoder pentru a atinge performanțe ridicate pe un anumit tip de date de intrare.

Autoencoderele sunt specifice datelor. Aceasta înseamnă că pot comprima doar date care sunt foarte asemănătoare cu datele pe care autoencoderul a fost deja antrenat. Autoencoderele sunt, de asemenea, cu pierderi, ceea ce înseamnă că ieșirile modelului vor fi degradate în comparație cu datele de intrare.

Atunci când proiectează un autoencoder, inginerii de învățare automată trebuie să acorde atenție la patru hiperparametri diferiți ai modelului: dimensiunea codului, numărul stratului, nodurile pe strat și funcția de pierdere.

Dimensiunea codului decide câte noduri încep în partea de mijloc a rețelei și mai puține noduri comprimă datele mai mult. Într-un autoencoder profund, în timp ce numărul de straturi poate fi orice număr pe care inginerul îl consideră adecvat, numărul de noduri dintr-un strat ar trebui să scadă pe măsură ce codificatorul merge mai departe. Între timp, opusul este valabil în decodor, ceea ce înseamnă că numărul de noduri pe strat ar trebui să crească pe măsură ce straturile decodorului se apropie de stratul final. În cele din urmă, funcția de pierdere a unui autoencoder este de obicei fie o entropie încrucișată binară, fie o eroare medie pătratică. Entropia încrucișată binară este adecvată pentru cazurile în care valorile de intrare ale datelor sunt într-un interval 0 – 1.

Tipuri de autoencoder

După cum sa menționat mai sus, există variații ale arhitecturii clasice de codificare automată. Să examinăm diferitele arhitecturi autoencoder.

Rară

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

În timp ce codificatoarele automate au de obicei un blocaj care comprimă datele printr-o reducere a nodurilor, autoencoder rars sunt o alternativă la acel format operațional tipic. Într-o rețea rară, straturile ascunse păstrează aceeași dimensiune ca și straturile de codificator și decodor. În schimb, activările dintr-un anumit strat sunt penalizate, configurandu-l astfel încât funcția de pierdere să captureze mai bine caracteristicile statistice ale datelor de intrare. Cu alte cuvinte, în timp ce straturile ascunse ale unui autoencoder rar au mai multe unități decât un autoencoder tradițional, doar un anumit procent dintre ele sunt active la un moment dat. Cele mai importante funcții de activare sunt păstrate, iar altele sunt ignorate, iar această constrângere ajută rețeaua să determine doar cele mai importante caracteristici ale datelor de intrare.

Contractiv

Autoencodere contractive sunt concepute pentru a fi rezistente la mici variații ale datelor, menținând o reprezentare consecventă a datelor. Acest lucru se realizează prin aplicarea unei penalități la funcția de pierdere. Această tehnică de regularizare se bazează pe norma Frobenius a matricei jacobiene pentru activările codificatorului de intrare. Efectul acestei tehnici de regularizare este că modelul este forțat să construiască o codificare în care intrări similare vor avea codificări similare.

Convolutional

Autoencodere convoluționale codificați datele de intrare prin împărțirea datelor în subsecțiuni și apoi conversia acestor subsecțiuni în semnale simple care sunt însumate pentru a crea o nouă reprezentare a datelor. Similar cu rețelele neuronale de convoluție, un autoencoder convoluțional este specializat în învățarea datelor de imagine și folosește un filtru care este mutat pe întreaga imagine secțiune cu secțiune. Codificările generate de stratul de codificare pot fi folosite pentru a reconstrui imaginea, reflecta imaginea sau modifica geometria imaginii. Odată ce filtrele au fost învățate de rețea, ele pot fi folosite pe orice intrare suficient de similară pentru a extrage caracteristicile imaginii.

Dezgomot

Foto: MAL prin Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Dezgomot autoencoder introduceți zgomot în codificare, rezultând o codificare care este o versiune coruptă a datelor de intrare originale. Această versiune coruptă a datelor este folosită pentru a antrena modelul, dar funcția de pierdere compară valorile de ieșire cu intrarea originală și nu cu intrarea coruptă. Scopul este ca rețeaua să poată reproduce versiunea originală, necoruptă a imaginii. Comparând datele corupte cu datele originale, rețeaua învață care caracteristici ale datelor sunt cele mai importante și care sunt neimportante/corupții. Cu alte cuvinte, pentru ca un model să elimine zgomotul imaginilor corupte, trebuie să fi extras caracteristicile importante ale datelor de imagine.

Variațională

Autoencodere variaționale operează făcând ipoteze despre modul în care sunt distribuite variabilele latente ale datelor. Un autoencoder variațional produce o distribuție de probabilitate pentru diferitele caracteristici ale imaginilor de antrenament/atributelor latente. Când se antrenează, codificatorul creează distribuții latente pentru diferitele caracteristici ale imaginilor de intrare.

 

Deoarece modelul învață caracteristicile sau imaginile ca distribuții gaussiene în loc de valori discrete, este capabil să fie folosit pentru a genera noi imagini. Distribuția Gaussiană este eșantionată pentru a crea un vector, care este alimentat în rețeaua de decodare, care redă o imagine bazată pe acest vector de mostre. În esență, modelul învață caracteristici comune ale imaginilor de antrenament și le atribuie o anumită probabilitate ca acestea să apară. Distribuția probabilității poate fi apoi utilizată pentru a face inginerie inversă a unei imagini, generând noi imagini care seamănă cu imaginile originale, de antrenament.

La antrenamentul rețelei, datele codificate sunt analizate, iar modelul de recunoaștere emite doi vectori, evidențiind media și abaterea standard a imaginilor. O distribuție este creată pe baza acestor valori. Acest lucru se face pentru diferitele stări latente. Decodorul preia apoi mostre aleatorii din distribuția corespunzătoare și le folosește pentru a reconstrui intrările inițiale în rețea.

Aplicații de codificare automată

Codificatoarele automate pot fi folosite pentru un larg varietate de aplicații, dar sunt utilizate de obicei pentru sarcini precum reducerea dimensionalității, eliminarea zgomotului de date, extragerea caracteristicilor, generarea de imagini, predicția secvență la secvență și sistemele de recomandare.

Eliminarea zgomotului de date este utilizarea de codificatoare automate pentru a elimina granulația/zgomotul din imagini. În mod similar, codificatoarele automate pot fi utilizate pentru a repara alte tipuri de deteriorare a imaginii, cum ar fi imagini neclare sau secțiuni lipsă ale imaginilor. Reducerea dimensionalității poate ajuta rețelele de înaltă capacitate să învețe caracteristici utile ale imaginilor, ceea ce înseamnă că autoencoderele pot fi folosite pentru a spori pregătirea altor tipuri de rețele neuronale. Acest lucru este valabil și pentru utilizarea autoencoderelor pentru extragerea caracteristicilor, deoarece autoencoderele pot fi utilizate pentru a identifica caracteristicile altor seturi de date de antrenament pentru a antrena alte modele.

În ceea ce privește generarea de imagini, autoencoderele pot fi folosite pentru a genera imagini umane false sau personaje animate, care are aplicații în proiectarea sistemelor de recunoaștere a feței sau automatizarea anumitor aspecte ale animației.

Modelele de predicție secvență la secvență pot fi utilizate pentru a determina structura temporală a datelor, ceea ce înseamnă că un autoencoder poate fi utilizat pentru a genera următorul chiar și într-o secvență. Din acest motiv, un autoencoder ar putea fi folosit pentru a genera videoclipuri. În cele din urmă, autoencoderele profunde pot fi folosite pentru a crea sisteme de recomandare prin preluarea modelelor legate de interesul utilizatorului, codificatorul analizând datele de implicare a utilizatorului, iar decodorul creând recomandări care se potrivesc cu modelele stabilite.

Blogger și programator cu specialități în Invatare mecanica și Invatare profunda subiecte. Daniel speră să-i ajute pe alții să folosească puterea AI pentru binele social.