AI-For-Beginners/translations/sv/lessons/4-ComputerVision/09-Autoencoders/README.md

8.6 KiB

Autoencoders

När man tränar CNNs är ett av problemen att vi behöver mycket märkt data. När det gäller bildklassificering måste vi dela upp bilder i olika klasser, vilket är en manuell process.

Pre-lecture quiz

Men vi kanske vill använda rå (omärkt) data för att träna CNN-funktionsextraktorer, vilket kallas självövervakad inlärning. Istället för etiketter använder vi träningsbilder som både nätverksinmatning och -utmatning. Huvudidén med autoencoder är att vi har ett encoder-nätverk som omvandlar inmatningsbilden till ett latent utrymme (vanligtvis bara en vektor av mindre storlek), och sedan ett decoder-nätverk, vars mål är att rekonstruera den ursprungliga bilden.

En autoencoder är "en typ av artificiellt neuralt nätverk som används för att lära sig effektiva kodningar av omärkt data."

Eftersom vi tränar en autoencoder för att fånga så mycket information som möjligt från den ursprungliga bilden för en korrekt rekonstruktion, försöker nätverket hitta den bästa inbäddningen av inmatningsbilder för att fånga dess innebörd.

AutoEncoder Diagram

Bild från Keras blog

Scenarier för att använda Autoencoders

Även om det inte verkar användbart i sig att rekonstruera ursprungliga bilder, finns det några scenarier där autoencoders är särskilt användbara:

  • Minska dimensionen på bilder för visualisering eller träna bildinbäddningar. Autoencoders ger vanligtvis bättre resultat än PCA eftersom de tar hänsyn till bilders rumsliga natur och hierarkiska funktioner.
  • Avlägsna brus, dvs. ta bort brus från bilden. Eftersom brus innehåller mycket onödig information kan autoencodern inte passa allt i det relativt lilla latenta utrymmet och fångar därför bara den viktiga delen av bilden. När vi tränar brusreducerare börjar vi med ursprungliga bilder och använder bilder med artificiellt tillagt brus som inmatning för autoencodern.
  • Superupplösning, öka bildens upplösning. Vi börjar med högupplösta bilder och använder bilden med lägre upplösning som autoencoderns inmatning.
  • Generativa modeller. När vi har tränat autoencodern kan den dekoderande delen användas för att skapa nya objekt från slumpmässiga latenta vektorer.

Variationsautoencoders (VAE)

Traditionella autoencoders reducerar dimensionen på inmatningsdata på något sätt och identifierar viktiga funktioner i inmatningsbilder. Men latenta vektorer är ofta svåra att tolka. Med andra ord, om vi tar MNIST-datasetet som exempel, är det inte lätt att avgöra vilka siffror som motsvarar olika latenta vektorer, eftersom närliggande latenta vektorer inte nödvändigtvis motsvarar samma siffror.

För att träna generativa modeller är det däremot bättre att ha en förståelse för det latenta utrymmet. Denna idé leder oss till variationsautoencoder (VAE).

VAE är en autoencoder som lär sig att förutsäga statistisk fördelning av de latenta parametrarna, den så kallade latenta fördelningen. Till exempel kanske vi vill att latenta vektorer ska vara normalt fördelade med en viss medelvärde zmean och standardavvikelse zsigma (både medelvärde och standardavvikelse är vektorer med en viss dimension d). Encoder i VAE lär sig att förutsäga dessa parametrar, och sedan tar dekodern en slumpmässig vektor från denna fördelning för att rekonstruera objektet.

Sammanfattningsvis:

  • Från inmatningsvektorn förutsäger vi z_mean och z_log_sigma (istället för att förutsäga standardavvikelsen direkt förutsäger vi dess logaritm)
  • Vi samplar en vektor sample från fördelningen N(zmean,exp(zlog_sigma))
  • Dekodern försöker dekoda den ursprungliga bilden med sample som inmatningsvektor

Bild från denna blogpost av Isaak Dykeman

Variationsautoencoders använder en komplex förlustfunktion som består av två delar:

  • Rekonstruktionsförlust är förlustfunktionen som visar hur nära en rekonstruerad bild är målet (det kan vara Mean Squared Error, eller MSE). Det är samma förlustfunktion som i vanliga autoencoders.
  • KL-förlust, som säkerställer att latenta variabelns fördelning förblir nära normalfördelning. Den baseras på begreppet Kullback-Leibler divergence - en metrik för att uppskatta hur lika två statistiska fördelningar är.

En viktig fördel med VAE är att de gör det relativt enkelt att generera nya bilder, eftersom vi vet vilken fördelning vi ska sampla latenta vektorer från. Till exempel, om vi tränar VAE med en 2D latent vektor på MNIST, kan vi sedan variera komponenterna i den latenta vektorn för att få olika siffror:

vaemnist

Bild av Dmitry Soshnikov

Observera hur bilderna smälter samman när vi börjar sampla latenta vektorer från olika delar av det latenta parameterutrymmet. Vi kan också visualisera detta utrymme i 2D:

vaemnist cluster

Bild av Dmitry Soshnikov

✍️ Övningar: Autoencoders

Lär dig mer om autoencoders i dessa motsvarande notebooks:

Egenskaper hos Autoencoders

  • Dataspecifika - de fungerar bara bra med den typ av bilder de har tränats på. Till exempel, om vi tränar ett nätverk för superupplösning på blommor, kommer det inte att fungera bra på porträtt. Detta beror på att nätverket kan producera högupplösta bilder genom att ta fina detaljer från funktioner som lärts från träningsdatasetet.
  • Förlustfyllda - den rekonstruerade bilden är inte densamma som den ursprungliga bilden. Förlustens natur definieras av den förlustfunktion som används under träningen.
  • Fungerar på omärkt data

Post-lecture quiz

Slutsats

I denna lektion lärde du dig om de olika typerna av autoencoders som finns tillgängliga för AI-forskaren. Du lärde dig hur man bygger dem och hur man använder dem för att rekonstruera bilder. Du lärde dig också om VAE och hur man använder det för att generera nya bilder.

🚀 Utmaning

I denna lektion lärde du dig om att använda autoencoders för bilder. Men de kan också användas för musik! Kolla in Magenta-projektets MusicVAE-projekt, som använder autoencoders för att lära sig rekonstruera musik. Gör några experiment med detta bibliotek för att se vad du kan skapa.

Post-lecture quiz

Granskning & Självstudier

För referens, läs mer om autoencoders i dessa resurser:

Uppgift

I slutet av denna notebook med TensorFlow hittar du en 'uppgift' - använd detta som din uppgift.


Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen notera att automatiska översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på sitt originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.