In deze blogpost wordt een specifieke architectuur van een neuraal netwerk besproken, die verschillende toepassingsmogelijkheden heeft. Een autoencoder is een deep learning techniek die zich in de categorie van unsupervised machine learning bevindt.

Een autoencoder leert hoe men efficiënt informatie kan comprimeren en/of encoderen door middel van het volgende principe: men geeft de architectuur heel veel voorbeelden waarbij zowel de input als de output eenzelfde entiteit is. Het netwerk krijgt als taak om de input te reconstrueren maar wordt verplicht om dat via een bottleneck te doen. Daardoor verplicht men het netwerk de essentiële informatie bij te houden en eventuele overbodige data te laten vallen (en het netwerk bepaalt dat helemaal zelf).

De architectuur bestaat uit 4 delen: 

  1. De encoder leert hoe de input moet gereduceerd worden naar een beperkt aantal dimensies.
  2. De bottleneck zorgt dat je op deze plaats in het netwerk een gecomprimeerde versie te pakken hebt van de originele input.
  3. De decoder is verantwoordelijk om op basis van de gecomprimeerde versie de originele input terug te reconstrueren.
  4. De loss function die het netwerk stuurt door te evalueren in welke mate de output op de input lijkt.

Dit unsupervised machine learning algoritme gebruikt gradient descent bij de optimalisatie van de loss function en is vergelijkbaar met een standaard neuraal netwerk.

Dat concept kan in verschillende situaties toegepast worden waarvan er hieronder een aantal besproken worden:

  • Anomaly detection : Indien de autoencoder geforceerd wordt om de essentie in data vast te leggen, betekent dit dat het is staat is om outliers uit data te halen. Je forceert dus dat het algoritme een bepaalde minimale error rate haalt (het slaagt er amper in om de reconstructie te doen) met geldige entiteiten tijdens de training. De input data bevat dus geen outliers. Vervolgens geeft men het algoritme enkele gekende anomalieën en de reconstructie error zou hoger moeten zijn bij een anomalie dan bij een geldig geval. Vanaf dat moment bestaat een systeem om anomalieën uit nieuwe data te halen (door een reconstructie error threshold te hanteren).
  • Noise reduction : Noise reduction houdt in dat noise uit een signaal (afbeeldingen, audio, etc…) gefilterd wordt en daarna ook verwijderd wordt. Het idee is hetzelfde als de vorige use case. Men voegt noise toe aan de input en verwacht de originele input (zonder noise) aan de output zijde. Men forceert het netwerk om de essentie vast te leggen omdat het maar een beperkt aantal neuronen heeft in de bottleneck van de architectuur.

Als de architectuur op de standaard manier gebruikt wordt, doet zich een probleem voor dat bij alle modellen die content produceren een probleem vormt. Dat probleem is creativiteit. Men wil een zekere vorm van creativiteit meegeven aan die modellen.

Met andere woorden wil men overweg kunnen met variaties die niet in de training data voorkwamen. Die variaties hoeven niet random te zijn maar situeren zich misschien in een specifieke richting. 

Het fundamenteel probleem dat zich vormt, is dat de latent space representation in bovenstaande afbeelding niet doorlopend en continu is (er zitten gaten in de representatie ruimte). 

Stel dat een persoon afbeeldingen van de getallen 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 en 9 zou gebruiken voor de training van een autoencoder en de decoder vervolgens een afbeelding van een cijfer moet genereren. Als men dan bijvoorbeeld de autoencoder limiteert tot 2 neuronen (en dus ook 2 dimensies), dan heeft de autoencoder er alle baat bij om de ruimte optimaal te gebruiken in het kader van reconstructie. In dat geval zal de autoencoder clusters gaan vormen waardoor die gemakkelijke grenzen heeft voor de reconstructie.

In bovenstaande visualisatie ruimte heeft het model geen weet van punt ?. Het ligt ergens tussen 1 en 7 maar het geeft geen idee dat er iets moet gegenereerd worden wat lijkt op een 1 en een 7. Het zit met ruimtes die totaal onbekend zijn.

Om dat probleem te verhelpen is het idee ontstaan van variational autoencoders. De latent space van dit type is continu en heeft die problematiek niet. Het bereikt deze eigenschap door de encoder geen n-dimensionale vector te laten genereren in de bottleneck van het netwerk. In de plaats daarvan, genereert het netwerk 2 vectoren van grootte n:

  • Een vector van gemiddelden (μ)
  • Een vector van standaard afwijkingen (σ)

Nu is het aan de decoder om van die distributie beschrijvingen een random sample te nemen bij het genereren. Die manier van genereren zorgt ervoor dat je toch telkens andere variaties in de output krijgt voor eenzelfde input. Men controleert enkel het middelpunt waarrond je sampling gebeurt en je controleert de variatie graad. Het model leert zelf om te gaan met variaties.

Het is wel belangrijk dat de verschillende instantiezones kort bij mekaar liggen en dat er zo weinig mogelijk ruimtes zijn die onbenut blijven tussen de mogelijkheden. Om dat af te dwingen, kan Kullback–Leibler divergence gebruikt worden binnen de loss function. Dat is een maatstaf voor het verschil tussen 2 probabiliteit distributies. 

In een ideale situatie zijn de gemiddelden laag (kort bij de oorsprong) en is de standaardafwijking gelijk aan 1 (mooie normaalverdeling). Het netwerk probeert dat zelf dus ook na te streven.

Dat zorgt ervoor dat alle distributies van alle mogelijkheden (1 tot 9) ongeveer gelijk zijn en zich rond de oorsprong gaan situeren. Er gebeurt dus een afstraffing tijdens het leerproces als het algoritme regionen gaat creëren die ver uit mekaar liggen en/of zeer gevarieerd zijn qua distributie.

Als men echter puur naar de Kullback–Leibler divergence kijkt, zou dat resulteren in een latent space waarbij men geen rekening gehouden heeft met ‘gelijkenis vs afstand’. De decoder gaat dus veel moeite hebben om daar betekenisvolle creaties van te maken (zie onderstaande illustratie).

 

Wanneer men echter de reconstructie error rate combineert met de Kullback–Leibler divergence, dan krijgt men een latent space waarbij gelijkenis (van het cijfer) een rol speelt in de afstand verhoudingen van de representaties in de latent space en waarbij men globaal een dicht bevolkte ruimte krijgt met gelijkaardige zones die kort bij de oorsprong liggen.

De variational autoencoder zorgt dus voor zachte overgangen en geven het model een soort van robuustheid die hieronder wordt voorgesteld met muziek vectoren als voorbeeld. De decoder kan overweg met mengsels van klassieke en rock muziek en reageert hier niet wereldvreemd op terwijl tijdens de training dat genre niet representatief was (men had enkel rock en klassieke muziek voorbeelden).

Conclusie

De autoencoder architectuur kan in vele situaties toegepast worden en onderscheidt zich voornamelijk van andere architecturen omdat het overweg kan met dataverzamelingen die geen mooie balans hebben. Neurale netwerken houden in het algemeen van mooie verhoudingen in de data. Als men wil voorspellen of een foto een hond of een kat bevat, geeft men zo’n netwerk preferabel 50% foto’s van katten en 50% foto’s van honden. Maar in vele situaties heeft men die luxe niet. 

Stel dat je fraude wilt achterhalen, dan moet je vaak tot de vaststelling komen dat je bv. slechts 1% van je data fraude zaken betreft. Daarnaast zou er in de 99% van de andere zaken wel fraude kunnen zitten maar je weet het niet met 100%. Het zijn zo’n scenario’s waar je de auto encoder los laat op de 99% van de data en een representatie laat bouwen van non-fraude zaken. Je hoopt dat de auto encoder een representatie van non-fraude vast legt en zo tevens de gekende fraudezaken kan herkennen, maar dat je ook nieuwe inzichten krijgt in andere fraudezaken (waar je niet eens van wist dat ze fraude waren).

 

 

Kristof Slechten

Kristof Slechten

Software Crafter

Kristof Slechten behaalde een master Informatica aan de VUB en is gespecialiseerd in projecten die betrekking hebben op big data & machine learning. Momenteel is Kristof aan de slag bij Imes Dexis waar hij onderzoekstrajecten rond machine learning uitwerkt. Daarnaast werkt Kristof mee aan verschillende interne onderzoeksprojecten rond AI.

Pin It on Pinterest