AI 101
Mikä on Autoencoder?

Jos olet lukenut aiemmin tekstiä valvomattomista oppimismenetelmistä, saatat törmätä termiin “autoencoder”. Autoencoderit ovat yksi tärkein tapa, jolla valvomattomat oppimismallit kehitetään. Mutta mikä autoencoder on oikeasti?
Lyhyesti, autoencoderit toimivat siten, että ne ottavat vastaan dataa, pakkaavat ja koodaavat dataa ja sitten rakentavat dataa uudelleen koodauksen edustajasta. Malli koulutetaan, kunnes tappio on minimisoitu ja data tuotetaan mahdollisimman lähelle alkuperäistä. Tämän prosessin kautta autoencoder voi oppia tärkeät ominaisuudet datasta. Vaikka tämä on nopea määritelmä autoencoderista, olisi hyödyllistä tarkastella autoencoderia tarkemmin ja ymmärtää, miten se toimii. Tämä artikkeli pyrkii selventämään autoencoderia, selittämällä autoencoderin arkkitehtuuri ja sovellukset.
Mikä on Autoencoder?
Autoencoderit ovat neuroverkkoja. Neuroverkot koostuvat useista kerroksista, ja autoencoderin määrittävä piirre on, että syötekerroksissa on täsmälleen sama määrä tietoa kuin ulostuskerroksessa. Syöte- ja ulostuskerrosten saman kokoisen yksikön syy on, että autoencoder pyrkii jäljittelemään syötedataa. Se tuottaa syötedatan kopion analysoimalla ja rakentamalla sen uudelleen valvomattomalla tavalla.
Data, joka kulkee autoencoderin läpi, ei ole vain suoraan karttava syöte- ja ulostusdata, eli verkko ei vain kopioi syötedataa. Autoencoderissa on kolme osaa: koodaus (syöte) osa, joka pakkaa dataa, osa, joka käsittelee pakatun datan (tai pullonkaulan), ja dekoodaus (ulostus) osa. Kun data syötetään autoencoderiin, se koodataan ja sitten pakataan pienempään kokoon. Verkko koulutetaan koodatusta/pakatusta datasta, ja se tuottaa datan uudelleenluomisen.
Miksi haluaisit kouluttaa verkkoa vain rakentamaan dataa uudelleen? Syy on, että verkko oppii “olevaisuuden” tai tärkeimmät ominaisuudet syötedatasta. Kun verkko on koulutettu, voidaan luoda malli, joka voi syntetisoida samanlaista dataa, johon voidaan lisätä tai poistaa tiettyjä kohde-ominaisuuksia. Esimerkiksi voit kouluttaa autoencoderin säröisille kuville ja sitten käyttää koulutettua mallia poistamaan särö/ääni kuvasta.
Autoencoderin Arkkitehtuuri
Tarkastellaan autoencoderin arkkitehtuuria. Käsittelemme tässä autoencoderin pääarkkitehtuuria. On olemassa variationaatioita tästä yleisestä arkkitehtuurista, joista käsittelemme seuraavassa osiossa.

Kuva: Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)
Kuten aiemmin mainittiin, autoencoder voidaan jakaa kolmeen eri osaan: koodaus, pullonkaula ja dekoodaus.
Koodausosa autoencoderissa on tyypillisesti eteenpäin suuntautuva, tiiviisti kytketty verkko. Koodauskerrosten tarkoituksena on ottaa syötedata ja pakata se latenttiavaruuden edustajaksi, luoden uuden datan edustajan, jolla on vähennetty ulottuvuus.
Koodikerrokset eli pullonkaula käsittelevät pakatun datan edustajaa. Pullonkaulan koodi on huolellisesti suunniteltu määrittämään datan tärkeimmät osat, eli datan ominaisuudet, jotka ovat tärkeimmät datan jälleenrakentamiseksi. Tavoitteena on määrittää, mitkä datan osat on säilytettävä ja mitkä voidaan hylätä. Pullonkaulan koodi on tasapainotettava kahteen eri asiaan: edustajan koko (kuinka tiivis edustaja on) ja muuttujan/ominaisuuden merkitys. Pullonkaula suorittaa elementtikohtaisen aktivaation verkon painoissa ja harhoissa. Pullonkaulakerrosta kutsutaan toisinaan myös latentti-edustajaksi tai latentti-muuttujaksi.
Dekoodauskerros on vastuussa pakatun datan muuttamisesta takaisin alkuperäisen, muuttamattoman datan mittojen mukaiseksi edustajaksi. Muunnos tehdään latenttiavaruuden edustajasta, jonka koodaus loi.
Autoencoderin perustavin arkkitehtuuri on eteenpäin suuntautuva arkkitehtuuri, jolla on samanlainen rakenne kuin yksikerroksinen perceptron monikerroksisissa perceptroneissa. Kuten tavalliset eteenpäin suuntautuvat neuroverkot, autoencoder koulutetaan takaisinsoiton avulla.
Autoencoderin Ominaisuudet
On olemassa erilaisia autoencoderityyppejä, mutta niillä kaikilla on tiettyjä ominaisuuksia, jotka yhdistävät ne.
Autoencoderit oppivat automaattisesti. Ne eivät vaadi merkintöjä, ja jos niille annetaan tarpeeksi dataa, on helppo saada autoencoder saavuttamaan korkean suorituskyvyn tietynlaiselle syötedatalle.
Autoencoderit ovat datakohtaisia. Tämä tarkoittaa, että ne voivat pakata vain dataa, joka on hyvin samanlaista kuin data, jolle autoencoder on jo koulutettu. Autoencoderit ovat myös häviäviä, mikä tarkoittaa, että mallin tulosteet ovat heikompia kuin syötedata.
Autoencoderin suunnittelussa koneoppimisen insinöörit tarvitsevat huomiota neljään eri mallihyperparametriin: koodikoko, kerrosten määrä, solmujen määrä kerroksessa ja tappiofunktio.
Koodikoko määrittää, montako solmua on verkkojen keskiosassa, ja vähemmän solmuja pakkaa datan enemmän. Syvällä autoencoderissa kerrosten määrä voi olla mikä tahansa, jonka insinööri katsoo sopivaksi, mutta kerroksen solmujen määrä tulisi vähentää koodarin edetessä. Vastaavaa pidetään dekooderissa, eli solmujen määrä kerroksessa tulisi kasvaa dekooderikerrosten lähestyessä viimeistä kerrosta. Lopulta autoencoderin tappiofunktio on tyypillisesti joko binääinen cross-entropia tai keskineliöinen virhe. Binääinen cross-entropia on sovelias, kun datan syötearvot ovat 0-1 -alueella.
Autoencoderityypit
Kuten mainittiin aiemmin, on olemassa variationaatioita klassisesta autoencoder-arkkitehtuurista. Tarkastellaan eri autoencoder-arkkitehtuureja.
Hajaantunut

Kuva: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)
Autoencoderit toimivat tyypillisesti siten, että niillä on pullonkaula, joka pakkaa datan solmujen vähentämisen kautta. Hajaantuneet autoencoderit ovat vaihtoehto tälle tyypilliselle toimintatavalle. Hajaantuneessa verkossa piilotetut kerrokset säilyttävät saman koon kuin koodari- ja dekooderikerrokset. Sen sijaan piilotettujen kerrosten aktivaatiot rangaistaan, jolloin tappiofunktio ottaa paremmin huomioon syötedatan tilastolliset ominaisuudet. Toisin sanoen, vaikka hajaantuneen autoencoderin piilotetut kerrokset ovat suurempia kuin perinteisen autoencoderin, vain tietty prosentti niistä on aktiivisia kerran. Vaikutuksekkaimmat aktivaatiofunktiot säilytetään ja muut hylätään, ja tämä rajoitus auttaa verkkoa määrittämään datan merkittävimmät ominaisuudet.
Pienentävä
Pienentävät autoencoderit on suunniteltu kestämään pieniä muutoksia datassa, ylläpitäen datan johdonmukaista edustajaa. Tämä saavutetaan asettamalla rangaistus tappiofunktioon. Tämä sääntelytekniikka perustuu Jacobin matriisin Frobeniuksen normiin syötekoodauksen aktivaatioille. Tämän sääntelytekniikan vaikutus on, että malli on pakotettu rakentamaan koodaus, jossa samanlaiset syötteet tuottavat samanlaiset koodaukset.
Convolutional
Convolutional autoencoderit koodaavat syötedatan jakamalla datan osiin ja sitten muuttamalla nämä osat yksinkertaisiksi signaaleiksi, jotka yhdistetään uudeksi datan edustajaksi. Kuten convolution neuroverkot, convolutional autoencoder erikoistuu kuvadatan oppimiseen, ja se käyttää suodatinta, jota siirretään koko kuvan osio kerrallaan. Koodaukset, jotka koodauskerros tuottaa, voidaan käyttää kuvan jälleenrakentamiseen, heijastamiseen tai muuntamiseen. Kun suodattimet on opittu verkossa, niitä voidaan käyttää minkä tahansa riittävän samanlaisen syötedatan ominaisuuksien poistamiseen.
Äänenpoistava

Kuva: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Äänenpoistavat autoencoderit tuottavat ääntä koodaukseen, jolloin koodaus on vaurioitunut versio alkuperäisestä syötedatasta. Tämä vaurioitunut dataversio käytetään mallin kouluttamiseen, mutta tappiofunktio vertaa tulosteita alkuperäiseen syötedataan, ei vaurioituneeseen syöte-ääneen. Tavoitteena on, että verkko voi tuottaa alkuperäisen, vaurioittamattoman version kuvasta. Vaurioituneen datan ja alkuperäisen datan vertaamalla verkko oppii, mitkä datan ominaisuudet ovat tärkeimmät ja mitkä ovat merkityksettömiä/vaurioittuneita. Toisin sanoen, jotta malli voi poistaa kuvan äänen, se on oppinut datan tärkeimmät ominaisuudet.
Variationaalinen
Variationaalinen autoencoder toimii olettamalla, miten datan latentit muuttujat ovat jakautuneet. Variationaalinen autoencoder tuottaa todennäköisyysjakauman koulutuskuville/latentti-attribuuteille. Koulutuksen aikana koodari luo latenttijakaumia syötekuvien eri ominaisuuksille.

Kun verkkoa koulutetaan, koodattu data analyysoidaan ja tunnistusmalli tuottaa kaksi vektoria, jotka piirtävät kuvien keskiarvon ja keskihäiriön. Jakauma luodaan näiden arvojen perusteella. Tämä tehdään eri latenttisille tiloille. Dekooderi ottaa satunnaisia näytteitä vastaavasta jakaumasta ja käyttää niitä alkuperäisten syöteverkon syötteiden jälleenrakentamiseen.
Autoencoderin Sovellukset
Autoencoderit voidaan käyttää moniin eri sovelluksiin, mutta ne ovat tyypillisesti käytössä tehtävissä kuten ulottuvuuden vähentäminen, datan äänenpoisto, ominaisuuden poisto, kuvien luominen, sekvenssi-sekvenssi-ennustaminen ja suositussysteemit.
Äänenpoistoa voidaan käyttää autoencoderien avulla poistamaan kuvista ääni/ääni. Samoin autoencoderit voidaan käyttää muiden kuvavahinkojen, kuten sumein kuvien, korjaamiseen. Ulottuvuuden vähentäminen voidaan käyttää korkean kapasiteetin verkkojen oppimiseen kuvien tärkeistä ominaisuuksista, mikä tarkoittaa, että autoencoderit voidaan käyttää muiden neuroverkkojen koulutuksen täydentämiseen. Tämä on myös totta, kun autoencoderit käytetään ominaisuuden poistoon, koska autoencoderit voidaan käyttää muiden koulutusjoukkoihin kuuluvien ominaisuuksien tunnistamiseen muiden mallien koulutukseen.
Kuvien luomisessa autoencoderit voidaan käyttää keinotekoisien ihmiskuvien tai animaatiokuvien luomiseen, mikä on sovellettavissa kasvojen tunnistusjärjestelmiin tai animaation tietyn osan automatisointiin.
Sekvenssi-sekvenssi-ennustusmallit voidaan käyttää datan aikaisen rakenteen määrittämiseen, mikä tarkoittaa, että autoencoder voidaan käyttää seuraavan tapahtuman luomiseen sekvenssissa. Tämän vuoksi autoencoder voidaan käyttää videoiden luomiseen. Lopulta syvät autoencoderit voidaan käyttää suositussysteemien luomiseen havaitsemalla käyttäjän kiinnostuksen suhteessa, koodarin analysoimalla käyttäjän käyttäytymistietoja ja dekooderin luomalla suosituksia, jotka sopivat vakiintuneisiin malleihin.












