{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "*Created by Petteri Nevavuori.*\n", "\n", "---\n", "\n", "# Deep Learning seminaari\n", "\n", "Kirjana Goodfellow et al.: Deep Learning (2016)\n", "\n", "Otsikot seuraavat pääotsikoiden tasolla kirjaa, mutta alaotsikot eivät aina." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 10. Sequence Modeling: Recurrent and Recursive Nets" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Toistavat (*recurrent*) ja rekursiiviset (*recursive*) neuroverkot ovat peräkkäisen (*sequential*) datan käsittelyyn erikoistuneita verkkoja samaan tapaan kuin konvoluutioverkot ovat pintamaisen datan käsittelyyn erikoistuneita. Rekursiiviset verkot kykenevät konvoluutioverkkojen tapaan käsittelemään myös vaihtelevan pituisia datasekvenssejä. Kirja tekee luvussa 10.6 eron toistuvan (*recurrent*) ja rekursiivisen verkon välillä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Toistavat verkot nojaavat jo aiemmissa luvuissa esiteltyyn perusajatukseen parametrien jaosta mallin sisäkerroksissa. Tämä mahdollistaa dimensioiltaan ja sekvenssien pituudelta vaihtelevien syötteiden käsittelyn. Kuten konvoluutioverkkojen piirteiden kanssa, voidaan toistavien verkkojen avulla löytää samoja piirteitä eri kohdista syötteitä. Ilman parametrien jakamista tulisi jokaiselle sekvenssin osalle olla omat yksilölliset yhteytensä piilokerroksiin, jolloin mallin koulutus muuttuviin sekvensseihin ja niistä etsittäviin piirteisiin olisi mahdotonta." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Toistavien verkkojen tapauksessa parametrien jakaminen eroaa konvoluutioverkoista. Piilokerrosten lisäksi myös ulostulokerros kytketään takaisin piilokerrokseen, jolloin edelliset ulostulot ovat mukana aina uuden ulostulon laskennassa. Tästä juontaa myös verkkojen toistava tai rekursiivinen luonne, sillä ulostulot ovat aina edellisten ulostulojen tuotoksia. \n", "\n", "Syötteiden osalta toistavat verkot kykenevät ottamaan yksiulotteisten syötteiden sarjojen lisäksi myös kaksiulotteisten syötteiden, kuten kuvien, sarjoja. Tärkeintä on, että verkon syöte on aina ajassa etenevä sarja yhtenevällä aika-askeleella." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.1 Unfolding Computational Graphs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Kyseisten verkkojen laskentaa voidaan jälleen lähestyä laskentagraafin (*computational graph*) kautta, joka perinteisten verkkojen sijasta on luonteeltaan rekursiivinen. Tämän aliluvun tavoitteena onkin avata (*unfold*) toistavien verkkojen rekursiiviset laskennat helpommin avautuvaksi graafiksi, jossa syötteistä ja parametreista lasketaan ulostulot ja virheet." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "Kirja käyttää rekursion esimerkkinä funktiota\n", "\n", "$$s^{(t)}=f(s^{(t-1)};\\theta),$$\n", "\n", "jossa jokaisen tilan (*state*) $s^{(t)}$ laskenta edellyttää edellisten tilan $s^{(t-1)}$ laskentaa. Näin ollen kolmannen tilan laskenta edellyttää kahden edellisen tilan laskentaa, jolloin rekursiivinen funktio on avattavissa seuraavaan muotoon:\n", "\n", "$$s^{(3)}=f(s^{(2)};\\theta)=f(f(s^{(1)};\\theta);\\theta).$$\n", "\n", "Käytännössä toistavien verkkojen kanssa on vielä tavallista, että mallin tilan $s$ lisäksi mallille annetaan jokin laskentahetkeen vaikuuttava syöte $x$. Tavallista on myös, tila pitää sisällään myös mallin antaman ulostulon. Tässä kohdin kirja siirtyy käyttämään tilasta erikseen muuttujaa $h$ alleviivaamaan rekursion tapahtumista piilokerroksissa. Tällöin avaamaton rekursiivinen funktio on muotoa\n", "\n", "$$ h^{(t)}=f(h^{(t-1)},x^{(t)};\\theta). $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Toistavat verkot oppivat siis mallintamaan tilaa $s^{(t)}$ edellisten tilojen ja syötteiden yhdistelmänä. Koska sekä sekä syötteiden että aika-askelten eli sekvenssien määrät voivat vaihdella, on mallinnus aina jossain määrin häviöllistä. Tämä johtuu osaltaan samasta syystä kuin konvoluutioverkoissakin: jokainen pikseli ei ole merkityksekäs luokittelussa, eikä välttämättä jokainen syötteen tai sekvenssin osakaan. Tämä aiheuttaa haasteita, mikäli tavoitteena tehdä toiminnaltaan rekursiivinen autoenkooderi, sillä alkuperäisen syötteen rekonstruointi on häviöiden takia hankalaa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Kirja pyrkii esittämään toistavat verkot etenkin niiden piilokerrosten kytkentöjen kautta. Alla on kuvattuna sekä avaamaton että avattu esitys syötteen huomioivasta rekursiivisesta laskentagraafista:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Esitystavat ovat myös itse verkkojen kohdalla samankaltaisia kummassakin tapauksessa, joskin $s$ korvataan tällöin piilokerroksella $h$ ja sen jälkeen lisätään vielä ainakin ulostulokerros. Kuten avatusta graafista voi huomata, sekvenssin pituus määrittää peräkkäisten laskentaoperaatioiden määrän. Esitystapaa vaihdellen voidaan laskentagraafin syötteiden $x$ sarjat esittää myös kootusti, mutta pääidea pysyy: syötteen pituus ei vaihdu, vain sisältö aika-askeleen mukaisesti. Samoin syötteeseen käytetty funktio $f$ pysyy samana." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.2 Recurrent Neural Networks" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Hyödyntäen esitettyjä toistavien laskentagraafien ideaa voidaan toistavien neuroverkkojen suunnittelua lähestyä useammasta suunnasta. Etenkin suunnittelun vapaus koskee kerrosten topologiaa: mitkä osat verkosta osallistuvat rekursioon ja mitkä taas eivät." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Kuvan puhuessa helposti enemmän hyödynnetään tässä kohdin Andrej Karpathyn blogitekstiä [The Unreasonable Effectiveness of Recurrent Neural Networks](http://karpathy.github.io/2015/05/21/rnn-effectiveness/). Tekstimuotoisen käsittelyn lisäksi tekstistä löytyy hyvä kuva eri verkkojen suunnittelutavoista:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "![RNN connections](http://karpathy.github.io/assets/rnn/diags.jpeg)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Esimerkkiongelmia, joita näillä suunnittelutavoilla voidaan ratkaista, voivat olla vasemmalta alkaen mm. seuraavat: luokittelu, kuvatekstin tuottaminen, tekstin tunneanalyysi, konekäännös ja videon luokittelu kuva kuvalta." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Kirja onneksi kuitenkin laajentaa edellistä kuvaa tuoden esimerkkejä myös kerrosten välillä vaihtelevista rekursiivisista yhteyksistä. Rekursiivisia yhteyksiä voidaan piilokerrosten lisäksi tehdä esimerkiksi myös vain ulostulokerroksesta seuraavaan piilokerrokseen. Mallinnettava ongelma määrittää joka tapauksessa sekä verkon topologian, kerrosten väliset yhteydet ja käytetyt muut komponentit (aktivointi, regularisointi, ...)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Toistavan verkon opettaminen etenee aina sekvenssin ensimmäisestä havainnosta ja mallin alkutilasta kohti sekvenssin loppua. Otetaan esimerkiksi jokaisella askeleella ulostulon antava avatuu toistava verkko:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Kun mallin ulostulojen laskenta aloitetaan syötteestä $x^{(0)}$ ja tilasta $h^{(0)}$ ja edetään tila kerrallaan eteenpäin, pitävät seuraavat tilat sisällään aina tiedon myös edeltävistä tiloista. Uutta tilaa laskiessa riittää siis vain yhden edellisen tilan laskenta. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Nämä välitilat on pidettävä tallessa, sillä mallin parametreja koulutettaessa edetään verkkoa viimeisestä tilasta alkaen aina ensimmäiseen asti. Tätä kutsutaan ajan läpi tehtäväksi *bakpropiksi* (*back-propagation through time, BPTT*). Koska tähän asti esitellyt rekursiiviset verkot ovat jyrkän kausaalisia, eli edelliset tilat vaikuttavat aina seuraaviin, on niiden koulutus sekä laskennan että muistin resurssivaatimusten kanssa lineaarisessa suhteessa sekvenssin pituuteen." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Teacher Forcing and Networks with Output Recurrence" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Sellaiset verkot, joissa rekursiivinen yhteys on vain edellisen askeleen ulostulon $o^{(t-1)}$ ja tilan $h^{(t)}$ välillä, ovat väistämättä vähintään tilasta $h^{(t-1)}$ tilaan $h^{(t)}$ yhteyden omaavia verkkoja heikompia. Toimiakseen verkon on kyettävä tuottamaan kustakin sekvenssin osasta sellainen ulostulo, joka pitää sisällään kaiken ennustamiseen vaadittavan informaation seuraaville aika-askelille." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Tällaisten verkkojen kohdalla voidaan koulutus kuitenkin pilkkoa mielekkäästi erillisesti koulutettaviin osiin. Tämä on suoraa seurausta siitä, että ulostuloyksiköt oppivat ensisijaisesti tuottamaan kohdearvoja vastaavia tuloksia. Siispä ulostulojen ideaaliarvot ovat kohdearvoja. \n", "\n", "Tällöin ulostulosta piilokerrokseen kytketyn rekursiivisen verkon koulutuksen edellisen aika-askeleen tilatietona voidaan käyttää suoraan edellisen askeleen kohdearvoa $y^{(t-1)}$, eikä niinkään verkon edellistä ulostuloa $\\hat{y}^{(t-1)}$. Näin tapahtuvaa koulutusta kutsutaan pakotetuksi opettamiseksi (*teacher forcing*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Pakotetulla oppimisella voidaan välttää myös ajan läpi tehtävää *backpropia* helpottaen verkon koulutusta. Mikäli jossain vaiheessa piilokerroksen syöte kuitenkin muuttuisi edes jonkinlaiseksi edellisten aika-askelten funktioksi, on gradientteja siirryttää laskemaan myös ajan suhteen." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Mikäli verkkoon aletaankin syöttämään koulutuksen aikaisten kohdearvojen $Y$ (*teacher forcing*) sijasta koulutetun verkon ulostuloja $\\hat{Y}$ (*free-running, open-loop*), voi verkon käyttö muodostua ongelmalliseksi. Arvot voivat erota toisistaan merkittävästi niiden tuottojakauman osalta, sillä malli ei välttämättä ole oppinut kohdearvojen jakaumaa. \n", "\n", "Tällöin jo koulutusta voidaan tehdä käyttämällä sekä verkon ulostuloja että kohdearvoja seuraavan aika-askeleen syötteinä joko yhdessä tai erikseen jollain valintatodennäköisyydellä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Computing the Gradient" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Gradienttien laskenta ei eroa perinteisistä neuroverkoista mitenkään muutoin, kuin että ne lasketaan avatulle toistavalle verkolle eli jokaiselle aika-askeleelle kuin omille piilokerroksilleen. Tällöin myös mitkä tahansa perinteisten verkkojen kanssa käytettävät optimointimenetelmät kelpaavat. Ainut ero tulee ajasta, jonka läpi gradientit lasketaan (*BPTT*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Gradienttien laskenta etenee karkeasti ylätasolla seuraavasti:\n", "\n", "1. Laske hetken virhe $L^{(t)}$\n", "2. Laske avatun verkon yksiköiden gradientit $G^{(t)}$ suhteessa virheeseen $L^{(t)}$\n", "3. Siirry aika-askel taaksepäin askeleeseen $t = t-1$\n", "4. Laske avatun verkon yksiköiden gradientit $G^{(t)}$ suhteessa gradientteihin $G^{(t+1)}$\n", "5. Toista 3-4 kunnes $t=1$ ja verkon jokaiselle yksikölle on laskettu gradientti.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Recurrent Neural Networks as Directed Graphical Models" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ylipäätään toistavien verkkojen tavoitteena on oppia datantuottoprosessi tai -jakauma. Mikäli se esitetään todennäköisyytenä, on kyseessä esimerkiksi vain syötesekvenssien todennäköisyyden $p(y^{(t)} \\mid x^{(1)}, x^{(2)}, ... , x^{(t)})$ oppiminen. Yhtälailla ehdollisessa todennäköisyydessä voi olla myös menneet ulostulot $y^{(1)}, ... , y^{(t-1)}$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Tällöin toistava verkko voidaan esittää muuttujien riippuvuuksien graafina:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Jälleen kerran tämä on yksi toistavan verkon esitystavoista muiden joukossa, jonka tavoitteena auttaa näkemään etenkin rekursion helppous parametrien jakamisen näkökulmasta. Koska jokainen peräkkäisistä vaiheista on samankaltainen tilan ja ulostulon elämisestä huolimatta, on parametrien määrä verkossa pieni." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Pienempi parametrimäärä kuitenkin valitettavasti tarkoittaa, että niiden optimointi menneisyyttä huomioivaksi on hankalampaa. Toistavien verkkojen pohja-ajatuksena on, että samoja parametreja ensinnäkin voidaan hyödyntää eri sekvenssin vaiheissa. Samoin syötteen ja kohteen ehdollinen todennäköisyys oletetaan muuttumattomaksi, eli kautta linjan samaksi. \n", "\n", "Käytännössä tämä voi tarkoittaa esimerkiksi sitä, että peräkkäiset havainnot oletetaan saman ajallisen etäisyyden omaaviksi." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Piilo- ja ulostulokerrosten linkittymisen lisäksi myös sekvenssin muodostaminen on merkittävä osa toistavien verkkojen toimintaa. Koska sekvenssin pituus voi vaihdella, on tärkeää myös kyetä rajaamaan sekvenssin pituutta mielekkäästi. Kirjassa esitellään kolme tapaa:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "*Sekvenssin loppumista ilmaisevan symbolin käyttö.* Esimerkiksi lauseita käsitellessä sopivaa erikoismerkkiä voidaan käyttää ilmaisemaan sekvenssin päättymistä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "*Sekvenssin kasvatusparametrin ennustaminen.* Malli voidaan kouluttaa myös itse määrittämään sen, lisätäänkö sekvenssiin vielä pituutta vai onko riittävän pitkä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "*Sekvenssin pituuden ennustaminen.* Myös itse sekvenssin pituus voidaan koittaa ennustaa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Modeling Sequences Conditioned on Context with RNNs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Yksittäisten sekvenssin arvojen lisäksi toistavat verkot voivat ottaa aika-askelkohtaisena syötteenä myös vektoreita. Vektori voi olla joko sama läpi koko sekvenssin, jolloin sitä painotetaan eri aika-akseleille eri tavoin. Toisaalta jokaiselle aika-askeleelle voi yhtälailla olla myös oma vektorinsa. Näin syötteet eivät rajoitu vain selkeisiin lukuihin, vaan ne voivat olla yhtälailla jopa kuviakin." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.3 Bidirectional RNNs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Yksisuuntaiset, eli menneistä havainnoista kohti tulevaisuutta etenevät rekursiiviset yhteydet ovat luonteeltaan kausaalisia. Esimerkiksi puheentunnistuksessa on kuitenkin tarpeen tietää jotain myös havaintoja seuraavista havainnoista, sillä sekä äänteet että sanat saavat merkityksensä kontekstistaan. Tällöin tarvitaan rekursiivisia yhteyksiä, jotka kykenevät huomioimaan syötesekvenssit kokonaan alusta loppuun sekä lopusta alkuun. Nämä verkot ovat kaksisuuntaisia (*bidirectional*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Tällöin verkko muodostetaan kahdesta toistavasta neuroverkosta, joista toinen kulkee sekvenssiä alusta loppuun ja toinen taas lopusta alkuun. Yksiulotteisen eli rividatan tapauksessa verkko voisi olla vaikka tällainen:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Piilokerroksen $h$ kytketään syötteeseen $x$ sekvenssin mukaisesti, kun taas $g$:n kytkennät ovat syötteeseen nähden käänteisessä järjestyksessä. Näin $h$ mallintaa sekvenssiä alusta loppuun, kun taas $g$ lopusta alkuun. Useampiulotteisen datan, kuten vaikka kuvien, kanssa olisi käytettävä jokaisen ulottuvuuden kohdalla kahta verkkoa ees-taas-oppimisen takaamiseksi." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.4 Encoder-Decoder Sequence-to-Sequence Architectures" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Sen lisäksi, että toistavat neuroverkot kykenevät käyttämään vaihtelevan pituisia syötesekvenssejä, ne pystyvät myös tuottamaan sellaisia. Tällöin ollaan tekemisissä enkooderi-dekooderi-tyyppisen toistavan neuroverkon kanssa, joka muuntaa syötesekvenssin joksikin ulostulosekvenssiksi. Kyseessä on tällöin moni-moneen-arkkitehtuuri, ja käytännön käyttökohteita ovat mm. puheentunnistus ja tekstin konekäännös." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Enkooderi-dekooderi-arkkitehtuuri, joka toimii myös muiden verkkojen kanssa, on kuvattuna alla. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Normaalisti kyse on kahdesta toiminnallisesti keskenään peilikuvan tavoin toimivasta verkosta, jotka yhdistetään esimerkiksi yhdellä suorakytketyllä piilokerroksella $C$. Tällöin verkko pyrkii ennenkaikkea oppimaan sen, miten kääntää syöte $x$ ulostuloksi $y$ oppimalla ensin koodaamaan syötteen enkooderikerroksen $h_E$ avulla ja sitten avaamaan koodauksen dekooderivkerroksella $h_D$ tavoitelluksi ulostuloksi." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.5 Deep Recurrent Networks" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Tähän asti esitellyillä toistavilla verkoilla on ollut käytännössä kolme kerrosta kytkentöjen näkökulmasta:\n", "\n", "1. Syötteen muuntaminen piilotilaksi (*hidden state*).\n", "2. Piilotilan muuntaminen seuraavaksi piilotilaksi, eli rekursio.\n", "3. Piilotilan muuntaminen ulostuloksi.\n", "\n", "Tällaisenaan verkko on kuitenkin melko matala ja tutkimuksissa on huomattu, että näidenkin verkkojen syventäminen lisää niiden suorituskykyä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Syvyyttä voidaan lisätä näihin verkkoihin useilla tavoilla. Kirja esittelee näistä kolme:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**Lisäämällä rekursiokytkettyjä kerroksia.** Yhden piilokerroksen $h$ sijasta piilokerroksia onkin useita $h_1,...,h_n$, jotka ovat perättäisesti kytkettyjä toisiinsa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**Käyttämällä myötäkytkettyjä verkkoja kussakin kytkennässä.** Toisin sanoen syötteen muuntamisessa, rekursiossa ja ulostulon laskennassa käytetään kussakin vaiheessa omaa neuroverkkoaan. Tällöin ongelmaksi voi muodostua optimoinnin vaikeutuminen, sillä kytkentäkohtaisesti syvyyden kasvattaminen lisää merkittävästi laskentagraafin pituutta syötteestä ulostuloon." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**Käyttämällä myötäkytkettyjä verkkoja yhdessä rekursioyhteyksien sivuutuksella.** Tätä ei valitettavasti avattu kirjassa sen paremmin." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.6 Recursive Neural Networks" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Vaikka tähän mennessäkin luvussa on puhuttu rekursiosta yhdessä toistuvuuden (*recurrence*) kanssa, vasta nyt tehdään selkeä ero toistavan ja rekursiivisen verkon välillä. Rekursiivinen verkko pyrkii matkimaan toistavien verkkojen mallinnustapaa hajoittamalla peräkkäisen avatun laskentagraafin puumaiseksi graafiksi. Puumaisen rakenteensa vuoksi ne ovat osoittautuneet hyödyllisiksi esimerkiksi jäsennellyn (*structured*) datan syötteistämisessä.\n", "\n", "Etuna toistaviin verkkoihin on parametrien vähyys ja täten laskennan ja optimmoinnin helppous. Hankalampaa on kuitenkin valita itse mallin rakenteen eli puun suunnittelu, sillä se on toistaiseksi kysymyksenä avoin." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.7 The Challenge of Long-Term Dependencies" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Katoavien (*vanishing*) ja räjähtävien (*exploding*) gradienttien ongelmaa sivuttiin jo luvussa kahdeksan. Ongelmissa on kyse etenkin siitä, että mikäli gradientteja lasketaan rekursiivisesti useaan kertaan käyttäen samoja parametreja, tuppaavat ne joko kokonaan häviämään ja vastavuoroisesti räjähtämään ylisuuriksi toistuvan laskennan edetessä. Tämä on ongelmallista etenkin pidempijaksoisten ajallisten riippuvuuksien (*long-term dependencies*) mallintamisessa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Toistavat verkot käyttävät lähtökohtaisesti samoja parametrea monesti sekvenssien käsittelyn aikana. Syötteen ja edellisten tilojen vaihtelevuudesta johtuen myös verkon funktioiden ulostulot elävät jopa sekvenssin alkioiden välillä ja voivat olla äärimmäisen epälineaarisia. Jos otetaan esimerkiksi vain piilotiloja $h$ sisältävä toistava verkko, voidaan sen toistuvuus ilmaista kaavana\n", "\n", "$$ h^{(t)} = (W^t)^Th^{(0)}, $$\n", "\n", "jossa $t$ on aika-askelten määrä ja $W$ piilokerroksen rekursioyhteyden painomatriisi. Painomatriisi voidaan edelleen hajoittaa ominaisarvomatriisiksi $\\Lambda$ siten, että $W = Q^T \\Lambda^t Q$. Kaikki yhtä pienemmät ominaisarvot vaimenevat tällöin nopeasti nollaksi ja suuremmat taas räjähtävät käsiin, sillä ominaisarvomatriisi kerrotaan itsellään aika-askelten määrän mukaan." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Mikäli asiaa esitellään vain yhden arvon kautta, voidaan sitä havainnollistaa seuraavalla kuvaajalla:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\ngiAiIj7/H6j30O0FVh0+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np; import matplotlib.pyplot as plt\n", "t = np.arange(1,25); l = np.array([0.8**t,1**t,1.2**t])\n", "l_0 = ['($\\lambda_0$, $\\lambda_t$)=({}, {:.2f})'.format(x[0],x[-1]) for x in l]\n", "plt.legend(iter(plt.plot(t,l.T)),l_0); \n", "plt.xlim([1,24]); plt.ylim([0,10]); plt.grid(); plt.xlabel('$t$'); plt.ylabel('$\\lambda$'); plt.show();" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Jo pelkästään muutamalla aika-askeleella ominaisarvot lähtevät karkuteille. Kun aika-askeleen käsittää sekvenssin alkioksi, ei esimerkiksi lauseen pituisen merkkijonon kohdalla ole juuri muita kuin räjähtäneitä tai lähes nolla-arvoisia parametreja jäljellä. " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "source": [ "Vaikka gradientit olisivatkin vakaita eikä edellä esitettyä ongelmaa syntyisi, painottuvat viimeaikaiset havainnot kuitenkin huomattavasti menneitä enemmän, jolloin menneiden havaintojen vaikutus kulloinkin laskettavaan hetkeen vaimenee. Tämä on ennenkaikkea toistavien verkkojen selkeä kompastuskivi. Tämä ei tarkoita, etteikö vakaiden painojen tapauksessa menneiden havaintojen vaikutuksia olisi mahdollista oppia, mutta että niiden opettelu vie kauan." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.8 Echo State Networks" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Parametreista toistava yhteydet $h$:sta takaisin itseensä ja syötteestä $x$ piilokerrokseen $h$ ovat vaikeiten opittavia. Eräs ratkaisu tämän helpottamiseksi on säätää rekursioon osallistuvat parametrit oppimista suosiviksi ja kouluttaa vain ulostulopainot. Tällaisia verkkoja (*echo* ja *liquid state networks*) nimitetään kootusti varantolaskennaksi (*reservoir computing*), sillä piilokerros muodostaa ajallisten piirteiden varannon, joka voi tavoittaa jotain menneistä syötteistä.\n", "\n", "Tässä kohden kirja nimittää verkkoa rekursiiviseksi, mutta ei ainakaan ilmaise, että kyseessä on nimenomaisesti toistavasta verkosta eroava puumaisen laskentagraafin omaava rekursiivinen verkko. Oletus siis on, että rekursiivisesta verkosta puhuttaessa kuitenkin tarkoitetaan toistavaa verkkoa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Kun aika-askelia käsittelevä verkko pysyy koulutuksen ajan täysin muuttumattomana, tapahtuu oppiminen tällöin ulostulokerroksessa. Silloin oppimisessa voidaan hyödyntää kaikkia perinteisen myötäkytketyn verkon koulutusmenetelmiä. Ongelmallisinta tällaisessa verkossa on kuitenkin aloitus. Eli miten siis alustaa toistavan verkon $x \\to h$ ja $h \\to h$ parametrit, jotta ne kykenevät kuvaamaan syötteen aikaulottuvuuden piirteitä mahdollisimman rikkaasti?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Vastauksena on vakauden veitsen terälle alustaminen pitäen mielessä gradienttien häviämisen ja räjähtämisen mahdollisuuden tuomat rajoitteet. Siksi alunperin ajatuksena olikin alustaa parametrit riittävän lähelle arvoa 1. Kirjan esimerkki $J$:n ominaisarvovektoreista suhteessa gradientteihin $g$ on kuitenkin ensinnäkin hämmentävä ($g$ = parametrien osaderivaatat = $J$, eikö?). " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Mikäli tekstissä $J$:n tilalla olisi muualla käytetty $W$, eli parametrien joukko, muuttuisi teksti paljon ymmärrettävämmäksi. Tällöin ajatus gradienttien ajan läpi takaisinpropagoinnista kuulostaisi järkevältä, kun niiden arvo olisi $n$ askeleen jälkeen $W^ng$. Samoin ajatus parametrien alustamisesta siten, että niiden ominaisarvojen vaihteluväliä tai kirjoa (*spectral radius*) rajoitetaan, kuulostaa myös näin järkevämmältä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Mitä Jacobian-matriisin kirjon laajuudella (*spectral radius*) sitten tarkoitetaankin suhteessa mallin parametrien eli painojen alustamiseen, jää se silti valitettavasti itselleni epäselväksi yllä olevan hämmenyksen vuoksi. Joka tapauksessa näiden verkkojen tavoite on alustaa $x \\to h$ ja $h \\to h$ parametrit siten, että niiden omainaiarvojen vaihteluväliä rajoitetaan." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Tätä parametrien alustustekniikkaa voidaan käyttää myös syvempien toistavien verkkojen parametrien alustustekniikkana. Sen on huomattu helpottavan pidempijaksoisten ajallisten riippuvuuksien oppimista." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.9 Leaky Units and Other Strategies for Multiple Time Scales" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Pidempijaksoisten ajallisten riippuvuuksien mallintamisen ongelmaa voidaan lähestyä myös muillakin tavoin, kuin vain parametreja säätämällä. Eräs tapa on käyttää verkkoja, jotka oppivat asioita eri ajan skaaloissa - jotkut yksityiskohtaisemmassa, jotkut ylimalkaisemmassa skaalassa. Näin ajallisten piirteiden oppiminen ja välittäminen eteenpäin on tehokkaampaa. Keinoja tämän saavuttamiseen ovat mm. yli hyppäävät yhteydet (*skip connections*) ja ajallisesti vuotavat yksiköt (*leaky units*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Adding Skip Connections through Time" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ajallisesti vaiheiden yli hyppäävät yhteydet auttavat karkeampien ajallisten piirteiden oppimisessa. Ajatus on perua viiveen käyttölle myötäkytkettyjen verkkojen kanssa. Tällöin peräkkäisten askelien $t \\to t+1$ sijasta askelia voidaankin tehdä suuremmin harppauksin $t \\to t+n$. Näin sekvenssin perättäisten askelten vaikutus gradienttien eksponentiaaliseen muuttumiseen hidastuu ja malli voi oppia vieläkin pidempijaksoisempia riippuvuuksia. Harppaus tehdään lisäämällä viivettä mallintavilla lisäyhteyksillä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Leaky Units and a Spectrum of Different Time Scales" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Toinen lähestymistapa on vuotavien yksikköjen käyttö. Käytännössä tällä tarkoitetaan lähes samaa asiaa kuin momentilla gradientin laskennassa. Tällöin piilokerrokseen syötetään aika-askeleesta toiseen siirtyessä myös edellisten aika-askelten arvojen juokseva keskiarvo $\\mu_z$. Tätä keskiarvoa painoitetaan momentin tavoin ja se toteutetaan lineaarisilla $h \\to h$ yhteyksillä.\n", "\n", "Mikäli piilokerroksen ulostuloa merkitään muuttujalla $z$, saa piilokerros syötteekseen tällöin $\\alpha \\mu_z+(1-\\alpha)z$. Juokseva keskiarvo kykenee tallettamaan paljon pysyvämmin menneitä arvoja, jolloin sen huomiointitasoa $\\alpha$ säätelemällä voidaan verkko saada oppimaan pidempijaksoisia ajallisia riippuvuuksia." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Removing Connections" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Viimeinen esitellyistä ajan skaalaan keskittyvistä ajallisten riippuvuuksien parantamisen menetelmistä on yli hyppäysten sijasta aika askelten raaka harvennus poistamalla. Aika-askelten harvennus voidaan toteuttaa viivästetyillä $h \\to h$ yhteyksillä tai sitten hajautetusti ajastetuilla parametrien päivityksillä, jossa vain osa parametreista päivitetään yhden koulutusiteraation aikana." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.10 The Long Short-Term Memory and Other Gated RNNs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Kirjan kirjoitushetkellä kaikista tehokkaimmat sekvenssejä käsittelevät syvät mallit tunnetaan portitettuina toistavina verkkoina (*gated RNNs*). Näitä ovat mm. pitkään välimuistiin (*long short-term memory, LSTM*) ja portein varustelluihin toistaviin yksikköihin (*gated recurrent unit*) perustuvat verkot. Edellisen aliluvun mennyttä tietoa kerääviin menetelmiin verrattuna nämä verkot voivat myös unohtaa menneitä tietoja tarvittaessa oppimalla, milloin jokin tieto on unohtamisen ja korvaamisen arvoinen." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### LSTM" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "LSTM pohjaa ennen kaikkea jo esitellyihin ajatuksiin $h \\to h$ yhteyksien lisäämisestä. Kiinteän yhteyden sijaan tätä lisäyhteyttä säädellään kuitenkin omalla opetettavalla piiloyksiköllä. Näin aika-skaalojen oppimisesta tulee dynaamista tiukkaan asettujen askelvälien tai painotusten sijasta. Vaikka koko muu verkko olisi täysin muuttumaton, se kykenee silti tuottamaan vaihteleviin ajanjaksoihin sopivia piirteitä syötteestä riippuen." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "LSTM-verkot ovat osoittautuneet erityisen kykeneviksi oppimaan pitkäjaksoisia ajallisia riippuvuuksia ja helpommin, kuin perinteiset toistavat verkot. Näiden verkkojen toimintalogiikkaa on myös koitettu avata monissa eri paikoissa. Tässä pari hyvää linkkiä:\n", "\n", "- [Christopher Olah: Understanding LSTM Networks](http://colah.github.io/posts/2015-08-Understanding-LSTMs/)\n", "- [Shi Yan: Understanding LSTM and its diagrams](https://medium.com/mlreview/understanding-lstm-and-its-diagrams-37e2f46f1714)\n", "\n", "Kirjan kuvan sijasta tässä kohdin käytän hyväksi Shi Yanin todella hyviä kuvia." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Verkon toiminta perustuu portteihin. Tämä tekee LSTM-verkon piilokerroksesta merkittävästi erilaisemman kuin tähän asti totutut verkot, sillä se alkaa muistuttaa tilakonetta. Katsotaan ensin kokonaiskuvaa LSTM-verkon piilokerroksesta, minkä jälken edetään portti ja toiminto kerrallaan. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Kaikkia portteja ohjataan omilla opittavilla parametreillaan. Kaikki verkon syötteistä, niin muisti, tilan ulostulo ja syöte voivat olla sekä yksittäisarvoja että vektoreita." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Ensimmäinen porteista on **unohdusportti** (*forget gate*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Sen tehtävänä on säädellä edellisen aika-askeleen muistin merkitsevyyttä eli sitä, kuinka paljon sitä unohdetaan. Edellisen tilan muisti $C_{t-1}$ tulee porttiin yhdessä edellisen tilan ulostulon $h_{t-1}$ ja uuden syötteen $x_t$ kanssa, minkä jälkeen $\\sigma$-porttia avataan näiden yhteisvaikutuksen mukaisesti. Edellisen tilan muistia skaalataan portin eli $\\sigma$-funktion tuloksen mukaan, jolloin tapahtuu unohtaminen." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Seuraavaksi on vuorossa **muistiportti** (*memory gate*) tai kuten kirja sen ilmaisee, ulkoisen syötteen portti (*external input gate*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Tässä kohden muodostetaan uusi muokattu muisti edellisen tilan ulostulosta $h_{t-1}$ ja syötteestä $x_t$ ajettuna blogin esimerkin tapauksessa $\\tanh$-funktion läpi (se voisi yhtä hyvin olla myös $\\sigma$). Kuten tuotua muistia, myös muokattua muistia skaalataan omalla $\\sigma$-portillaan. Kummallekin osalle, portille ja muokatun muistin muuntamiselle, on omat opittavat parametrinsa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Kahden edeltävän vaiheen jälkeen muokataan muistoa porttien avautumisen mukaisesti ja tuotetaan uusi seuraavaan aika-askeleesen vietävä muokattu muisti." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Viimeisenä on vuorossa **ulostuloportti** (*output gate*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Tässä vaiheessa verkosta annetaan ulostulona muisti skaalattuna jälleen omalla $\\sigma$-portilla. Portin säätelysyötteet ovat jälleen edellisen tilan ulostulo, syöte ja nyt muokattu muisti. Ulostulo voidaan siis myös kokonaan vaimentaa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Other Gated RNNs" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Koska LSTM-yksiköissä on todella monta erikseen opetettavaa porttia, on samaan toimintalogiikkaan pohjaavia kevyempiäkin variaatioita olemassa. Yksi näistä portitettu toistava yksikkö (*gated recurrent unit*), jossa on vain yksi sekä unohtamista että uuden muistin muodostamista säätelevä portti. Kyseinen yksikkö kykenee ottamaan ja unohtamaan myös vain osia syötteistään. Samoin tämä yksi portti säätelee myös ulostuloa LSTM-verkon tapaan.\n", "\n", "Tämän lisäksi on monia muitakin variaatioita." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.11 Optimization for Long-Term Dependencies" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Toistavien ja LSTM-verkkojen optimointi seuraa nykyisin aiemmissa luvuissa esiteltyä ajatusta: On parempi suunnitella helpommin optimoitava kuin tehokkaampi malli. Toistavien verkkojen kanssa on tutkittu muun muassa toisen asteen optimointimenetelmien hyödyntämistä, mutta käyttämällä stokastista jyrkimmän laskun menetelmää Nesterovin momentilla ollaan päästy lähes laskennallisesti monin verroin haastavampien toisen asteen menetelmien tarkkuutta." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Clipping Gradients" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Etenkin räjähtävien gradienttien kanssa optimointi muodostuu hankalaksi erityisesti parametrien muodostaman moniulotteisen pinnan jyrkännekohdissa. Mekaanisesti rajoittamalla gradienttien maksimikokoa eli gradientteja leikkaamalla (*clip*) voidaan välttää tilanteita, joissa ylisuuret gradientit vaikeuttavat optimointia. Menetelmä on esitelty jo luvussa 8." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Gradienttien leikkaamiseen on eri tapoja. Ensinnäkin gradientit voidaan leikata parametrikohtaisesti ennen juuri ennen koulutusiteraation parametrien päivitystä. Toinen vaihtoehdoista on leikata parametrien gradienttien normia ennen päivitystä. Tällöin määritellään jokin taso $v$, jonka ylittäessä gradientit $g$ leikataan kaavan\n", "\n", "$$ g \\leftarrow \\frac{gv}{\\|g\\|} $$\n", "\n", "mukaisesti. Kokeellinen tutkimus on osoittanut, että kummatkin auttavat gradientin päivittämisessä oikeaan suuntaan." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Gradienttien leikkaus lisää gradientteihin heuristisen vääristymän (*bias*), kun SGD on pyrkii perinteisesti etsimään vääristymättömiä gradientteja." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Regularizing to Encourage Information Flow" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Häviävien gradienttien optimointiin ei gradienttien leikkaus kuitenkaan auta. Erityisesti tähän ongelmaan on kehitetty regularisointimenetelmä, joka pyrkii säilyttämään gradienttivektorin suuruuden virheen laskusta alkaen. Tällöin gradienttien leikkausta on kuitenkin pakosta käytettävä, sillä muutoin ne räjähtävät nopeasti. Näin malli kykenee tavoittamaan laajemman kirjon aikaan liittyvistä piirteistä.\n", "\n", "Käytännössä tätä parempi vaihtoehto on kuitenkin LSTM-verkon käyttö, joka on osoittautunut sekä helpommin optimoitavaksi että paremmin suoriutuvaksi esimerkiksi kieleen liittyvien sekvenssiongelmien kanssa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 10.12 Explicit Memory" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Neuroverkot ovat erittäin hyviä silloin, kun syötteitä muunnetaan suoraviivaisesti ulostuloiksi. Muuntaminen tapahtuu tällöin suoraviivaisesti opittujen lainalaisuuskien perusteella. Mikäli kuitenkin jonkin asian ymmärtäminen edellyttää asioiden muistamista, ovat neuroverkot ongelmissa. Niiltä puuttuu ihmiselle ominainen työmuisti, johon talletetaan tietoja myöhempien asioiden oikean ymmärtämisen takaamiseksi." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Tätä varten on kehitetty muistiverkkoja (*memory networks*) ja neuroverkkoihin pohjaavia Turingin koneita (*neural Turing machine, NMT*), joilla on LSTM-verkkojen muistin tapaan erillisiä muistisoluja (*memory cell*). Näihin muistisoluihin voidaan tallettaa ja niistä voidaan lukea tietoa koulutettavasti eli ilman ulkoista ohjausta. Kulloinkin käytettävää solua ja sille tehtävää operaatiota määrää verkon ulostulo, sen tila." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "NMT-verkot kirjoittavat ja lukevat muistejaan samanaikaisesti intuition tasolla hieman samaan tapaan, kuin LSTM-verkot muokkaavat muistiaan. Päivittämis- ja lukuoperaatioita säädellään verkon sisäisillä ja opittavilla kertoimilla. Laskennan helpottamiseksi muistiin talletetaan vektoreita skalaarien sijasta. Näitä vektoreita noudetaan sisällön mukaan (*content-based addressing*)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Muistin käyttäminen auttaa ennen kaikkea vieläkin pidempien jaksollisten riippuvuuksien oppimisessa. Se, mitä muistia kulloinkin päätetään käyttää tai päivittää, määräytyy huomiomekanismia (*attention mechanism*) muistuttavaan tapaan. Mekanismin yleiperiaatteena on, että verkko kykenee vaihtamaan keskittymiskohdettaan koulutuksen aikana. Tätä käsitellään myöhemmissä luvuissa." ] } ], "metadata": { "celltoolbar": "Slideshow", "hide_input": false, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" }, "toc": { "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "318px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }