Ohjelmointi

Mitä on syväoppiminen? Algoritmit, jotka jäljittelevät ihmisen aivoja

Syvä oppiminen määritelty

Syvä oppiminen on koneoppimisen muoto, joka mallintaa datamallit monimutkaisina, monikerroksisina verkkoina. Koska syvällinen oppiminen on yleisin tapa ongelman mallintamiseen, se voi ratkaista vaikeita ongelmia - kuten tietokonenäön ja luonnollisen kielenkäsittelyn - jotka ylittävät sekä perinteisen ohjelmoinnin että muut koneoppimisen tekniikat.

Syvä oppiminen voi paitsi tuottaa hyödyllisiä tuloksia, jos muut menetelmät epäonnistuvat, myös rakentaa tarkempia malleja kuin muut menetelmät, ja se voi vähentää hyödyllisen mallin rakentamiseen tarvittavaa aikaa. Syvien oppimismallien kouluttaminen vaatii kuitenkin paljon laskentatehoa. Toinen syvän oppimisen haittapuoli on syvällisen oppimisen mallien tulkinnan vaikeus.

Syväoppimisen määrittelevä piirre on, että koulutettavalla mallilla on enemmän kuin yksi piilotettu kerros tulon ja lähdön välillä. Useimmissa keskusteluissa syvä oppiminen tarkoittaa syvän hermoverkkojen käyttöä. On kuitenkin olemassa muutamia algoritmeja, jotka toteuttavat syvällisen oppimisen käyttämällä muunlaisia ​​piilotettuja kerroksia hermoverkkojen lisäksi.

Syvä oppiminen vs. koneoppiminen

Mainitsin, että syvä oppiminen on muoto koneoppiminen. Viittaan ei-syvään koneoppimiseen klassinen koneoppiminen, noudattamaan yleistä käyttöä.

Yleensä klassiset koneoppimisalgoritmit toimivat paljon nopeammin kuin syvälliset oppimisalgoritmit; yksi tai useampi keskusyksikkö riittää usein klassisen mallin kouluttamiseen. Syväoppimismallit tarvitsevat usein laitteistokiihdyttimiä, kuten GPU: ita, TPU: ita tai FPGA: ita, koulutusta varten ja myös laajempaan käyttöönottoon. Ilman heitä mallien kouluttaminen kestää kuukausia.

Monien ongelmien vuoksi jotkut klassiset koneoppimisalgoritmit tuottavat "riittävän hyvän" mallin. Muiden ongelmien osalta klassiset koneoppimisalgoritmit eivät ole toimineet kauhistuttavasti aiemmin.

Syväoppimissovellukset

On monia esimerkkejä ongelmista, jotka vaativat parhaillaan syvällistä oppimista parhaan mallin tuottamiseksi. Luonnollinen kielenkäsittely (NLP) on hyvä.

Syksyllä 2016 Google-kääntäjän tuotoksen laatu englannin-ranskan, englannin-kiinan ja englannin-japanin kielipareille parani yhtäkkiä dramaattisesti sanasalaatin luomisesta lauseiden tuottamiseen, jotka olivat lähellä ihmisen ammattikäännöksen laatua. Kulissien takana on, että Google Brain- ja Google Translate -tiimit uudistivat Google Kääntäjän käyttämästä vanhoja ilmaisupohjaisia ​​tilastollisia konekäännösalgoritmeja (eräänlainen klassinen koneoppiminen) syvän hermoverkon käyttämiseen, joka on koulutettu sanojen upottamisilla Googlen TensorFlow-kehyksen avulla. .

Se ei ollut helppo projekti. Mallien kouluttaminen kesti monta tohtorintutkijaa kuukausia, ja tuhansia GPU-viikkoja. Se kannusti myös Googlea luomaan uudenlaisen sirun, Tensor Processing Unit (TPU), neuroloverkkojen käyttämiseksi mittakaavassa Google Kääntäjälle.

Google-kääntäjän käsittelemän kielen käännösongelman lisäksi tärkeimmät NLP-tehtävät sisältävät automaattisen yhteenvedon, vertailuratkaisun, diskurssianalyysin, morfologisen segmentoinnin, nimettyjen yksiköiden tunnistamisen, luonnollisen kielen luomisen, luonnollisen kielen ymmärtämisen, puheosan koodaamisen, mielipiteen analyysi ja puheentunnistus.

Toinen hyvä esimerkki syvällisen oppimisen soveltamisesta on kuvaluokitus. Koska elävät organismit käsittelevät kuvia visuaalisen aivokuorensa kanssa, monet tutkijat ovat ottaneet nisäkkään visuaalisen aivokuoren arkkitehtuurin malliksi hermoverkoille, jotka on suunniteltu suorittamaan kuvan tunnistaminen. Biologinen tutkimus on peräisin 1950-luvulta.

Läpimurto hermoverkon näkökentässä oli Yann LeCunin vuoden 1998 LeNet-5, seitsemän tason konvoluutioinen hermoverkko (CNN) 32x32 pikselin kuvina digitoitujen käsinkirjoitettujen numeroiden tunnistamiseksi. Suuremman resoluution kuvien analysoimiseksi LeNet-5-verkko olisi laajennettava useampiin hermosoluihin ja useampaan kerrokseen.

Tämän päivän parhaat syväkuvien luokittelumallit voivat tunnistaa erilaiset luettelot objekteista HD-tarkkuudella ja väreillä. Puhtaiden syvän hermoverkkojen (DNN) lisäksi ihmiset käyttävät joskus hybridinäkömalleja, joissa syvä oppiminen yhdistetään klassisiin koneoppimisalgoritmeihin, jotka suorittavat tiettyjä alatehtäviä.

Muita näköongelmia peruskuvan luokittelun lisäksi, jotka on ratkaistu syvällä oppimisella, ovat kuvien luokittelu lokalisoinnilla, esineiden havaitseminen, esineiden segmentointi, kuvan tyylin siirto, kuvan väritys, kuvan rekonstruointi, kuvan superresoluutio ja kuvan synteesi.

Kuvaluokitusta voidaan laajentaa videoluokitteluun ottamalla yksittäiset kehykset videosta ja luokittelemalla kukin kehys. Videoleikkeissä havaittuja esineitä voidaan seurata kehyksestä toiseen.

Goodfellow, Bengio ja Courville kirjoittivat vuonna 2016, että syvällistä oppimista on käytetty menestyksekkäästi ennustamaan molekyylien vuorovaikutusta auttaakseen lääkeyhtiöitä suunnittelemaan uusia lääkkeitä, etsimään subatomisia hiukkasia ja jäsentämään rakentamiseen käytettyjä mikroskooppikuvia. 3D-kartta ihmisen aivoista.

Neuroverkkojen syvällinen oppiminen

Ideat “keinotekoisista” hermoverkoista juontaa juurensa 1940-luvulle. Olennainen käsite on, että toisiinsa kytketyistä kynnyskytkimistä rakennettu keinotekoisten hermosolujen verkko voi oppia tunnistamaan kuviot samalla tavalla kuin eläimen aivot ja hermosto (verkkokalvo mukaan lukien).

Takaisinlevitys

Oppiminen syvissä hermoverkoissa tapahtuu vahvistamalla kahden neuronin välistä yhteyttä, kun molemmat ovat aktiivisia samanaikaisesti harjoittelun aikana. Nykyaikaisessa hermoverkko-ohjelmistossa kyse on yleisimmin hermosolujen välisten yhteyksien painoarvojen nostamisesta käyttämällä kutsuttua sääntöä virheen takaisin lisääminen, backprop tai BP.

Neuronit

Kuinka neuronit mallinnetaan? Jokaisella on etenemisfunktio, joka muuntaa kytkettyjen hermosolujen lähdöt, usein painotetulla summalla. Etenemisfunktion lähtö siirtyy aktivointitoimintoon, joka käynnistyy, kun sen tulo ylittää kynnysarvon.

Aktivointitoiminnot

1940- ja 1950-luvuilla keinotekoiset neuronit käyttivät porrasaktivaatiotoimintoa ja niitä kutsuttiin perceptronit. Nykyaikaiset hermoverkot voivat sanoa he käyttävät perceptroneja, mutta niillä on tosiasiallisesti sujuvat aktivointitoiminnot, kuten logistinen tai sigmoidifunktio, hyperbolinen tangentti ja Rectified Linear Unit (ReLU). ReLU on yleensä paras valinta nopeaan lähentymiseen, vaikka siinä onkin kysymys siitä, että neuronit “kuolevat” harjoittelun aikana, jos oppimisnopeus asetetaan liian korkeaksi.

Aktivointitoiminnon lähtö voi siirtyä lähtötoimintoon muokkausta varten. Usein lähtöfunktio on kuitenkin identiteettifunktio, mikä tarkoittaa, että aktivointitoiminnon ulostulo välitetään alavirtaan kytkettyihin hermosoluihin.

Neuroverkkotopologiat

Nyt kun tiedämme hermosoluista, meidän on opittava yhteisistä hermoverkkotopologioista. Syöttö eteenpäin -verkossa neuronit on järjestetty erillisiksi kerroksiksi: yksi tulokerros, mikä tahansa määrä piilotettuja prosessointikerroksia ja yksi ulostulokerros, ja kunkin kerroksen lähdöt menevät vain seuraavaan kerrokseen.

Pikakytkennällä varustetussa eteenpäin suuntautuvassa verkossa jotkut yhteydet voivat hypätä yhden tai useamman välikerroksen yli. Toistuvissa hermoverkoissa neuronit voivat vaikuttaa itseensä joko suoraan tai epäsuorasti seuraavan kerroksen kautta.

Koulutus

Neuraaliverkon ohjattu oppiminen tapahtuu aivan kuten mikä tahansa muu koneoppiminen. Esität verkon harjoitustietoryhmillä, verrataan verkon lähtöä haluttuun lähtöön, luodaan virhevektori ja tehdään korjauksia verkkoon virhevektorin perusteella. Erät harjoitustiedoista, jotka ajetaan yhdessä ennen korjausten tekemistä, kutsutaan aikakausiksi.

Niille, jotka ovat kiinnostuneita yksityiskohdista, backpropagation käyttää virheen (tai kustannusten) gradienttia mallin painojen ja ennakkoluulojen suhteen oikean suunnan löytämiseksi virheen minimoimiseksi. Korjausten soveltamista hallitsee kaksi asiaa: optimointialgoritmi ja oppimisnopeusmuuttuja, joiden on yleensä oltava pieniä, jotta taataan lähentyminen ja vältetään kuolleiden ReLU-hermosolujen aiheuttaminen.

Optimoijat

Neuraaliverkkojen optimoijat käyttävät yleensä jonkinlaista kaltevuuden laskeutumisalgoritmia taaksekasvun ajamiseksi, usein mekanismilla, joka auttaa välttämään jumittumista paikallisiin minimiin, kuten satunnaisesti valittujen minierien optimointi (stokastinen gradientin lasku) ja levittäminen vauhtia kaltevuuden korjaukset. Jotkut optimointialgoritmit mukauttavat myös malliparametrien oppimisnopeuksia tarkastelemalla gradienttihistoriaa (AdaGrad, RMSProp ja Adam).

Kuten kaikessa koneoppimisessa, myös hermoverkon ennusteet on tarkistettava erillisellä validointitietojoukolla. Tekemättä sitä vaarana on luoda hermoverkkoja, jotka vain muistavat panoksensa sen sijaan, että oppisivat yleistyneiksi ennustajiksi.

Todelliset DNN: t

Todellisen ongelman syvässä hermoverkossa voi olla 10 piilotettua kerrosta ylöspäin. Sen topologia voi olla yksinkertainen tai melko monimutkainen.

Mitä enemmän kerroksia verkossa on, sitä enemmän ominaisuuksia se voi tunnistaa. Valitettavasti mitä enemmän kerroksia verkossa on, sitä kauemmin laskeminen kestää, ja sitä vaikeampaa on kouluttaa.

Syväoppimisalgoritmit

Kuten aiemmin mainitsin, suurin osa syvällisestä oppimisesta tapahtuu syvillä hermoverkoilla. Konvoluutio-hermoverkkoja (CNN) käytetään usein konenäköön. Toistuvia hermoverkkoja (RNN) käytetään usein luonnollisen kielen ja muun sekvenssin prosessointiin, samoin kuin LSTM (Long Short-Term Memory) -verkkoja ja huomiopohjaisia ​​hermoverkkoja. Satunnaiset metsät, jotka tunnetaan myös nimellä Satunnaisten päätösten metsät, jotka eivät ole hermoverkkoja, ovat hyödyllisiä useissa luokitus- ja regressio-ongelmissa.

CNN-hermoverkot

Konvoluutio-hermoverkot käyttävät tyypillisesti konvoluutio-, poolointi-, ReLU-, täysin kytkettyjä ja häviökerroksia visuaalisen aivokuoren simulointiin. Konvoluutiokerros ottaa periaatteessa monien pienten päällekkäisten alueiden integraalit. Poolikerros suorittaa epälineaarisen alinäytteenoton muodon. ReLU-kerrokset käyttävät ei-kyllästävää aktivointitoimintoa f (x) = max (0, x). Täysin yhdistetyssä kerroksessa neuroneilla on yhteydet kaikkiin edellisen kerroksen aktivointeihin. Häviökerros laskee, kuinka verkkokoulutus rankaisee ennustettujen ja todellisten etikettien välistä poikkeamaa käyttämällä luokitusta varten Softmax- tai cross-entropia -menetystoimintoa tai regressiota varten Euclidean-häviöfunktiota.

RNN, LSTM ja huomio-pohjaiset hermoverkot

Syöttö eteenpäin -verkkoverkoissa tieto virtaa syötteestä piilotettujen kerrosten kautta ulostuloon. Tämä rajoittaa verkon käsittelemään yhtä tilaa kerrallaan.

Toistuvissa hermoverkoissa informaatio kiertää silmukan läpi, mikä antaa verkon muistaa viimeisimmät edelliset lähdöt. Tämä mahdollistaa sekvenssien ja aikasarjojen analysoinnin. RNN: llä on kaksi yleistä ongelmaa: räjähtävät kaltevuudet (helposti kiinnitettävät gradientteja kiinnittämällä) ja katoavat kaltevuudet (ei niin helppo korjata).

LSTM: issä verkko pystyy unohtamaan (portoimaan) aikaisemman tiedon tai muistamaan sen, molemmissa tapauksissa muuttamalla painoja. Tämä antaa tehokkaasti LSTM: lle sekä pitkä- että lyhytaikaisen muistin ja ratkaisee kadonneen kaltevuusongelman. LSTM: t voivat käsitellä satojen aikaisempien syötteiden sarjaa.

Huomiomoduulit ovat yleisiä portteja, jotka käyttävät painoja tulovektoriin. Hierarkkinen hermo-huomiokooderi käyttää useita huomiomoduulikerroksia käsittelemään kymmeniä tuhansia menneitä syötteitä.

Satunnaiset metsät

Toinen eräänlainen syväoppimisalgoritmi - ei syvä hermoverkko - on Random Forest, tai Random Decision Forest. Satunnainen metsä on rakennettu monista kerroksista, mutta hermosolujen sijaan se rakennetaan päätöspuista, ja se tuottaa tilastollisen keskiarvon (luokittelumoodi tai regressiokeskiarvo) yksittäisten puiden ennusteista. Satunnaisten metsien satunnaistetut näkökohdat ovat bootstrap-aggregaation käyttö (alias pussi) yksittäisille puille ja ottamalla satunnaiset osajoukot ominaisuuksista.

Syvän oppimisen puitteet

Vaikka voit kirjoittaa syvällisiä oppimisohjelmia ensimmäisistä periaatteista, on paljon tehokkaampaa käyttää syvällisiä oppimisen puitteita, varsinkin kun otetaan huomioon, että ne on optimoitu käytettäväksi grafiikkasuoritinten ja muiden kiihdyttimien kanssa. Ensisijainen kehys on TensorFlow, joka on peräisin Googlelta. TensorFlow'n suosima korkean tason sovellusliittymä on Keras, jota voidaan käyttää myös muiden taustakehysten kanssa.

PyTorch, Facebookista ja muista, on vahva vaihtoehto TensorFlow'lle, ja sillä on ero dynaamisten hermoverkkojen tukemisessa, joissa verkon topologia voi muuttua aikakaudesta toiseen. Fastai on korkean tason kolmannen osapuolen sovellusliittymä, joka käyttää PyTorchia taustana.

Amazonin ja muiden MXNet on toinen vahva vaihtoehto TensorFlow'lle väittäen paremman skaalautuvuuden. Gluon on ensisijainen korkean tason pakollinen sovellusliittymä MXNetille.

Chainer, IBM: ltä, Inteliltä ja muilta, oli jollain tavalla inspiraatio PyTorchille, koska se määrittelee hermoverkon suorituksella ja tukee dynaamisia hermoverkkoja.

Vaikka kaikki edellä mainitut kehykset ovat ensisijaisesti Python, Deeplearning4j (DL4J), alun perin Skymindiltä ja nyt Apache-projekti, on ensisijaisesti Java ja Scala. DL4J on yhteensopiva Apache Sparkin ja Hadoopin kanssa.

ONNX: ää ehdotettiin alun perin avoimeksi ekosysteemiksi vaihdettaville tekoälymalleille. ONNX: llä on nyt vaihtoaika tiedostojen vaihdon lisäksi.

$config[zx-auto] not found$config[zx-overlay] not found