AI-basisprincipes
Wat is een Autoencoder?
Als je eerder over ongesuperviseerde leertechnieken hebt gelezen, ben je misschien de term “autoencoder” tegengekomen. Autoencoders zijn een van de belangrijkste manieren waarop ongeleide leermodellen worden ontwikkeld. Maar wat is een autoencoder precies?
Kort samengevat, autoencoders werken door gegevens in te voeren, te comprimeren en te coderen, en vervolgens de gegevens te reconstrueren vanuit de gecodeerde weergave. Het model wordt getraind totdat de verliesfunctie is geminimaliseerd en de gegevens zo nauwkeurig mogelijk worden gereproduceerd. Door dit proces kan een autoencoder de belangrijkste kenmerken van de gegevens leren. Hoewel dit een korte definitie van een autoencoder is, zou het nuttig zijn om een nadere 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 exact evenveel informatie bevatten als de uitvoerlaag. De reden dat de invoerlaag en de uitvoerlaag evenveel eenheden hebben, is dat een autoencoder ernaar streeft om de invoergegevens te repliceren. Het produceert een kopie van de gegevens na ze te hebben geanalyseerd en te hebben gereconstrueerd op een ongeleide 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) afhandelt, 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 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 verwijdering van bepaalde doelkenmerken. Bijvoorbeeld, je kon een autoencoder trainen op korrelige afbeeldingen en vervolgens het getrainde model gebruiken om de korrel/noise van de afbeelding te verwijderen.
Autoencoder Architectuur
Laten we eens kijken naar de architectuur van een autoencoder. 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 encoder-gedeelte 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 in een latent ruimte-weergave, waardoor een nieuwe weergave van de gegevens wordt gegenereerd met een lagere dimensionaliteit.
De code-lagen, of de flessenhals, gaan over de gecomprimeerde weergave van de gegevens. De flessenhals-code 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 flessenhals-code moet twee overwegingen in evenwicht brengen: de grootte van de weergave (hoe compact de weergave is) en de relevantie van de variabelen/kenmerken. De flessenhals voert element-wijze activatie uit op de gewichten en biases van het netwerk. De flessenhalslaag wordt soms ook een latent representatie of latent variabelen genoemd.
De decoderlaag 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 backpropagatie.
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 verslechterd 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 midden 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 geschikt acht, moet het aantal knooppunten in een laag afnemen naarmate de encoder vordert. Integendeel, in de decoder moet het aantal knooppunten per laag 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 eerder 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 typisch een flessenhals hebben die de gegevens comprimeert door een reductie van knooppunten, zijn sparse autoencoders een alternatief voor die typische operationele indeling. In een sparse netwerk blijven de verborgen lagen even groot als de encoder- en decoderlagen. In plaats daarvan worden de activaties binnen een bepaalde laag bestraft, waardoor de verliesfunctie de statistische kenmerken van de invoergegevens beter vastlegt. 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 actief op een bepaald moment. De meest effectieve 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 ze een consistente weergave van de gegevens 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 invoer-encoder-activaties. Het effect van deze regularisatietechniek is dat het model wordt gedwongen om een codering te construeren waarin vergelijkbare invoer vergelijkbare coderingen hebben.
Convolutional
Convolutional autoencoders coderen invoergegevens door de gegevens op te splitsen 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, specialiseert een convolutional autoencoder zich in het leren van beeldgegevens en gebruikt het een filter dat over het hele beeld wordt verplaatst, 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 door het netwerk zijn geleerd, 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 beschadigde versie is van de oorspronkelijke invoergegevens. Deze beschadigde 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 beschadigde invoer. Het doel is dat het netwerk de oorspronkelijke, onbeschadigde versie van de afbeelding kan reproduceren. Door de beschadigde 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 belangrijkste kenmerken van de beeldgegevens hebben geëxtraheerd.
Variational
Variational autoencoders werken door aannamen te doen over de verdeling van de latent variabelen van de gegevens. 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 invoer-afbeeldingen.

Wanneer het netwerk wordt getraind, wordt de gecodeerde gegevens geanalyseerd en produceert het herkenningmodel twee vectoren, waaruit de gemiddelde en standaarddeviatie van de afbeeldingen worden gehaald. Een verdeling wordt gemaakt op basis van deze waarden. Dit wordt gedaan voor de verschillende latent toestanden. De decoder neemt vervolgens willekeurige monsters uit 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-sequentie-predictie en aanbevelingssystemen.
Gegevensdenoising is het gebruik van autoencoders om korrel/noise van afbeeldingen te verwijderen. Vergelijkbaar kunnen autoencoders worden gebruikt om andere soorten beeldschade te herstellen, zoals vage 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 trainingsgegevenssets te identificeren om andere modellen te trainen.
Wat betreft 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-sequentie-predictiemodellen 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. Daarom 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.












