Haluan keskustella jostain korkean tason intuitiosta LSTM-verkkojen takana. Tässä muutamia kysymyksiä, jotka auttavat tutkimaan miksi-aspekteja:

  • Miksi/milloin käyttäisimme LSTM:ää feed forward-neuraaliverkon (FFNN) sijaan?
  • Mitkä ovat LSTM:ien hyvät ja huonot puolet ja miten ne vertautuvat FFNN:ään?
  • Miten ne eroavat perinteisistä rekursiivisista neuroverkoista (RNN)?

Feed Forward Neural Networks (FFNN)

Katsotaanpa ensin tavallista FFNN:n arkkitehtuuria:Towards Data Science Image: *Counting No. of Parameters in Deep Learning Models by Hand*

Kuten luultavasti tiedät, tämä FFNN ottaa kolme syötettä, käsittelee ne piilokerroksen avulla ja tuottaa kaksi ulostuloa. Voimme laajentaa tätä arkkitehtuuria sisällyttääksemme siihen useampia piilokerroksia, mutta peruskonsepti pysyy edelleen voimassa: syötteet tulevat sisään, niitä käsitellään yhteen suuntaan ja lopussa ne tulostetaan.

Tämä konsepti on selitetty erittäin hyvin muissa artikkeleissa, joten en aio mennä paljon yksityiskohtaisemmin. Keskeisintä on:

Ensisijainen ehto, joka erottaa FFNN:n rekursiivisista arkkitehtuureista, on se, että neuronin syötteiden on tultava kyseistä neuronia edeltävältä kerrokselta.

FFNN Wikipedia

Rekursiiviset neuroverkot (RNN)

Rekursiiviset neuroverkot ovat matemaattisesti varsin samankaltaisia kuin FFNN-mallit. Niiden tärkein ero on se, että FFNN:lle asetettua rajoitusta ei enää sovelleta:

Tulot neuronille voivat tulla miltä tahansa muulta kerrokselta.

Katsaus rekurrenssia neuroverkon soveltamisesta tilastolliseen kielimallinnukseen

Tämän arkkitehtuurin näkee usein ”käärittynä” rekurrenssiksi yksiköksi, kuten esimerkiksi seuraavassa esitetyssä mallissa:

Keskiartikkeli: Everything you need to know about Recurrent Neural Networks

Arkkitehtuurikaavioissa mahdollisesti näkyvät ”rullattuja” yksiköitä voi siis olla petollisen pieniä. Kun rullaat ne irti, verkosta tulee usein melko syvä!

RNN Wikipedia

Long-Short Term Memory (LSTM)

LSTM:t ovat erityyppisiä RNN:iä, jotka on suunniteltu ratkaisemaan katoavan/laajenevan gradientin ongelma.

Kun koulutat perinteistä RNN:ää, verkko kärsii usein katoavista/laajenevista gradienteista: rullaamalla rekurrenssiyksikön irti saat hyvin syvän verkon! Jos käydään läpi backpropagation-algoritmi käyttäen perinteisiä RNN-arkkitehtuureja, aiemmat kerrokset menettävät merkityksensä sitä mukaa, kun etenemme verkon läpi. Tämän vuoksi perinteiset RNN:t ovat alttiita unohtamaan tietoa, erityisesti tietoja, jotka esiintyvät monta aika-askelta ennen nykyistä ajankohtaa.

Esimerkki LSTM-solusta on havainnollistettu seuraavasti:

LSTM-solun arkkitehtuuri

Tämä rakenne on samankaltainen kuin perinteinen RNN:n käärimätön yksikkö, mutta keskeisin eroavaisuutena LSTM:ssä ovat portit: sisääntulo-portti (input gate), ulostulo-portti (output gate) ja unohtamisportti (forget gate). Näiden porttien toimintaa kuvaavat hyvin niiden nimet:

  • input gate kontrolloi soluun tulevaa dataa
  • forget gate kontrolloi sitä, missä määrin data pysyy solun sisällä
  • output gate kontrolloi solun ulostuloa aktivaatiofunktion kautta

Tämä githubin IO-postaus on loistava johdatus LSTM:n perusteisiin. Se selittää myös loistavasti intuition LSTM:n matematiikan takana.

LSTM Wikipedia

Ominaisuudet ja esimerkkikäyttötapaus RNN:stä

Takaisinkytkentäsilmukat antavat rekurrenssia neuroverkoille paremmat edellytykset ajallisiin haasteisiin. Aika on otettu huomioon niiden arkkitehtuurissa!

Tutustutaanpa erääseen esimerkkiin:

Ehkä käytät verkkoa ennustamaan seuraavaa sanaa lauseessa. Sanotaan, että sinulle annetaan syötteet:

Nälkäinen, Liisa ajaa lähimpään kauppaan ostamaan

Rekursiivinen neuroverkko saattaisi unohtaa ensimmäisen sanan ”nälkäinen”, kun taas LSTM levittäisi sitä ihanteellisesti. LSTM käyttäisi siis kontekstia, jonka se on kuullut aiemmin lauseessa arvatakseen ”ruokaa”, kun taas RNN saattaisi arvata mitä tahansa, mitä kaupasta ostetaan, varsinkin kun otetaan huomioon pitkä lause tai useita lauseita.

Tätyyppisen muistin mahdollistavat porttimekanismit on selitetty hyvin @StatsSorceressin toimesta täällä: Forget Layer in a Recurrent Neural Network (RNN) –

RNN:t on suunniteltu käsittelemään sekvenssejä. Tätä voidaan käyttää videon analysointiin (kuvasekvenssit), kirjoittamiseen/puheeseen (sanasekvenssit) jne.

LSTM:t on suunniteltu antamaan tärkeän informaation säilyä ajan kuluessa. RNN:t ”unohtavat” usein ajan myötä.

FFNN:t ovat muistittomia järjestelmiä; kun ne ovat käsitelleet jonkin syötteen, ne unohtavat kaiken siitä syötteestä. Sanotaan esimerkiksi, että koulutamme FFNN:n, joka ottaa syötteenä 5 sanaa ja ennustaa seuraavan tuotoksen. Tämä malli saisi sitten syötteen yllä olevasta esimerkistä:

lähin kauppa, josta voi ostaa .

Tässä menetetään selvästi konteksti, ja saisimme huonon tuloksen.

Voit kysyä, entä jos tekisimme FFNN:n, joka ottaisi monia syötteitä niin, että se sisältäisi syötteisiinsä sanan ”nälkä”? Toisin sanoen, emmekö voisi lisätä FFNN:n syötteiden määrää, jotta se edustaisi riittävästi aiempaa tietoa?

Vastaus on kyllä, mutta tämä menetelmä on sekä tehoton että usein epäkäytännöllinen. Sanotaan esimerkiksi, että meidän täytyy muistaa asiayhteys kokonainen kappale taaksepäin. Tarvitsisimme hyvin suuren FFNN:n! Lisäksi, mistä tiedämme, kuinka monta sanaa taaksepäin haluamme kontekstiksi? Riittäisikö 20? 30? 100? LSTM-arkkitehtuuri poistaa nämä ongelmat kokonaan antamalla verkon hallita väliaikaista muistia. Tätä ongelmaa pahentavat videonkäsittelyn haasteet, koska jokainen kuva vaatii huomattavasti enemmän syötteitä kuin NLP-tehtävät.

Huomaa kuitenkin, että LSTM-yksiköt ovat luonnostaan laskennallisesti monimutkaisempia kuin FFNN:n yksiköt, joten niiden kouluttaminen on usein vaikeampaa ja vie enemmän aikaa. Näistä haitoista huolimatta niiden menestys ajallisissa datahaasteissa puoltaa selvästi niiden käyttöä FFNN:n sijaan.

Articles

Vastaa

Sähköpostiosoitettasi ei julkaista.