AI 101
Mikä on Autoencoder?

Jos olet lukenut aiemmin ohjatun oppimisen menetelmistä, saatat törmätä termiin “autoencoder”. Autoencoders ovat yksi tärkeimmistä tavoista, joilla kehitetään ohjattuja oppimismalleja. Mutta mikä autoencoder on oikein?
Lyhyesti, autoencoders toimivat ottamalla data, pakkaamalla ja koodaamalla datan, ja sitten rakentamalla datan uudelleen koodausesityksen perusteella. Malli koulutetaan, kunnes tappio on minimisoitu ja data tuotetaan mahdollisimman lähelle alkuperäistä. Tämän prosessin kautta autoencoder voi oppia datan tärkeimmät piirteet. Vaikka tämä on nopea määritelmä autoencoderista, olisi hyödyllistä tarkastella autoencodereita tarkemmin ja saada parempi ymmärrys siitä, miten ne toimivat. Tämä artikkeli pyrkii selventämään autoencodereita, selittämällä autoencodereiden arkkitehtuuri ja sovellukset.
Mikä on Autoencoder?
Autoencoders ovat neuroverkkoja. Neuroverkot koostuvat useista kerroksista, ja autoencodereiden määrittävä piirre on, että syötekerroksissa on täsmälleen yhtä paljon tietoa kuin tulostekerroksessa. Syöte- ja tulostekerrosten on oltava saman kokoisia, koska autoencoder pyrkii jäljittelemään syötedatan. Se tuottaa kopion datasta analysoimalla ja rakentamalla sen uudelleen ohjatulla tavalla.
Data, joka kulkee autoencoderin läpi, ei ole suoraan karttunut syöte- ja tulosteen välillä, mikä tarkoittaa, että verkko ei vain kopioi syötedataa. Autoencoderissa on kolme osaa: koodaus (syöte) osa, joka pakkaa datan, osa, joka käsittelee pakatun datan (tai pullonkaula), ja dekooderi (tuloste) osa. Kun data syötetään autoencoderiin, se koodataan ja pakataan pienempään kokoon. Verkko koulutetaan koodatun/pakatun datan perusteella, ja se tuottaa datan uudelleenluomisen.
Autoencoderin Arkkitehtuuri
Tarkastellaan autoencoderin arkkitehtuuria. Käsittelemme tässä autoencoderin pääarkkitehtuuria. On olemassa variaatioita tästä yleisestä arkkitehtuurista, joista keskustellaan seuraavassa osiossa.

Kuva: Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)
Kuten mainittiin aiemmin, autoencoder voidaan jakaa kolmeen eri osaan: koodausosa, pullonkaula ja dekooderi.
Koodausosa on tyypillisesti eteenpäin suuntautunut, tiiviisti kytketty verkko. Koodauskerrosten tarkoituksena on ottaa syötedata ja pakata se latenttiavaruuden esitykseksi, luomalla uuden datan esityksen, jolla on vähennetty ulottuvuus.
Koodikerrokset tai pullonkaula käsittelevät pakatun datan esitystä. Pullonkaulan tarkoituksena on määritellä datan tärkeimmät osat, eli datan piirteet, jotka ovat tärkeimmät datan jälleenrakentamiseksi. Tavoitteena on määritellä, mitkä datan osat on säilytettävä ja mitkä voidaan hylätä. Pullonkaula on tasapainotettava kahteen asiaan: esityksen koko (kuinka tiivis esitys on) ja muuttujan/ominaisuuden merkitys. Pullonkaula suorittaa alkion aktivaatiota verkon painoissa ja harhoissa. Pullonkaulakerros voidaan kutsua myös latenttiseksi esitykseksi tai latenttisiksi muuttujiksi.
Dekooderikerros on vastuussa pakatun datan muuntamisesta takaisin alkuperäisen datan mittojen mukaiseksi esitykseksi. Muunnos tehdään latenttiavaruuden esityksen perusteella, jonka koodausosa loi.
Autoencoderin perustavin arkkitehtuuri on eteenpäin suuntautunut arkkitehtuuri, jolla on samanlainen rakenne kuin yksikerroksinen perceptron monikerroksisissa perceptroneissa. Kuten tavalliset eteenpäin suuntautuneet neuroverkot, autoencoder koulutetaan takaisinsoiton avulla.
Autoencoderin Ominaisuudet
On olemassa erilaisia autoencodereita, mutta ne kaikki jakavat tiettyjä ominaisuuksia.
Autoencoders oppivat automaattisesti. Ne eivät vaadi merkintöjä, ja riittävän datan kanssa on helppo saada autoencoder toimimaan hyvin tietynlaisella syötedatalla.
Autoencoders ovat datakohtaisia. Tämä tarkoittaa, että ne voivat pakata vain dataa, joka on hyvin samankaltaista kuin data, jolle autoencoder on koulutettu. Autoencoders ovat myös häviäviä, mikä tarkoittaa, että mallin tulosteet ovat heikompia kuin syötedata.
Suunniteltaessa autoencodereita, koneoppimisen insinöörien on kiinnitettävä huomiota neljään eri mallin hyperparametriin: koodin koko, kerrosten määrä, solmujen määrä kerroksessa ja häviöfunktio.
Koodin koko määrittää, kuinka monta solmua on verkonsa 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 solmujen määrä kerroksessa pitäisi vähentää koodarin edetessä. Vastaavaa pitäisi olla dekooderissa, eli solmujen määrä kerroksessa pitäisi kasvaa dekooderikerrosten lähestyessä viimeistä kerrosta. Lopulta, autoencoderin häviöfunktio on tyypillisesti joko binääinen cross-entropia tai keskineliöinen virhe. Binääinen cross-entropia on sovelias, kun syötedatan arvot ovat 0-1 välillä.
Autoencoderityypit
Kuten mainittiin aiemmin, on olemassa variaatioita perusautoencoderin arkkitehtuurista. Tarkastellaan eri autoencoderarkkitehtuureja.
Harva

Kuva: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)
Vaikka autoencoders tyypillisesti käyttävät pullonkaulaa, joka pakkaa datan solmujen vähentämisen kautta, harvat autoencoders ovat vaihtoehto tälle tyypilliselle toimintatavalle. Harvassa verkossa piilotetut kerrokset säilyttävät saman koon kuin koodari- ja dekooderikerrokset. Sen sijaan kerrosten aktivaatiot rangaistaan, jotta häviöfunktio ottaa paremmin datan tilastolliset ominaisuudet. Toisin sanoen, vaikka harvan autoencoderin piilotetut kerrokset ovat perusautoencoderia suurempia, vain tietty prosentti niistä on aktiivisia kerran. Merkittävimmät aktivaatiot säilytetään ja muut hylätään, ja tämä rajoitus auttaa verkkoa määrittämään datan merkittävimmät piirteet.
Pienentävä
Pienentävät autoencoders on suunniteltu kestämään pieniä muutoksia datassa, säilyttäen datan johdonmukaisen esityksen. Tämä saavutetaan soveltamalla rangaistusta häviöfunktioon. Tämä sääntöistäminen perustuu Frobeniuksen normiin syötekoodauksen aktivaatioiden Jacobin matriisissa. Tämän sääntöistämisen vaikutus on, että malli on pakotettu rakentamaan esitys, jossa samankaltaiset syötteet johtavat samankaltaisiin koodauksiin.
Convolutional
Convolutional autoencoders koodaavat syötedatan jakamalla datan osiin ja muuntamalla nämä osat yksinkertaisiksi signaaleiksi, jotka yhdistetään luomaan uusi datan esitys. Kuten convolution neuroverkot, convolutional autoencoder erikoistuu kuvadatan oppimiseen ja käyttää suodatinta, jota siirretään koko kuvan osittain. Koodauskerrosten tuottamat koodaukset voidaan käyttää kuvan jälleenrakentamiseen, peilaamiseen tai muuntamiseen. Kun suodattimet on opittu verkossa, niitä voidaan käyttää minkä tahansa riittävän samankaltaisen syötedatan ominaisuuksien etsimiseen.
Äänenpoistava

Kuva: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Äänenpoistavat autoencoders esittävät melua koodauksessa, josta seuraa koodaus, joka on vahingoittunut versio alkuperäisestä syötedatasta. Tämä vahingoittunut datan versio käytetään mallin kouluttamiseen, mutta häviöfunktio vertaa tulostearvoja alkuperäiseen syötedataan, ei vahingoittuneeseen syötedataan. Tavoitteena on, että verkko oppii tuottamaan alkuperäisen, vahingoittumattoman version kuvasta. Vertaamalla vahingoittunutta dataa alkuperäiseen dataan, verkko oppii, mitkä datan piirteet ovat tärkeimmät ja mitkä ovat merkityksettömiä/vahinkoja. Toisin sanoen, jotta malli voisi poistaa melun kuvasta, se on oppinut datan tärkeimmät piirteet.
Variationaalinen
Variationaaliset autoencoders toimivat tehdessään oletuksia latenttisten muuttujien jakautumisesta. Variationaalinen autoencoder tuottaa todennäköisyysjakauman koulutuskuville/latenttisille attribuuteille. Koulutuksen aikana koodari luo latenttisia jakaumia koulutuskuvien eri piirteille.

Kun verkkoa koulutetaan, koodattu data analyysoidaan ja tunnistusmalli antaa kaksi vektoria, jotka piirtävät kuvien keskiarvon ja keskihajonnaisuuden. 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ötteiden jälleenrakentamiseen.
Autoencoderin Sovellukset
Autoencoders voidaan käyttää moniin erilaisiin sovelluksiin, mutta ne ovat tyypillisesti käytössä tehtävissä kuten ulottuvuuden vähentäminen, datan puhdistus, piirteiden etsintä, kuvien luonti, sekvenssi-sekvenssi ennustaminen ja suositussysteemit.
Datan puhdistus on autoencoderin käyttöä datan melun poistamiseen. Vastaavasti, autoencoders voidaan käyttää muiden kuvavirheiden korjaamiseen, kuten epätarkkojen kuvien tai kuvien korjaamiseen, joissa on puutteita. Ulottuvuuden vähentäminen voidaan käyttää suurakapasiteettisten verkkojen kouluttamiseen, jotta ne oppisivat kuvien tärkeimmät piirteet, mikä tarkoittaa, että autoencoders voidaan käyttää muiden neuroverkkojen koulutuksen täydentämiseen. Tämä on myös totta autoencoderien käytöstä piirteiden etsimiseen, koska autoencoders voidaan käyttää muiden koulutusjoukkojen piirteiden etsimiseen muiden mallien kouluttamiseen.
Kuvien luontiin autoencoders voidaan käyttää keinotekoisien ihmiskuvien tai animaatiokuvien luomiseen, mikä on sovellettavissa kasvojen tunnistusjärjestelmiin tai animaation tietyn osan automatisointiin.
Sekvenssi-sekvenssi mallit voidaan käyttää datan aikajärjestyksen määrittämiseen, mikä tarkoittaa, että autoencoder voidaan käyttää seuraavan tapahtuman luomiseen. Tämän vuoksi autoencoder voidaan käyttää videoiden luomiseen. Lopulta, syvät autoencoders voidaan käyttää suositussysteemien luomiseen, jotta ne havaitsevat käyttäjien kiinnostuksen, kun koodari analysoi käyttäjien käyttäytymistä ja dekooderi luo suosituksia, jotka sopivat vakiintuneisiin malleihin.












