Ce sunt autocodificatoarele?
On noiembrie 11, 2021 by adminO introducere ușoară în autocodificatoare și diferitele sale aplicații. De asemenea, aceste tutoriale folosesc tf.keras,API-ul Python de nivel înalt al TensorFlow pentru construirea și antrenarea modelelor de învățare profundă.
.4310>
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- Ce este Autoencoder
- Tipuri de Autoencoder
- Aplicații ale Autoencoder
- Implementare
- Implementare
- Exemple excelente
- Concluzie
Dificultate: ★ ★ ☆ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Ce este Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧!

.Conceptul original al Autoencoderului este foarte simplu, constă în a introduce date de intrare și a obține exact aceleași date ca și datele de intrare prin intermediul unei rețele neuronale.Codificatorul primește mai întâi datele de intrare, le comprimă într-un vector Z de dimensiuni mai mici și apoi introduce Z în decodificator pentru a readuce Z la dimensiunea sa originală.Acest lucru pare ușor, dar haideți să aruncăm o privire mai atentă și să vedem dacă este chiar atât de ușor.

.Codificator:
Codificatorul este responsabil pentru comprimarea datelor originale de intrare într-un vector cu dimensiuni reduse C. Acest C, pe care de obicei îl numim cod, vector latent sau vector de caracteristici, dar eu obișnuiesc să îl numesc spațiu latent, deoarece C reprezintă o caracteristică ascunsă.Encoder poate comprima datele originale într-un vector semnificativ cu dimensiuni reduse, ceea ce înseamnă că Autoencoder are o reducere a dimensionalității, iar stratul ascuns are o funcție de activare a transformării neliniare, astfel încât acest Encoder este ca o versiune puternică a PCA, deoarece Encoder poate face non-lineare.reducere dimensională!
Decodificator:
Ceea ce face decodificatorul este să restabilească spațiul latent înapoi la datele de intrare cât mai mult posibil, ceea ce reprezintă o transformare a vectorilor de caracteristici din spațiul dimensional inferior în spațiul dimensional superior.
Deci cum măsori cât de bine funcționează Autoencoder ! Pur și simplu prin compararea similitudinii dintre cele două date de intrare originale și datele reconstruite.Deci, funcția noastră de pierdere poate fi scrisă ca ….
Funcția de pierdere:

Deoarece dorim să minimizăm diferența dintreAutoEncoder este antrenat folosind backpropagation pentru a actualiza greutățile, la fel ca o rețea neuronală normală.actualizează ponderile.
Pentru a rezuma, Autoencoder este ….
1. o arhitectură de model foarte comună, folosită de asemenea în mod obișnuit pentru învățarea nesupravegheată
2. poate fi folosită ca metodă de reducere a dimensiunii pentru
3. poate fi folosită pentru a învăța reprezentarea datelor, transformarea caracteristicilor reprezentative
În acest moment, ar trebui să fie ușor de înțeles cum este Autoencoder, arhitectura este foarte simplă, așa că haideți să aruncăm o privire la transformările sale!
Tipuri de Autoencoder
După ce am explicat principiile de bază ale AutoEncoder, este timpul să aruncăm o privire la utilizarea extinsă și avansată a Autoencoder, astfel încât să puteți vedea utilizarea extinsă a Autoencoder!
2-1. Unet:
Unet poate fi folosit ca unul dintre mijloacele de segmentare a imaginilor, iar arhitectura Unet poate fi văzută ca o variantă de Autoencoder.

2-2. Autocodare recurentă:
Aceasta este o rețea care combină noul text de intrare cu spațiul latent din alte intrări, scopul acestei rețele este clasificarea sentimentelor.Aceasta poate fi văzută, de asemenea, ca o variantă a Autoencoderului, care extrage textul rarefiat pe măsură ce este tastat și găsește spațiul latent care este important.

2-Seq2Seq:
Sequence to Sequence este un model generativ care a fost foarte popular de ceva vreme. Este o soluție minunată la dilema tipurilor RNN care nu sunt capabile să gestioneze perechile nedeterminate și a avut performanțe bune pe subiecte precum chatbot și generarea de texte.Acest lucru poate fi considerat, de asemenea, ca un fel de arhitectură Autoencoder.

Aplicații ale Autoencoderului
După ce ne-am uitat la numeroasele și variatele variante ale Autoencoder, să vedem unde mai poate fi folosit Autoencoder!
3-1. Greutate preformată de model
Autocodificatorul poate fi, de asemenea, utilizat pentru preformarea ponderii, ceea ce înseamnă că modelul găsește o valoare de pornire mai bună.De exemplu, atunci când dorim să completăm modelul țintă, cum ar fi țintă. stratul ascuns este:, așa că la început folosim conceptul de autocodificator pentru a introduce 784 de dimensiuni, iar spațiul latent din mijloc este de 1000 de dimensiuni pentru a face mai întâi pretrain-ul, astfel încât aceste 1000 de dimensiuni pot reține bine intrarea.Apoi eliminăm ieșirea originală și adăugăm al doilea strat, și așa mai departe.În acest fel, întregul model va avea o valoare inițială mai bună.
Huh! Există o parte ciudată… dacă folosiți 1000 de neuroni pentru a reprezenta 784 de dimensiuni de intrare, nu înseamnă că rețeaua trebuie să fie copiată din nou? Care este rostul antrenamentului? Da, acesta este motivul pentru care, într-o pre-antrenare ca aceasta, adăugăm de obicei regularizatorul de normă L1, astfel încât stratul ascuns să nu fie copiat din nou.

Secunde dl Li HongyiÎn trecut, era mai frecventă utilizarea unei astfel de metode pentru preformare, dar acum, datorită creșterii abilităților de formare, nu mai este necesar să se utilizeze această metodă.Dar dacă aveți foarte puține date etichetate, dar o grămadă de date neetichetate, puteți utiliza această metodă pentru a face preînvățarea greutății, deoarece Autoencoder în sine este o metodă de învățare nesupravegheată, folosim datele neetichetate pentru a obține mai întâi preînvățarea greutății și apoi folosim datele neetichetate pentru a obține preînvățarea greutății.Folosim datele neetichetate pentru a obține mai întâi pre-antrenarea ponderilor, iar apoi folosim datele etichetate pentru a regla cu precizie ponderile, astfel încât să putem obține un model bun.Pentru mai multe detalii, vedeți videoclipul domnului Li, este foarte bine explicat!
3-2. Segmentarea imaginilor
Modelul Unet pe care tocmai l-am văzut, să ne uităm din nou la el, deoarece este practic cea mai comună problemă de detectare a defectelor în industria de producție din Taiwan.
Mai întâi trebuie să etichetăm datele de intrare, care vor fi ieșirea noastră. Ceea ce trebuie să facem este să construim o rețea, să introducem imaginea originală (stânga, radiografii ale dinților) și să generăm ieșirea (dreapta, clasificarea structurii dinților).În acest caz, codificatorul & decodorul va fi un strat de convoluție cu o judecată grafică puternică, care extrage caracteristicile semnificative și deconvoluția înapoi în decodor pentru a obține rezultatul segmentării.

.1916>3-3-3. De la video la text
Pentru o problemă de legende de imagine ca aceasta, folosim modelul secvență la secvență, în care datele de intrare sunt o mulțime de fotografii, iar ieșirea este un text care descrie fotografiile.Modelul secvență la secvență utilizează LSTM + Conv net ca codificator & decodificator, care poate descrie o secvență de acțiuni secvențiale & folosind nucleul CNN pentru a extrage spațiul latent necesar în imagine.dar această sarcină este foarte greu de realizat, așa că vă las să o încercați dacă sunteți interesați!

3-4. Regăsirea imaginilor
Regăsirea imaginilor Lucrul care trebuie făcut este să introducem o imagine și să încercăm să găsim cea mai apropiată potrivire, dar dacă comparăm la nivel de pixeli, atunci este foarte ușor săDacă utilizați Autoencoder pentru a comprima mai întâi imaginea în spațiul latent și apoi calculați similitudinea în spațiul latent al imaginii, rezultatul va fi mult mai bun.Rezultatul este mult mai bun, deoarece fiecare dimensiune din spațiul latent poate reprezenta o anumită caracteristică.Dacă distanța este calculată pe spațiul latent, este rezonabil să se găsească imagini similare.În special, aceasta ar fi o modalitate excelentă de învățare nesupravegheată, fără etichetarea datelor!

Aici suntLucrarea lui Georey E. Hinton, faimosul zeu al învățării profunde, arată graficul pe care doriți să îl căutați în colțul din stânga sus, în timp ce celelalte sunt toate graficele pe care autocodificatorul le consideră foarte asemănătoare.7133>

Content-BasedImage Retrieval
3-5. Anomaly Detection
Nu pot găsi o imagine bună, așa că a trebuit să o folosesc pe aceasta LOL
Căutarea anomaliilor este, de asemenea, o problemă de fabricație super comună, așa că această problemă poate fi, de asemenea, încercată cu AutoencoderPutem încerca cu Autoencoder!Mai întâi de toate, să vorbim despre apariția efectivă a anomaliilor. Anomaliile apar de obicei foarte rar, de exemplu, semnale anormale de la mașină, vârfuri bruște de temperatură ……, etc..Acest lucru se întâmplă o dată pe lună (dacă se întâmplă mai mult, mașina ar trebui să fie forțată să se retragă). Dacă datele sunt colectate la fiecare 10 secunde, atunci 260.000 de date vor fi colectate în fiecare lună, dar doar o singură perioadă de timp reprezintă anomalii, ceea ce reprezintă de fapt o cantitate foarte dezechilibrată de date.
Deci cel mai bun mod de a face față acestei situații este să mergem pe datele originale, care sunt cele mai mari cantități de date pe care le avem până la urmă!Dacă putem să luăm datele bune și să antrenăm un autocodificator bun, atunci, dacă apar anomalii, atunci, în mod natural, grafica reconstruită se va rupe.De aici a pornit ideea de a folosi autocodificatorul pentru a găsi anomalii!

.Implementation
Aici folosim Mnist ca exemplu de jucărie și implementăm un Autoencoder folosind API-ul de nivel înalt Tensorflow.keras! Deoarece noul pachet pentru tf.keras a fost lansat în scurt timp, exersăm folosirea metodei de subclasare Model în fișierul
4-1. Creați un model – Vallina_AE:
În primul rând, importați tensorflow!7133>

Utilizarea tf.keras este la fel de simplă ca asta, doar scrieți tf.keras!(Nu știu despre ce vorbesc lol)
Încărcați datele & model preprocesare
Mai întâi luăm datele Mnist din tf.keras.dataset și facem o mică preprocesare
.Nomalize: comprimă valorile între 0 și 1, formarea va fi mai ușor de convergent
Binarizare: evidențiază zonele mai evidente, formarea va da rezultate mai bune.
Create a Model – Vallina_AE:
Aceasta este metoda furnizată de Documentul Tensorflow pentru crearea de modele.mai complexe.
Ceea ce am învățat până acum este să creez stratul în locul __init __ și să definesc trecerea înainte în apel.
Așadar, folosim două modele secvențiale pentru a crea codificatorul & decodificatorul. două sunt o structură simetrică, codificatorul este conectat la stratul de intrare care este responsabil pentru transportul datelor de intrare și apoi la cele trei straturi dense. decodificatorul este la fel.
Din nou, în cadrul apelului, trebuie să concatenăm codificatorul & decodificatorul, definind mai întâi spațiul latent ca ieșire a lui self.encoder
.ca ieșire a self.encoder
și apoi reconstrucția ca rezultat al trecerii decodorului.Apoi folosim tf.keras.Model()
pentru a conecta cele două modele pe care le-am definit în __init__
.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
specifică intrarea ca intrare a codificatorului și ieșirea ca ieșire a decodificatorului, și asta e tot!Apoi returnăm AE_model și ați terminat!
Model Compile & training
Înainte ca Keras să poată antrena un model, acesta trebuie să fie compilat înainte de a putea fi introdus în training.În compilare, specificați optimizatorul pe care doriți să îl utilizați și pierderea pe care doriți să o calculați.
Pentru instruire utilizați VallinaAE.fit
pentru a introduce datele, dar nu uitați că ne restabilim, deci X și Y trebuie să fie aruncate în aceleași date.
Să aruncăm o privire la rezultatele antrenamentului de 100 de epoci, se pare că rezultatele reconstrucției nu sunt atât de bune pe cât am crezut.

4-2. Crearea unui model- Conv_AE:
După cum sugerează și numele, putem folosi stratul de convoluție ca un strat ascuns pentru a învăța caracteristici care pot fi reconstruite înapoi.
După schimbarea modelului, puteți arunca o privire la rezultate pentru a vedea dacă există vreo îmbunătățire.

Se pare că rezultatele Reconstrucției sunt mult mai bune, cu aproximativ 10 epoci de antrenament.
4-3. Crearea unui model – denoise_AE:
De asemenea, autocodificatorul poate fi folosit pentru eliminarea zgomotului, așa că aici vom
În primul rând, putem adăuga zgomot la imaginea originală. Logica adăugării zgomotului este de a face o simplă deplasare a pixelului original și apoi de a adăuga numere aleatoare.Partea de preprocesare a imaginii poate fi realizată prin simpla transformare a clipului în 0 dacă este mai mic decât 0 și în 1 dacă este mai mare decât 1. După cum se arată mai jos, după procesarea imaginii clipului, putem face imaginea mai clară și zonele evidente mai vizibile.Acest lucru ne oferă un rezultat mai bun atunci când adăugăm Autoencoder.

și modelul propriu-zis și Conv_AENu există nicio diferență între modelul propriu-zis și Conv_AE, cu excepția faptului că, în timpul ajustării, acesta trebuie schimbat în
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
pentru a restabili datele de zgomot originale la datele de intrare originale

.
După cum puteți vedea, pe Mnist, un simplu Autoencoder obține un efect de denotație foarte rapid.
Exemple grozave
Aceasta este o resursă bună pentru cei interesați să învețe mai multe despre asta
- Seria Building Autoencoders in Keras autoencoder este scrisă clar.
- Tensorflow 2.0 tutorial de documentație oficială, ceva foarte complet, doar scrie un pic dificil, pentru a petrece destul de mult timp pentru a vedea (cel puțin eu trag XD)
3. Li Hongyi profesor de învățare profundă este, de asemenea, foarte recomandat, vorbesc foarte clar și ușor de înțeles, non-
Concluzie
Utilizați acest articol pentru a stabili rapid conceptul de bază al Autocodificatorului, unele variații ale Autocodificatorului și aplicarea acestuia.scenarii.4310>
Următoarele articole vor începe cu modelele generative, extinzându-se de la conceptul de autocodificator, VAE, la GAN, și alte extensii și transformări pe parcurs.
Dacă vă place articolul, vă rog să mai bateți câteva palme (nu doar o dată) ca o încurajare!
Citește codul complet pentru acest articol:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Lasă un răspuns