AI 101
Wat is een Autoencoder?

Als je eerder over ongesuperviseerde leertechnieken hebt gelezen, ben je misschien de term “autoencoder” tegengekomen. Autoencoders zijn een van de primaire manieren waarop ongesuperviseerde leermodellen worden ontwikkeld. Maar wat is een autoencoder precies?
Kort gezegd, autoencoders werken door gegevens in te voeren, deze te comprimeren en te coderen, en vervolgens de gegevens te reconstrueren vanuit de gecodeerde weergave. Het model wordt getraind totdat de verlies wordt geminimaliseerd en de gegevens zo nauwkeurig mogelijk worden gereproduceerd. Door dit proces kan een autoencoder de belangrijke kenmerken van de gegevens leren. Hoewel dit een snelle definitie van een autoencoder is, zou het nuttig zijn om een nauwere blik op autoencoders te werpen en een beter begrip te krijgen van hoe ze functioneren. Dit artikel zal proberen autoencoders te demystificeren, door de architectuur van autoencoders en hun toepassingen uit te leggen.
Wat is een Autoencoder?
Autoencoders zijn neurale netwerken. Neurale netwerken bestaan uit meerdere lagen, en het kenmerkende aspect van een autoencoder is dat de invoerlagen precies evenveel informatie bevatten als de uitvoerlaag. De reden dat de invoerlaag en de uitvoerlaag hetzelfde aantal eenheden hebben, is dat een autoencoder ernaar streeft de invoergegevens te repliceren. Het produceert een kopie van de gegevens na ze te hebben geanalyseerd en te hebben gereconstrueerd op een ongesuperviseerde manier.
De gegevens die door een autoencoder gaan, worden niet rechtstreeks van invoer naar uitvoer gemapt, wat betekent dat het netwerk de invoergegevens niet gewoon kopieert. Er zijn drie componenten in een autoencoder: een coderings- (invoer-) deel dat de gegevens comprimeert, een component die de gecomprimeerde gegevens (of flessenhals) behandelt, en een decoderings- (uitvoer-) deel. Wanneer gegevens in een autoencoder worden ingevoerd, worden ze gecodeerd en vervolgens gecomprimeerd tot een kleinere grootte. Het netwerk wordt vervolgens getraind op de gecodeerde/gecomprimeerde gegevens en produceert een reconstructie van die gegevens.
Waarom zou je een netwerk willen trainen om alleen de gegevens te reconstrueren die aan het netwerk worden gegeven? De reden is dat het netwerk de “essentie” of de meest belangrijke kenmerken van de invoergegevens leert. Nadat je het netwerk hebt getraind, kan een model worden gemaakt dat soortgelijke gegevens kan synthetiseren, met de toevoeging of subtractie van bepaalde doelkenmerken. Bijvoorbeeld, je kon een autoencoder trainen op korrelige afbeeldingen en vervolgens het getrainde model gebruiken om de korrel/ruis van de afbeelding te verwijderen.
Autoencoder Architectuur
Laten we naar de architectuur van een autoencoder kijken. We zullen de hoofdarchitectuur van een autoencoder hier bespreken. Er zijn variaties op deze algemene architectuur die we in het onderstaande gedeelte zullen bespreken.

Foto: Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)
Zoals eerder vermeld, kan een autoencoder in wezen worden onderverdeeld in drie verschillende componenten: de encoder, een flessenhals en de decoder.
Het encoderdeel van de autoencoder is meestal een feedforward, dicht verbonden netwerk. Het doel van de coderingslagen is om de invoergegevens te nemen en ze te comprimeren tot een latent ruimte-weergave, waardoor een nieuwe weergave van de gegevens wordt gegenereerd met een verlaagde dimensionaliteit.
De codeerlagen, of de flessenhals, behandelen de gecomprimeerde weergave van de gegevens. De flessenhalscode is zorgvuldig ontworpen om de meest relevante delen van de waargenomen gegevens te bepalen, of om het anders te zeggen, de kenmerken van de gegevens die het meest belangrijk zijn voor gegevensreconstructie. Het doel is hier om te bepalen welke aspecten van de gegevens moeten worden behouden en welke kunnen worden verworpen. De flessenhalscode moet twee verschillende overwegingen in evenwicht brengen: weergavegrootte (hoe compact de weergave is) en variabele/kenmerkrelevantie. De flessenhals voert elementwijze activatie uit op de gewichten en biases van het netwerk. De flessenhalslaag wordt soms ook een latent representatie of latent variabelen genoemd.
Het decoderingslaag is verantwoordelijk voor het nemen van de gecomprimeerde gegevens en het omzetten ervan in een weergave met dezelfde dimensies als de oorspronkelijke, ongewijzigde gegevens. De omzetting wordt gedaan met de latent ruimte-weergave die door de encoder is gegenereerd.
De meest basale architectuur van een autoencoder is een feed-forward-architectuur, met een structuur die veel lijkt op een enkele laag perceptron die in multilaagse perceptoren wordt gebruikt. Net als reguliere feed-forward neurale netwerken, wordt de auto-encoder getraind met behulp van backpropagation.
Kenmerken van een Autoencoder
Er zijn verschillende soorten autoencoders, maar ze hebben allemaal bepaalde eigenschappen die hen verbinden.
Autoencoders leren automatisch. Ze hebben geen labels nodig, en als ze voldoende gegevens krijgen, is het gemakkelijk om een autoencoder te laten presteren op een specifiek type invoergegevens.
Autoencoders zijn gegevensspecifiek. Dit betekent dat ze alleen gegevens kunnen comprimeren die sterk lijken op gegevens waarop de autoencoder eerder is getraind. Autoencoders zijn ook verliesgevoelig, wat betekent dat de uitvoer van het model zal zijn verzwakt in vergelijking met de invoergegevens.
Bij het ontwerpen van een autoencoder, moeten machine learning-engineers letten op vier verschillende modelhyperparameters: codegrootte, lagenaantal, knooppunten per laag en verliesfunctie.
De codegrootte bepaalt hoeveel knooppunten beginnen in het middelste deel van het netwerk, en minder knooppunten comprimeren de gegevens meer. In een diepe autoencoder, terwijl het aantal lagen elk aantal kan zijn dat de engineer passend acht, zou het aantal knooppunten in een laag moeten afnemen naarmate de encoder vordert. Integendeel, het aantal knooppunten per laag zou moeten toenemen naarmate de decoderlagen de laatste laag naderen. Ten slotte is de verliesfunctie van een autoencoder meestal binaire cross-entropie of gemiddelde kwadratische fout. Binaire cross-entropie is geschikt voor gevallen waarin de invoerwaarden van de gegevens in een bereik van 0 – 1 liggen.
Autoencoder Typen
Zoals hierboven vermeld, bestaan er variaties op de klassieke autoencoder-architectuur. Laten we de verschillende autoencoder-architecturen onderzoeken.
Sparse

Foto: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)
Terwijl autoencoders meestal een flessenhals hebben die de gegevens comprimeert door een reductie van knooppunten, zijn sparse autoencoders een alternatief voor deze typische operationele indeling. In een sparse netwerk blijven de verborgen lagen dezelfde grootte hebben als de encoder- en decoderlagen. In plaats daarvan worden de activaties binnen een bepaalde laag gestraft, waardoor de verliesfunctie de statistische kenmerken van de invoergegevens beter kan vastleggen. Om het anders te zeggen, terwijl de verborgen lagen van een sparse autoencoder meer eenheden hebben dan een traditionele autoencoder, zijn alleen een bepaald percentage ervan op elk moment actief. De meest impactvolle activatiefuncties worden behouden en andere worden genegeerd, en deze beperking helpt het netwerk om alleen de meest relevante kenmerken van de invoergegevens te bepalen.
Contractive
Contractive autoencoders zijn ontworpen om bestand te zijn tegen kleine variaties in de gegevens, waardoor een consistente weergave van de gegevens wordt behouden. Dit wordt bereikt door een straf toe te passen op de verliesfunctie. Deze regularisatietechniek is gebaseerd op de Frobenius-norm van de Jacobiaanmatrix voor de invoerencoder-activaties. Het effect van deze regularisatietechniek is dat het model wordt gedwongen om een codering te construeren waarin vergelijkbare invoer vergelijkbare coderingen zullen hebben.
Convolutional
Convolutional autoencoders coderen invoergegevens door de gegevens op te delen in subsections en vervolgens deze subsections om te zetten in eenvoudige signalen die worden opgeteld om een nieuwe weergave van de gegevens te creëren. Net als convolutionele neurale netwerken, is een convolutional autoencoder gespecialiseerd in het leren van beeldgegevens en gebruikt het een filter die over het hele beeld wordt bewogen, sectie voor sectie. De coderingen gegenereerd door de coderingslaag kunnen worden gebruikt om het beeld te reconstrueren, te reflecteren of de geometrie van het beeld te wijzigen. Zodra de filters zijn geleerd door het netwerk, kunnen ze worden gebruikt op elk voldoende soortgelijk invoer om de kenmerken van het beeld te extraheren.
Denoising

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Denoising autoencoders introduceren ruis in de codering, waardoor een codering ontstaat die een gecorrumpeerde versie is van de oorspronkelijke invoergegevens. Deze gecorrumpeerde versie van de gegevens wordt gebruikt om het model te trainen, maar de verliesfunctie vergelijkt de uitvoerwaarden met de oorspronkelijke invoer en niet met de gecorrumpeerde invoer. Het doel is dat het netwerk in staat zal zijn om de oorspronkelijke, ongecorrumpeerde versie van de afbeelding te reproduceren. Door de gecorrumpeerde gegevens te vergelijken met de oorspronkelijke gegevens, leert het netwerk welke kenmerken van de gegevens het meest belangrijk zijn en welke kenmerken onbelangrijk/corrupties zijn. Met andere woorden, om een model te kunnen denoiseren, moet het de belangrijke kenmerken van de beeldgegevens hebben geëxtraheerd.
Variational
Variational autoencoders werken door aannamen te doen over de manier waarop de latent variabelen van de gegevens zijn verdeeld. Een variational autoencoder produceert een waarschijnlijkheidsverdeling voor de verschillende kenmerken van de trainingsafbeeldingen/de latent attributen. Tijdens het trainen, creëert de encoder latent verdelingen voor de verschillende kenmerken van de invoerafbeeldingen.

Wanneer het netwerk wordt getraind, wordt de gecodeerde gegevens geanalyseerd en produceert het herkenningmodel twee vectoren, die de mediaan en standaarddeviatie van de afbeeldingen trekken. Een verdeling wordt gemaakt op basis van deze waarden. Dit wordt gedaan voor de verschillende latent toestanden. De decoder neemt vervolgens willekeurige monsters van de overeenkomstige verdeling en gebruikt ze om de initiële invoer van het netwerk te reconstrueren.
Autoencoder Toepassingen
Autoencoders kunnen voor een breed scala aan toepassingen worden gebruikt, maar ze worden meestal gebruikt voor taken zoals dimensionaliteitsreductie, gegevensdenoising, kenmerkextractie, beeldgeneratie, sequentie-naar-sequentievoorspelling en aanbevelingssystemen.
Gegevensdenoising is het gebruik van autoencoders om korrel/ruis van afbeeldingen te verwijderen. Vergelijkbaar kunnen autoencoders worden gebruikt om andere soorten beeldschade te repareren, zoals wazige afbeeldingen of afbeeldingen met ontbrekende secties. Dimensionaliteitsreductie kan helpen om hoge capaciteitsnetwerken nuttige kenmerken van afbeeldingen te leren, wat betekent dat autoencoders kunnen worden gebruikt om de training van andere soorten neurale netwerken te ondersteunen. Dit is ook waar voor het gebruik van autoencoders voor kenmerkextractie, aangezien autoencoders kunnen worden gebruikt om kenmerken van andere trainingsdatasets te identificeren om andere modellen te trainen.
In termen van beeldgeneratie kunnen autoencoders worden gebruikt om nep-menselijke afbeeldingen of geanimeerde personages te genereren, wat toepassingen heeft in het ontwerpen van gezichtsherkenningssystemen of het automatiseren van bepaalde aspecten van animatie.
Sequentie-naar-sequentievoorspellingsmodellen kunnen worden gebruikt om de temporele structuur van gegevens te bepalen, wat betekent dat een autoencoder kan worden gebruikt om de volgende gebeurtenis in een sequentie te genereren. Om deze reden kan een autoencoder worden gebruikt om video’s te genereren. Ten slotte kunnen diepe autoencoders worden gebruikt om aanbevelingssystemen te creëren door patronen te detecteren die verband houden met gebruikersinteresse, waarbij de encoder gebruikersengagementgegevens analyseert en de decoder aanbevelingen maakt die passen bij de vastgestelde patronen.












