{ "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": [ "## 18. Confronting the Partition Function" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Suuntaamattomat graafi- eli todennäköisyysmallit käyttävät tunnusomaisesti normalisoimatonta todennäköisyysjakaumaa $\\tilde{p}(x; \\theta)$. Normalisointiin tarvitaan ositusfunktiota $Z(\\theta)$, jotta mallilla saadaan tuotettua kelvollinen todennäköisyysjakauma\n", "\n", "$$ p(x;\\theta) = \\frac{\\tilde{p}(x; \\theta)}{Z(\\theta)}. $$\n", "\n", "Jotkin mallit kiertävät normalisoinnin tarvetta joko eritystekniikoin tai tekemällä todennäköisyysjakauman $p$ selvittämisen turhaksi. Tässä luvussa keskitytään etenkin niihin malleihin, joiden käyttö edellyttää hankalan todennäköisyysjakauman $p$ muodostamista." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.1 The Log-Likelihood Gradient" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Suuntaamattomien mallien koulutus [suurimman uskottavuuden](https://fi.wikipedia.org/wiki/Suurimman_uskottavuuden_estimointi) estimoinnilla on hankalaa, sillä ositusfunktio $Z$ on silloin riippuvainen mallin parametreista. Tällöin gradientit lasketaan hajoittamalla todennäköisyysfunktion gradientit sekä normalisoimattoman todennäköisyysjakauman että ositusfunktion gradienteiksi:\n", "\n", "$$ \\Delta_\\theta \\log p(x;\\theta) = \\Delta_\\theta \\log \\tilde{p}(x;\\theta) - \\Delta_\\theta \\log Z(\\theta).$$\n", "\n", "Nämä kaksi ositusta tai vaihetta tunnetaan myös positiivisena ja negatiivisena oppimisvaiheena (*learning phase*). Negatiivinen oppimisvaihe on suuntaamattomille malleille vaikein, mistä RBM on tyypillinen esimerkki." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Intuition tasolla oppimisvaiheet voidaan nähdä ikäänkuin regularisointina. Positiivisessa vaiheessa näytteen muuttujien todennäköisyyttä kasvatetaan, kun taas negatiivisessa vaiheessa regularisoidaan. Näin malli oppii pikkuhiljaa jakauman $p_{model}$, joka sovittuu jakaumaan $p_{data}$ painottamalla paremmin sovittuvia muuttujia ja vaimentamalla muita." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Ositusfunktion gradienttien kaava johdetaan kirjassa auki kaavoissa 18.5-13, mutta lopullisessa muodossaan se on\n", "\n", "$$\\mathbb{E}_{x \\tilde{} p(x)} \\Delta_\\theta \\log \\tilde{p}(x).$$\n", "\n", "Toisin sanoen ositusfunktion gradientti on odotusarvo todellisen datantuottojakauman näytteillä lasketusta normalisoimattoman todennäköisyysjakauman gradienteista." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.2 Stochastic Maximum Likelihood and Contrastive Divergence" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ositusfunktion gradientit $\\Delta_\\theta \\log Z$ voidaan laskea naaivisti ajatellen käyttämällä Markovin ketjuja gradienttien laskennan yhteydessä, sillä Markovin ketjuilla saadaan normalisoimattomista jakaumista approksimoitua normalisoituja ja täten koulututksessa käyttökelpoisia jakaumia. Käytännössä tämä lähestymistapa on kuitenkin laskennallisesti erittäin kallis, sillä Markovin ketjut on koulutettava tasapainotilaan aina jokaisen gradienttien laskennan yhteydessä. Lähtökohtana se silti toimii." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Positiivista ja negativiista vaihetta on luonnehdittu myös koneoppimisen ulkopuolella. Yleinen ajatus on, että positiivisessa vaiheessa malli oppii todellisuudesta sellaisena, kuin se ilmenee. Negatiivisessa vaiheessa malli käy läpi vääriä oletuksiaan (*false beliefs*) todellisuudesta ja korjaa niitä. Esimerkkinä tästä käytetään uneksintaa, jossa unien näkeminen nähdään ikäänkuin todellisuuden käsittelynä vääristyneen käsityksen eli jakauman kautta. Unet ja niiden tapahtumat olisivat tällöin jossain määrin vääriä uskomuksia nostettuna opitusta jakaumasta." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Yksi tavoista keventää Markovin ketjujen laskennallista taakkaa on alustaa ne lähelle mallin jakaumaa, jolloin sisäänajo ei kestä kauaa. Vastakohtaisen eroavuuden (*contrastive divergence*) algoritmi alustaa Markovin ketjun varsinaisen datan jakaumasta nostetuilla näytteillä. Tavoitteena on etenkin vaimentaa jakauman vääriä uskomuksia, eli niitä osia, jotka eivät vastaa oikeaa, opittavaa jakaumaa. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Menetelmä kykenee muokkaamaan jakauman niitä osia, joista se saa tietoa näytteiden kautta, mutta näytteettömät jakauman alueet jäävät vähemmälle huomiolle. Jälkimmäisiä alueita kutsutaan harhaanjohtaviksi moodeiksi (*spurious modes*). Sen on myös havaittu lisäävän mallin vääristymää. Kepeytensä vuoksi sitä suositellaankin joko alustusmenetelmänä, käytettäväksi esikoulutukseen ennen raskaamman ja tarkemman MCMC-mallin käyttöä. \n", "\n", "Syvien mallien koulutukseen siitä ei kuitenkaan perinteisessä toteutusmuodossaan ole juuri suoraa hyötyä, sillä syvien mallien piilokerroksille ei juuri ole mahdollista nostaa \"oikean\" jakauman näytteitä alustusta varten. Piilokerroksille on jokaiselle ajettava oma Markovin ketjunsa sisään." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Harhaanjohtavien moodien syntymistä voidaan ehkäistä käytämällä stokastinen suurimman uskottavuuden (*stochastic maximum likelihood, SML*) eli sitkeän (*persistent*) vastakohtaisen eroavuuden menetelmällä, jossa opittavaa jakaumaa päivitetään pienin askelin ja useasti käyttäen edellisiä tiloja seuraavien lähtökohtana (vrt. SGD ja optimointi). SML:n avulla Markovin ketjut kykenevät käymään tehokkaasti läpi laajan määrän moodeja ja tilojen ketjujen ylläpitämisen johdosta myös piilokerrosten käsittely mahdollistuu. SML:ää voidaan siis käyttää syvien mallien kanssa tehokkaasti." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "SML voi kuitenkin tulla epätarkaksi, mikäli etemisvauhti on Markovin ketjujen miksaantumista nopeampi. Teoreettista ratkaisua tälle ongelmalle ei ole, vaan etenemisen askelpituus ja Markovin ketjujen sovitusiteraatioiden määrä on kokeiltava tapauskohtaisesti. SML:ää voidaan kouluttaa myös useammalla parametrijoukolla siten, että mallia koulutetaan sekä nopeilla muutoksilla (korkea oppimiskerroin) ja moodeihin keskittyen (matala oppimiskerroin). Lopuksi eri tavoin koulutetut vastaavat parametrit lasketaan esimerkiksi yhteen." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.3 Pseudolikelihood" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Suoran ositusfunktion laskennan lisäksi Monte Carlo -approksimointia voidaan lähestyä myös epäsuorasti. Suuntaamattomissa graafimalleissa todennäköisyyksien suhteita on helppo hyödyntää, sillä \n", "\n", "$$ \\frac{p(x_1)}{p(x_2)}=\\frac{\\frac{1}{Z}p(x_1)}{\\frac{1}{Z}p(x_2)}=\\frac{\\tilde{p}(x_1)}{\\tilde{p}(x_2)}. $$\n", "\n", "Toisin sanoen ositusfunktiota ei tarvitse laskea. Tämä on näennäisuskottavuudeksi (*pseudolikelihood*) kutsutun lähestymistavan pohjana. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Intuitiivisesti näennäisuskottavuudessa lasketaan ehdollinen todennäköisyys jollekin *piirteelle* $x_i$ suhteessa kaikkiin muihin piirteisiin $x_{-i}$. Kaikkien piirteiden osalta näennäisuskottavuus on\n", "\n", "$$ \\sum^n_{i=1} \\log p(x_i \\mid x_{-i}). $$\n", "\n", "Laskenta on huomattavasti tehokkaampaa verrattuna ositusfunktioon, sillä laskuja tarvitsee tehdä vain $n$ piirteen ja $k$ piirrekohtaisen mahdollisen arvon kanssa $k \\times n$ kertaa. Ositusfunktiota laskiessa sama tehokkuusluku on $k^n$. Näennäisuskottavuus vaatii kuitenkin riittävän tarkasti toimiakseen riittävän suuren näytemäärän." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Mikäli tavoitellaan riittävää tarkkuutta ehdollisten todennäköisyyksien laskentaan, on näennöisuskottavuus kelvollinen algoritmi. Kokonaisen todennäköisyysjakauman $p(x)$ määrittämiseen se ei kuitenkaan ole kovin hyvä. Samoin menetelmän käyttö on kyllä mahdollista syvien mallien kanssa, mutta vain matalien tai matemaattisesti yhteensopivia inferenssimenetelmiä hyödyntävien sellaisten tapauksissa. Laskennallisesti menetelmä on mahdollista tuoda SML:n tasolle oikein säätämällä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.4 Score Matching and Ratio Matching" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ositusfunktion laskentaa voidaan välttää myös pisteiden parituksilla (*matching*). Pisteytys lasketaan derivaatan logaritmisen todennäköisyyden $\\Delta_x \\log p(x)$ ja syötteen $x$ suhteen. Tavoitteena on minimoida pisteitä kautta linjan. Menetelmä toimii vain, mikäli normalisoimattoman todennäköisyysjakauman derivaatat on laskettavissa suoraan, sillä menetelmä perustuu osaderivaattojen laskentaan (vrt. optimoinointi). Esimerkiksi harvan koodauksen tai syvien Boltzmannin koneiden kanssa menetelmää ei voida käyttää. Pisteytystä ei voida käyttää, mikäli mallissa on joko näkyvissä tai piilotetuissa kerroksissa diskreettejä arvoja." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Pisteytyksen jatkokehitelmä, joka sallii myös diskreettejä arvoja, on suhteiden paritus. Diskreettien arvojen tulee olla tällöin binäärisiä. Kyseinen menetelmä välttää edelleen ositusfunktion laskentaa ja sen on huomattu toimivan hyvin esimerkiksi kohinan poiston kanssa kuvia käytettäessä. Menetelmä voidaan intuition tasolla ymmärtää samaan toimivaksi näennäisuskottavuuden kanssa. Korkeaulotteisen ja harvan datan kanssa suhteiden paritus toimii hyvin (esim. sanavektorit)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.5 Denoising Score Matching" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Joskus todellisen datantuottojakauman $p_{data}$ tavoittelun sijasta kiinnostavampaa on tasoitetun jakauman $p_{smoothed}$ tuottaminen. Tämä tehdään lisäämällä kohinaa koulutuksessa käytettyyn dataan, sillä vain käytössä olevilla näytteillä ei välttämättä kyetä tavoittamaan todellista datantuottojakaumaa. Menetelmä vastaa vahvasti autoenkooderien toimintaa, ja tähän viitataankin autoenkoodereja käsittelevässä luvussa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.6 Noise-Contrastive Estimation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ositusfunktiota estimoivat mallit eivät usein laske itse ositusfunktiota suoraan, vaan joko sen gradienttia (SML, vastakohtainen eroavuus) tai eivät ollenkaan (näennäisuskottavuus). Kohinaan vertaava estimointi (*noise-contrastive estimation*) eroaa näistä laskemalla ositusfunktiolle suoran likimäärän. Tällöin kaavaksi tulee\n", "\n", "$$ \\log p_{model}(x) = \\log \\tilde{p}_{model}(x;\\theta) + c,$$\n", "\n", "jossa $c \\approx -\\log Z(\\theta)$. Erittelyn molempia osia päivitetään koulutuksen yhteydessä. Koulutuksen aikana mallille syötetään joko kohinaa tai varsinaisia syötteitä. Koulutus on ohjaamattoman koulutuksen sijasta ohjattua ja malli opetetaankin erottamaan oikeat näytteet kohinasta." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Menetelmä toimii parhaiten, kun muuttujien määrä on rajoitettu. Muuttujilla voi olla laajakin kirjo eri arvoja, mutta muuttujien määrän kasvaessa menetelmä alkaa kärsiä. Samoin kohinajakauma on kaksiteräinen miekka. Helposti käsiteltävä kohinajakauma voi olla liian ilmeisesti itse datasta erottuva, jolloin malli tyytyy liian karkeisiin tuloksiin ja erottelee kohinaa tehokkaasti opittuaan datasta vasta karkeat alkeet. Menetelmän toimivuuden rajoitteet ovat samat, kuin pisteiden parituksen ja näennäisuskottavuuden menetelmillä." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Mikäli menetelmää käytetään siten, että kohinan jakaumana käytetään mallin jakaumaa ja jakauma päivitetään ennen gradienttien päivittämistä, ollaan tekemisissä itseensä vertaavan estimoinnin (*self-contrastive estimation*) kanssa. Sen gradientin odotusarvo vastaa suurimman uskottavuuden avulla saatavaa gradientin odotusarvoa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Menetelmän perusajatuksena on, että hyvän generatiivisen mallin on kyettävä erottamaan kohina varsinaisesta datasta. Edelliseen läheisesti liittyvä ajatus on, että hyvä generatiivinen malli kykenee tuottamaan näytteitä, joita mikään luokittelija ei kykene erottamaan oikeista näytteistä. Nämä kaksi ajatusta ovat kirjan lopussa esiteltävän GAN-verkon pohjana." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 18.7 Estimating the Partition Function" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Tässä aliluvussa käsitellään menetelmiä, joilla saadaan suoraan likimääräistettyä ositusfunktio, mikä on tarpeellista normalisoidun datan jakauman laskemisessa suuntaamattomien graafimallien kanssa, etenkin itse mallien arvioinnissa. Kahden samankaltaisen maksimiuskottavuutta käyttävän mallin vertaaminen keskenään edellyttää näet ositusfunktion olemassaoloa. Laskennallisista haasteista johtuen yksinkertaisten Monte Carlo -menetelmien käyttö ei auta, sillä käytännössä data on sekä liian moniulotteista että useamman moodin omaavaa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Annealed Importance Sampling" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Mikäli kahden toisiinsa verrattavan mallin jakaumat ovat kaukana toisistaan, voidaan välijakaumilla (*intermediary distributions*) rakentaa siltaa näiden välille. Tätä kutsutaan karkaistuksi merkityksellisyyden mukaan näytteistyksesti (*annealed importance sampling*). Tällöin ositusfunktiota lähdetään määrittämään jostain tunnetusta lähtökohdasta (esim. nolla-painoinen RBM) ja edetään muutos kerrallaan kohti tavoitejakaumaa." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Välijakaumat, kuten myös lähtöjakauma, ovat vapaasti valittavissa. Yleisratkaisu on käyttää painotettua geometristä keskiarvoa lähde- ja kohdejakaumien välillä. Tämän jälkeen määritellään Markovin ketju siten, että siirtymäfunktiolla $T$ päästään välijakaumasta toiseen. Kun Markovin ketju on sisäänajettu ja välijakaumat oikein painotettu, on lähde- ja kohdejakaumien ositusfunktioiden suhde mahdollista laskea. Tällä suhteella saadaan selvitettyä kohdejakauman ositusfunktion suuruusluokka, mitä voidaan sitten käyttää normalisoidun jakauman laskentaan." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### Bridge Sampling" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Karkaistua merkityksellisyyden mukaan näytteistystä vastaava menetelmä on siltanäytteistys (*bridge sampling*). Useiden välijakaumien sijasta lähde- ja kohdejakaumien välillä käytetään vain yhtä siltajakaumaa. Tavoitteena on edelleen tunnetun ositusfunktion omaavan lähdejakauman ja ositusfunktion osalta selvityksen kohteena olevan kohdejakauman ositusfunktioiden suhteen selvittäminen." ] } ], "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 }