Hvad er autoenkodere?
On november 11, 2021 by adminEn let introduktion til autoenkodere og deres forskellige anvendelser. Disse tutorials bruger også tf.keras,TensorFlows Python API på højt niveau til opbygning og træning af deep learning-modeller.
常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 用。
- Hvad er Autoencoder
- Typer af Autoencoder
- Anvendelse af Autoencoder
- Implementering
- Gode eksempler
- Konklusion
Sværhedsgrad: ★ ★ ☆ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Hvad er Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧!
Det oprindelige koncept for Autoencoder er meget simpelt, idet det går ud på at indtaste inputdata og få nøjagtig de samme data som inputdataene gennem et neuralt netværk.Encoderen modtager først inputdataene, komprimerer dem til en mindre dimensionel vektor Z og indsender derefter Z til dekoderen for at gendanne Z til den oprindelige størrelse.Det lyder nemt, men lad os se nærmere på det og se, om det er så nemt.
Encoder:
Encoder er ansvarlig for at komprimere de oprindelige inputdata til en lavdimensional vektor C. Denne C, som vi normalt kalder kode, latent vektor eller featurevektor, men jeg er vant til at kalde den latent rum, fordi C repræsenterer en skjult feature.Encoder kan komprimere de oprindelige data til en meningsfuld lavdimensional vektor, hvilket betyder, at Autoencoder har dimensionalitetsreduktion, og det skjulte lag har ikke-lineær transformationsaktiveringsfunktion, så denne Encoder er som en kraftfuld version af PCA, fordi Encoder kan lave ikke-lineærdimensionsreduktion!
Decoder:
Det, Decoder gør, er at genskabe latent rum tilbage til inputdataene så meget som muligt, hvilket er en transformation af funktionsvektorerne fra det lavere dimensionelle rum til det højere dimensionelle rum.
Så hvordan måler du, hvor godt Autoencoder fungerer ! Simpelthen ved at sammenligne ligheden mellem de to oprindelige inputdata og de rekonstruerede data.Så vores tabsfunktion kan skrives som ….
Tabsfunktion:
Fordi vi ønsker at minimere forskellen mellem denAutoEncoder trænes ved hjælp af backpropagation til at opdatere vægtene, ligesom et normalt neuralt netværk.opdatere vægtene.
Sammenfattende kan man sige, at Autoencoder er ….
1. En meget almindelig modelarkitektur, der også ofte anvendes til uovervåget indlæring
2. Kan anvendes som en metode til dimensionsreduktion for ikke-lineære
3. Kan anvendes til at lære datarepræsentation med repræsentative funktionstransformationer.
På dette tidspunkt burde det være let at forstå, hvordan Autoencoder er, arkitekturen er meget enkel, så lad os se på dens transformationer!
Typer af Autoencoder
Efter at have forklaret de grundlæggende principper for AutoEncoder er det tid til at se på den udvidede og avancerede anvendelse af Autoencoder, så du kan se den omfattende anvendelse af Autoencoder!
2-1. Unet:
Unet kan anvendes som et af midlerne til segmentering af billeder, og Unet-arkitekturen kan ses som en variant af Autoencoder.
2-2. Rekursive autoenkodere:
Dette er et netværk, der kombinerer ny indgangstekst med latent plads fra andre indgange, og formålet med dette netværk er klassificering af følelser.Dette kan også ses som en variant af Autoencoder, som uddrager den sparsomme tekst, mens den skrives, og finder det latente rum, der er vigtigt.
2-Seq2Seq:
Sequence to Sequence er en generativ model, der har været meget populær i et stykke tid nu. Det er en vidunderlig løsning på dilemmaet med RNN-typer, der ikke kan håndtere ubestemte pardannelser, og den har klaret sig godt på emner som chatbot- og tekstgenerering.Dette kan også ses som en slags Autoencoder-arkitektur.
Anvendelser af autokoder
Efter at have set på de mange og varierede variationer af Autoencoder, lad os se, hvor Autoencoder ellers kan bruges!
3-1. Model pretrained weight
Autoencoder kan også bruges til pretrain af vægt, hvilket betyder, at modellen finder en bedre startværdi.For eksempel, når vi ønsker at fuldføre målmodellen som mål. skjult lag er:, så i begyndelsen bruger vi begrebet autoencoder til at indtaste 784 dimensioner, og det latente rum i midten er 1000 dimensioner for at gøre pretrain først, så disse 1000 dimensioner kan godt bevare inputDerefter fjerner vi det oprindelige output og tilføjer det andet lag og så videre.På denne måde vil hele modellen få en bedre startværdi.
Huh! Der er en mærkelig del… hvis du bruger 1000 neuroner til at repræsentere 784 inputdimensioner, betyder det så ikke, at netværket bare skal kopieres forfra? Hvad er meningen med at træne? Ja, det er derfor, at vi i en pre-train som denne normalt tilføjer L1-normregulatoren, så det skjulte lag ikke kopieres igen og igen.
3-3. Video til tekst
For et billedtekstproblem som dette bruger vi sekvens til sekvens-modellen, hvor inputdataene er en række fotos, og output er en tekst, der beskriver billederne.Sekvens til sekvens-modellen anvender LSTM + Conv-net som koder & dekoder, som kan beskrive en sekvens af sekventielle handlinger & ved hjælp af CNN-kernen til at udtrække det latente rum, der kræves i billedet.men denne opgave er meget svær at udføre, så jeg vil lade dig prøve det, hvis du er interesseret!
3-4. Billedsøgning
Billedsøgning Det man skal gøre er at indtaste et billede og forsøge at finde det nærmeste match, men hvis man sammenligner pixelvis, så er det virkelig nemt atHvis du bruger Autoencoder til først at komprimere billedet til latent rum og derefter beregne ligheden i billedets latente rum, vil resultatet blive meget bedre.Resultatet er meget bedre, fordi hver dimension i det latente rum kan repræsentere en bestemt egenskab.Hvis afstanden beregnes på det latente rum, er det rimeligt at finde lignende billeder.Dette ville især være en fantastisk måde at lære uden vejledning på, uden mærkning af data!
Her erPapiret af Georey E. Hinton, den berømte Deep Learning-gud, viser den graf, du ønsker at søge efter, i øverste venstre hjørne, mens de andre grafer er alle grafer, som autoenkoderen mener er meget ens.7133>
indholdsbaseretImage Retrieval
3-5. Anomaly Detection
Kan ikke finde et godt billede, så jeg måtte bruge det her LOL
Finding af anomalier er også et super almindeligt fremstillingsproblem, så dette problem kan også forsøges med AutoencoderVi kan prøve det med Autoencoder!Lad os først og fremmest tale om den faktiske forekomst af anomalier. Anomalier forekommer normalt meget sjældent, f.eks. unormale signaler i maskinen, pludselige temperaturspidser …… osv…Dette sker en gang om måneden (hvis der er flere, bør maskinen tvinges på pension). Hvis der indsamles data hvert 10. sekund, vil der blive indsamlet 260.000 data hver måned, men kun én periode er anomalier, hvilket faktisk er en meget ubalanceret mængde data.
Så den bedste måde at håndtere denne situation på er at gå efter de originale data, som trods alt er den største mængde data, vi har!Hvis vi kan tage de gode data og træne en god autoenkoder, så vil den rekonstruerede grafik naturligvis bryde sammen, hvis der kommer anomalier ind.Det var sådan vi startede ideen om at bruge autoencoder til at finde anomalier!
Implementation
Her bruger vi Mnist som et legetøjseksempel og implementerer en Autoencoder ved hjælp af Tensorflow.keras high-level API’en! Da den nye pakke til tf.keras blev frigivet for kort tid siden, øver vi os i at bruge Model subclassing-metoden i filen
4-1. Opret en model – Vallina_AE:
Først skal du importere tensorflow!7133>
Brugen af tf.keras er så enkel som det, du skal bare skrive tf.keras!(Jeg ved ikke, hvad jeg taler om lol)
Lad data & model preprocess
Først tager vi Mnist-dataene fra tf.keras.dataset og laver en lille preprocess
Nomalize: komprimerer værdierne til mellem 0 og 1, træning vil være lettere at konvergere
Binarization: fremhæver de mere tydelige områder, træning vil give bedre resultater.
Skab en model – Vallina_AE:
Dette er den metode, som Tensorflow-dokumentet indeholder til at oprette modeller.mere komplekse.
Det, jeg har lært indtil videre, er at oprette laget i __init __ og definere forwardpasset i opkaldet.
Så vi bruger to sekventielle modeller til at skabe Encoder & decoder. to er en symmetrisk struktur, encoderen er forbundet til inputlaget, som er ansvarlig for at bære inputdataene, og derefter til de tre tætte lag. decoderen er den samme.
Igen skal vi under opkaldet sammenkæde enkoder & dekoder, idet vi først definerer det latente rum som output af self.encoder
.rum som output af self.encoder
, og derefter rekonstruktionen som resultatet af at passere dekoderen.Vi bruger derefter tf.keras.Model()
til at forbinde de to modeller, som vi definerede i __init__
.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
angiver input som input til enkoderen og output som output til dekoderen, og det er det hele!Derefter returnerer vi AE_model, og så er du færdig!
Modelkompilering & træning
Før Keras kan træne en model, skal den kompileres, før den kan indsættes i træningen.I kompileringen angiver du den optimizer, du vil bruge, og det tab, du vil beregne.
Til træning skal du bruge VallinaAE.fit
til at indlæse dataene, men husk, at vi gendanner os selv, så X og Y skal smides i de samme data.
Lad os se på resultaterne af træning af 100 epoker, og det ser ud til, at rekonstruktionsresultaterne ikke er så gode, som vi troede.
4-2. Opret en model- Conv_AE:
Som navnet antyder, kan vi bruge konvolutionslaget som et skjult lag til at lære funktioner, der kan rekonstrueres tilbage.
Når du har ændret modellen, kan du kigge på resultaterne for at se, om der er sket en forbedring.
Det ser ud til, at resultaterne af Rekonstruktion er meget bedre, med ca. 10 epokers træning.
4-3. Opret en model – denoise_AE:
Autoenkoderen kan også bruges til at fjerne støj, så her skal vi
Først kan vi tilføje støj til det originale billede. Logikken i at tilføje støj er at foretage et simpelt skift på den originale pixel og derefter tilføje tilfældige tal.Forbehandlingen af billedet kan gøres ved blot at gøre klippet 0, hvis det er mindre end 0, og 1, hvis det er større end 1. Som vist nedenfor kan vi efter billedbehandlingen af klippet gøre billedet skarpere og de tydelige områder mere synlige.Dette giver os et bedre resultat, når vi bruger Autoencoder.
og selve modellen og Conv_AEDer er ingen forskel på selve modellen og Conv_AE, bortset fra at den under tilpasningen skal ændres til
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
for at gendanne de oprindelige noise_data til de oprindelige inputdata
Som du kan se, opnår en simpel Autoencoder på Mnist en meget hurtig denoising-effekt.
Gode eksempler
Dette er en god ressource for dem, der er interesseret i at lære mere om det
- Building Autoencoders in Keras autoencoder-serien er klart og tydeligt skrevet.
- Tensorflow 2.0 officielle dokumentation tutorial, noget meget komplet, bare skrive lidt svært, at bruge en hel del tid til at se (i det mindste jeg trække XD)
3. Li Hongyi lærer af dyb læring er også meget anbefalet, taler meget klart og let at forstå, ikke
Slutning
Brug denne artikel til hurtigt at etablere det grundlæggende koncept for Autoencoder, nogle variationer af Autoencoder og anvendelsen afscenarier.4310>
De næste par artikler vil starte med generative modeller, der strækker sig fra begrebet autoencoder, VAE, til GAN og yderligere udvidelser og forandringer undervejs.
Hvis du kan lide artiklen, bedes du klikke et par klapsalver mere (ikke kun én gang) som en opmuntring!
Læs den fulde kode for denne artikel:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Skriv et svar