stomp Wat is een auto-encoder? - Verenig AI
Verbind je met ons

AI 101

Wat is een auto-encoder?

mm
Bijgewerkt on

Als je eerder hebt gelezen over technieken voor onbewaakt leren, ben je misschien de term 'auto-encoder”. Auto-encoders zijn een van de belangrijkste manieren waarop leermodellen zonder toezicht worden ontwikkeld. Maar wat is een auto-encoder precies?

Kort gezegd werken auto-encoders door gegevens op te nemen, de gegevens te comprimeren en te coderen en vervolgens de gegevens te reconstrueren uit de coderingsrepresentatie. Het model wordt getraind totdat het verlies is geminimaliseerd en de gegevens zo nauwkeurig mogelijk worden gereproduceerd. Door dit proces kan een autoencoder de belangrijke kenmerken van de gegevens leren. Hoewel dat een snelle definitie is van een auto-encoder, zou het nuttig zijn om auto-encoders nader te bekijken en een beter begrip te krijgen van hoe ze werken. Dit artikel zal proberen auto-encoders te demystificeren door de architectuur van auto-encoders en hun toepassingen uit te leggen.

Wat is een auto-encoder?

Auto-encoders zijn neurale netwerken. Neurale netwerken zijn samengesteld uit meerdere lagen en het bepalende aspect van een autoencoder is dat de invoerlagen precies evenveel informatie bevatten als de uitvoerlaag. De reden dat de invoerlaag en uitvoerlaag exact hetzelfde aantal eenheden hebben, is dat een autoencoder de invoergegevens probeert te repliceren. Het voert een kopie van de gegevens uit nadat deze is geanalyseerd en zonder toezicht is gereconstrueerd.

De gegevens die door een autoencoder gaan, worden niet alleen rechtstreeks van invoer naar uitvoer in kaart gebracht, wat betekent dat het netwerk niet alleen de invoergegevens kopieert. Er zijn drie componenten voor een autoencoder: een coderingsgedeelte (invoer) dat de gegevens comprimeert, een onderdeel dat de gecomprimeerde gegevens (of bottleneck) verwerkt en een decodergedeelte (uitvoer). Wanneer gegevens in een autoencoder worden ingevoerd, worden deze gecodeerd en vervolgens gecomprimeerd tot een kleiner formaat. Het netwerk wordt vervolgens getraind op de gecodeerde/gecomprimeerde gegevens en voert een recreatie van die gegevens uit.

Dus waarom zou je een netwerk willen trainen om alleen de gegevens te reconstrueren die eraan worden gegeven? De reden is dat het netwerk de "essentie" of de belangrijkste kenmerken van de invoergegevens leert. Nadat u het netwerk hebt getraind, kan een model worden gemaakt dat vergelijkbare gegevens kan synthetiseren, met toevoeging of aftrekking van bepaalde doelkenmerken. U kunt bijvoorbeeld een auto-encoder trainen op korrelige afbeeldingen en vervolgens het getrainde model gebruiken om de korrel/ruis uit de afbeelding te verwijderen.

Autoencoder-architectuur

Laten we eens kijken de architectuur van een autoencoder. We bespreken hier de hoofdarchitectuur van een autoencoder. 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 opgedeeld in drie verschillende componenten: de encoder, een bottleneck en de decoder.

Het encodergedeelte van de autoencoder is typisch een feedforward, dicht verbonden netwerk. Het doel van de coderingslagen is om de invoergegevens te nemen en deze te comprimeren tot een latente ruimteweergave, waardoor een nieuwe weergave van de gegevens wordt gegenereerd die een verminderde dimensionaliteit heeft.

De codelagen, of het knelpunt, hebben te maken met de gecomprimeerde weergave van de gegevens. De knelpuntcode is zorgvuldig ontworpen om de meest relevante delen van de waargenomen gegevens te bepalen, of anders gezegd de kenmerken van de gegevens die het belangrijkst zijn voor gegevensreconstructie. Het doel hier is om te bepalen welke aspecten van de gegevens moeten worden bewaard en welke kunnen worden weggegooid. De knelpuntcode moet twee verschillende overwegingen in evenwicht houden: representatiegrootte (hoe compact de representatie is) en variabele/kenmerkrelevantie. Het knelpunt voert elementgewijze activering uit op de gewichten en vooroordelen van het netwerk. De bottlenecklaag wordt ook wel een latente representatie of latente variabelen genoemd.

De decoderlaag is verantwoordelijk voor het nemen van de gecomprimeerde gegevens en het terug converteren ervan naar een representatie met dezelfde afmetingen als de originele, ongewijzigde gegevens. De conversie wordt gedaan met de representatie van de latente ruimte die door de encoder is gemaakt.

De meest elementaire architectuur van een auto-encoder is een feed-forward-architectuur, met een structuur die lijkt op een enkellaags perceptron dat wordt gebruikt in meerlaagse perceptrons. Net als reguliere feed-forward neurale netwerken, wordt de auto-encoder getraind door middel van backpropagation.

Attributen van een auto-encoder

Er zijn verschillende soorten auto-encoders, maar ze hebben allemaal bepaalde eigenschappen die ze verenigen.

Auto-encoders leren automatisch. Ze hebben geen labels nodig, en als er voldoende gegevens zijn, is het gemakkelijk om een ​​auto-encoder te krijgen die hoge prestaties levert op een specifiek soort invoergegevens.

Auto-encoders zijn gegevensspecifiek. Dit betekent dat ze alleen gegevens kunnen comprimeren die sterk lijken op gegevens waarop de autoencoder al is getraind. Autoencoders zijn ook lossy, wat betekent dat de uitvoer van het model verslechtert in vergelijking met de invoergegevens.

Bij het ontwerpen van een autoencoder moeten machine learning-ingenieurs aandacht besteden aan vier verschillende modelhyperparameters: codegrootte, laagnummer, knooppunten per laag en verliesfunctie.

De codegrootte bepaalt hoeveel knooppunten het middelste deel van het netwerk beginnen, en minder knooppunten comprimeren de gegevens meer. Hoewel het aantal lagen in een diepe autoencoder elk aantal kan zijn dat de ingenieur geschikt acht, zou het aantal knooppunten in een laag moeten afnemen naarmate de encoder vordert. Ondertussen geldt het tegenovergestelde in de decoder, wat betekent dat het aantal knooppunten per laag zou moeten toenemen naarmate de decoderlagen de laatste laag naderen. Ten slotte is de verliesfunctie van een auto-encoder typisch 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 eens bekijken.

Schaars

Foto: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Hoewel auto-encoders doorgaans een knelpunt hebben dat de gegevens comprimeert door een vermindering van het aantal knooppunten, schaarse auto-encoders zijn een alternatief voor dat typische operationele formaat. In een schaars netwerk behouden de verborgen lagen dezelfde grootte als de encoder- en decoderlagen. In plaats daarvan worden de activeringen binnen een bepaalde laag bestraft, waardoor de verliesfunctie de statistische kenmerken van invoergegevens beter vastlegt. Anders gezegd: terwijl de verborgen lagen van een schaarse auto-encoder meer eenheden hebben dan een traditionele auto-encoder, is slechts een bepaald percentage daarvan op een bepaald moment actief. De meest impactvolle activeringsfuncties blijven behouden en andere worden genegeerd, en deze beperking helpt het netwerk om alleen de meest opvallende kenmerken van de invoergegevens te bepalen.

Contractief

Contractieve automatische encoders zijn ontworpen om veerkrachtig te zijn tegen kleine variaties in de gegevens, met behoud van een consistente weergave van de gegevens. Dit wordt bereikt door een boete toe te passen op de verliesfunctie. Deze regularisatietechniek is gebaseerd op de Frobenius-norm van de Jacobiaanse matrix voor activeringen van de input-encoder. Het effect van deze regularisatietechniek is dat het model gedwongen wordt een codering te construeren waarbij vergelijkbare invoer vergelijkbare coderingen zal hebben.

CONVOLUTIONNELS

Convolutionele auto-encoders codeer invoergegevens door de gegevens op te splitsen in subsecties en deze subsecties vervolgens om te zetten in eenvoudige signalen die worden opgeteld om een ​​nieuwe representatie van de gegevens te creëren. Vergelijkbaar met neurale convolutienetwerken, is een convolutionele auto-encoder gespecialiseerd in het leren van beeldgegevens en gebruikt het een filter dat sectie voor sectie over het hele beeld wordt verplaatst. De coderingen die door de coderingslaag worden gegenereerd, kunnen worden gebruikt om de afbeelding te reconstrueren, de afbeelding weer te geven of de geometrie van de afbeelding te wijzigen. Zodra de filters door het netwerk zijn geleerd, kunnen ze worden gebruikt op elke voldoende vergelijkbare invoer om de kenmerken van de afbeelding te extraheren.

Ruisonderdrukking

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Denoising auto-encoders introduceren ruis in de codering, wat resulteert in een codering die een beschadigde versie is van de originele 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 originele, niet-beschadigde versie van de afbeelding kan reproduceren. Door de beschadigde gegevens te vergelijken met de originele gegevens, leert het netwerk welke kenmerken van de gegevens het belangrijkst zijn en welke onbelangrijk/corrupties zijn. Met andere woorden, om een ​​model de beschadigde afbeeldingen te laten verwijderen, moeten de belangrijke kenmerken van de afbeeldingsgegevens zijn geëxtraheerd.

variatie

Variatie auto-encoders werken door aannames te doen over hoe de latente variabelen van de gegevens worden verdeeld. Een variatie-autoencoder produceert een waarschijnlijkheidsverdeling voor de verschillende kenmerken van de trainingsbeelden/de latente attributen. Tijdens het trainen maakt de encoder latente distributies voor de verschillende kenmerken van de invoerbeelden.

 

Omdat het model de kenmerken of afbeeldingen leert als Gaussische distributies in plaats van discrete waarden, kan het worden gebruikt om nieuwe afbeeldingen te genereren. De Gauss-distributie wordt bemonsterd om een ​​vector te creëren, die wordt ingevoerd in het decoderingsnetwerk, dat een afbeelding weergeeft op basis van deze vector van monsters. In wezen leert het model gemeenschappelijke kenmerken van de trainingsbeelden en kent ze een bepaalde waarschijnlijkheid toe dat ze zullen voorkomen. De kansverdeling kan vervolgens worden gebruikt om een ​​afbeelding te reverse-engineeren en nieuwe afbeeldingen te genereren die lijken op de originele trainingsafbeeldingen.

Bij het trainen van het netwerk worden de gecodeerde gegevens geanalyseerd en voert het herkenningsmodel twee vectoren uit, die het gemiddelde en de standaarddeviatie van de afbeeldingen uittekenen. Op basis van deze waarden wordt een verdeling gemaakt. Dit wordt gedaan voor de verschillende latente toestanden. De decoder neemt vervolgens willekeurige steekproeven uit de overeenkomstige distributie en gebruikt deze om de initiële invoer naar het netwerk te reconstrueren.

Autoencoder-toepassingen

Autoencoders kunnen worden gebruikt voor een brede verscheidenheid aan toepassingen, maar ze worden meestal gebruikt voor taken zoals dimensionaliteitsreductie, data-denoising, feature-extractie, beeldgeneratie, voorspelling van reeks tot reeks en aanbevelingssystemen.

Data-denoising is het gebruik van auto-encoders om korrel/ruis uit afbeeldingen te verwijderen. Evenzo kunnen auto-encoders worden gebruikt om andere soorten afbeeldingsschade te herstellen, zoals wazige afbeeldingen of ontbrekende delen van afbeeldingen. Dimensionaliteitsreductie kan netwerken met een hoge capaciteit helpen om nuttige kenmerken van afbeeldingen te leren, wat betekent dat de auto-encoders kunnen worden gebruikt om de training van andere soorten neurale netwerken te verbeteren. Dit geldt ook voor het gebruik van auto-encoders voor het extraheren van functies, aangezien auto-encoders kunnen worden gebruikt om kenmerken van andere trainingsdatasets te identificeren om andere modellen te trainen.

Wat betreft het genereren van afbeeldingen, kunnen auto-encoders worden gebruikt om neppe menselijke afbeeldingen of geanimeerde karakters te genereren, wat toepassingen heeft bij het ontwerpen van gezichtsherkenningssystemen of het automatiseren van bepaalde aspecten van animatie.

Sequence-to-sequence-voorspellingsmodellen kunnen worden gebruikt om de temporele structuur van gegevens te bepalen, wat betekent dat een auto-encoder kan worden gebruikt om de volgende zelfs in een reeks te genereren. Om deze reden kan een autoencoder worden gebruikt om video's te genereren. Ten slotte kunnen diepe auto-encoders worden gebruikt om aanbevelingssystemen te creëren door patronen op te pikken die verband houden met de interesse van gebruikers, waarbij de encoder gegevens over gebruikersbetrokkenheid analyseert en de decoder aanbevelingen doet die passen bij de gevestigde patronen.

Blogger en programmeur met specialiteiten in Machine leren en Diepe leren onderwerpen. Daniel hoopt anderen te helpen de kracht van AI te gebruiken voor maatschappelijk welzijn.