|
|
||
|---|---|---|
| .. | ||
| AutoEncodersPyTorch.ipynb | ||
| AutoencodersTF.ipynb | ||
| README.md | ||
README.md
Autoencodere
Når man træner CNN'er, er en af udfordringerne, at vi har brug for en stor mængde mærkede data. I tilfælde af billedklassifikation skal vi adskille billeder i forskellige klasser, hvilket kræver manuel indsats.
Pre-lecture quiz
Vi kan dog ønske at bruge rå (umærkede) data til at træne CNN-featureekstraktorer, hvilket kaldes selv-supervised learning. I stedet for labels bruger vi træningsbilleder som både netværksinput og output. Hovedideen med en autoencoder er, at vi har et encoder-netværk, der konverterer inputbilledet til et latent rum (normalt er det blot en vektor af mindre størrelse), og derefter et decoder-netværk, hvis mål er at rekonstruere det originale billede.
✅ En autoencoder er "en type kunstigt neuralt netværk, der bruges til at lære effektive kodninger af umærkede data."
Da vi træner en autoencoder til at fange så meget information som muligt fra det originale billede for en præcis rekonstruktion, forsøger netværket at finde den bedste embedding af inputbilleder for at fange meningen.
Billede fra Keras blog
Scenarier for brug af Autoencodere
Selvom rekonstruktion af originale billeder ikke virker nyttigt i sig selv, er der nogle scenarier, hvor autoencodere er særligt nyttige:
- Reducering af billeddimensioner til visualisering eller træning af billede-embeddings. Autoencodere giver normalt bedre resultater end PCA, fordi de tager højde for billedernes rumlige natur og hierarkiske features.
- Denoising, dvs. fjernelse af støj fra billedet. Da støj indeholder en masse unyttig information, kan autoencoderen ikke passe det hele ind i det relativt lille latente rum og fanger derfor kun den vigtige del af billedet. Når vi træner støjfjernerne, starter vi med originale billeder og bruger billeder med kunstigt tilføjet støj som input til autoencoderen.
- Super-resolution, øgning af billedopløsning. Vi starter med billeder i høj opløsning og bruger billeder med lavere opløsning som autoencoderens input.
- Generative modeller. Når vi har trænet autoencoderen, kan decoder-delen bruges til at skabe nye objekter ud fra tilfældige latente vektorer.
Variationsautoencodere (VAE)
Traditionelle autoencodere reducerer dimensionen af inputdata på en eller anden måde og finder de vigtige features i inputbillederne. Dog giver latente vektorer ofte ikke meget mening. Med andre ord, hvis vi tager MNIST-datasættet som eksempel, er det ikke nemt at finde ud af, hvilke cifre der svarer til forskellige latente vektorer, fordi nærliggende latente vektorer ikke nødvendigvis svarer til de samme cifre.
På den anden side er det bedre at have en forståelse af det latente rum, når man træner generative modeller. Denne idé fører os til variationsautoencoder (VAE).
VAE er en autoencoder, der lærer at forudsige statistisk fordeling af de latente parametre, det såkaldte latente fordeling. For eksempel kan vi ønske, at latente vektorer er normalt fordelt med en middelværdi zmean og standardafvigelse zsigma (både middelværdi og standardafvigelse er vektorer med en vis dimensionalitet d). Encoderen i VAE lærer at forudsige disse parametre, og derefter tager decoderen en tilfældig vektor fra denne fordeling for at rekonstruere objektet.
For at opsummere:
- Fra inputvektoren forudsiger vi
z_meanogz_log_sigma(i stedet for at forudsige selve standardafvigelsen, forudsiger vi dens logaritme) - Vi sampler en vektor
samplefra fordelingen N(zmean,exp(zlog_sigma)) - Decoderen forsøger at dekode det originale billede ved hjælp af
samplesom inputvektor
Billede fra denne blogpost af Isaak Dykeman
Variationsautoencodere bruger en kompleks tabfunktion, der består af to dele:
- Rekonstruktionstab er tabfunktionen, der viser, hvor tæt et rekonstrueret billede er på målet (det kan være Mean Squared Error, eller MSE). Det er den samme tabfunktion som i normale autoencodere.
- KL-tab, som sikrer, at den latente variabels fordeling forbliver tæt på normalfordelingen. Det er baseret på begrebet Kullback-Leibler divergence - en metrik til at estimere, hvor ens to statistiske fordelinger er.
En vigtig fordel ved VAE'er er, at de gør det relativt nemt at generere nye billeder, fordi vi ved, hvilken fordeling vi skal sample latente vektorer fra. For eksempel, hvis vi træner VAE med en 2D latent vektor på MNIST, kan vi derefter variere komponenterne i den latente vektor for at få forskellige cifre:
Billede af Dmitry Soshnikov
Bemærk, hvordan billederne smelter sammen, når vi begynder at få latente vektorer fra forskellige dele af det latente parameter-rum. Vi kan også visualisere dette rum i 2D:
Billede af Dmitry Soshnikov
✍️ Øvelser: Autoencodere
Lær mere om autoencodere i disse tilhørende notebooks:
Egenskaber ved Autoencodere
- Dataspecifikke - de fungerer kun godt med den type billeder, de er blevet trænet på. For eksempel, hvis vi træner et super-resolution-netværk på blomster, vil det ikke fungere godt på portrætter. Dette skyldes, at netværket kan producere billeder i højere opløsning ved at tage fine detaljer fra features, der er lært fra træningsdatasættet.
- Tabsgivende - det rekonstruerede billede er ikke det samme som det originale billede. Naturen af tabet defineres af den tabfunktion, der bruges under træningen.
- Fungerer på umærkede data
Post-lecture quiz
Konklusion
I denne lektion lærte du om de forskellige typer autoencodere, der er tilgængelige for AI-forskeren. Du lærte, hvordan man bygger dem, og hvordan man bruger dem til at rekonstruere billeder. Du lærte også om VAE og hvordan man bruger det til at generere nye billeder.
🚀 Udfordring
I denne lektion lærte du om brugen af autoencodere til billeder. Men de kan også bruges til musik! Tjek Magenta-projektets MusicVAE projekt, som bruger autoencodere til at lære at rekonstruere musik. Lav nogle eksperimenter med dette bibliotek for at se, hvad du kan skabe.
Post-lecture quiz
Gennemgang & Selvstudie
For reference, læs mere om autoencodere i disse ressourcer:
- Building Autoencoders in Keras
- Blogpost på NeuroHive
- Variational Autoencoders Explained
- Conditional Variational Autoencoders
Opgave
I slutningen af denne notebook med TensorFlow finder du en 'opgave' - brug denne som din opgave.
Ansvarsfraskrivelse:
Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse.
