A neurális hálózatok alapjai Modern Tudományos Programozás Wigner FK 20 November 2018
Bevezető példa Egyenes illesztés: Sok minden demonstrálható rajta, de tudjuk, van intuíciónk róla, hogyan működik
Egyenes illesztés Feladat: Adott N darab {x i, y i } pont pár (az adatok). Szeretnénk jellemezni őket egy modellel, pl. egyenes: y = M ab x = ax + b Választottunk egy költség függvényt az eltérés mérésére L z0 (z) = z 0 z 2 Kérdés: Hogyan illesszük a modellt az adatokra?
Egyenes illesztés Azt mondjuk, hogy a modell akkor illik az adatokra, ha a költségfüggvény minimális: min a,b i L yi (M ab (x i ) ) Minimumban a paraméterek szerinti deriváltak nullák: 0 = d da L yi (M ab (x i ) ) i 0 = d db i L yi (M ab (x i ) )
Egyenes illesztés Ismert, hogy komponált függvények deriváltja a lánc szabály szerint: d dx f g x = f g x g (x) Így átírhatjuk a minimum feltételt: 0 = d da i 0 = d db i L yi (M ab (x i ) ) = L yi (M ab (x i ) ) = i i L yi (M ab (x i ) ) d da M ab x i L yi (M ab (x i ) ) d db M ab x i
Egyenes illesztés Esetünkben speciálisan: M ab x = ax + b, d da M ab x i = x i, d db M ab x i = 1 így 0 = i 0 = i L z0 z = z 0 z 2, L z0 z = 2(z 0 z) L yi (M ab (x i ) ) d da M ab x i L y i M ab x i d db M ab x i = i 2(y i ax i b) x i = 2 y i ax i b 1 i
Egyenes illesztés 0 = (y i ax i b)x i i 0 = y i ax i b i Ez egy lineáris egyenletrendszer {a, b}-re, ezért meg tudjuk oldani, zárt alakban. Másképp fogalmazva: a minimalizálandó függvényünknek egyértelmű minimuma van!
Modell illesztés Foglaljuk össze, hogy mit használtunk fel: Volt egy modellünk M, aminek voltak hangolható paraméterei Volt egy költségfüggvényünk L A kettőt összekomponáltuk L M = L M, majd kerestük a paraméterek szerinti minimumát A minimumban a paraméterek szerinti deriváltak nullák Tehát deriváltat kellett számolnunk, de ez a kompozícióra a lánc szabály segítségével könnyen ment (szorzat alak) A deriváltak ismeretében egy egyenletrendszert kaptunk, amit meg kellett oldani.
Mi lenne ha...? https://what-if.xkcd.com/13/
Mi lenne ha...? A modellünk nem csak lineáris lenne, hanem valamilyen általánosabb függvényosztály
Mi lenne ha...? A modellünk nem csak lineáris lenne, hanem valamilyen általánosabb függvényosztály És ha mondjuk nem csak két paramétere lenne, hanem mondjuk 1 millió...
Mi lenne ha...? A modellünk nem csak lineáris lenne, hanem valamilyen általánosabb függvényosztály És ha mondjuk nem csak két paramétere lenne, hanem mondjuk 1 millió...
Problémák Néhány a problémák közül: Ha sok paraméterünk van, a szimbolikus deriválás és megoldás nem működik Az egyenletrendszer, amit meg kell oldanunk általában nem lineáris Következés képpen a minimum nem egyértelmű és sok van belőle (valószínűleg)
Deriválás A deriváltakat több féle módszerrel számolhatunk: Szimbolikusan Numerikusan Automatikusan
Deriválás A deriváltakat több féle módszerrel számolhatunk: Szimbolikusan Numerikusan Mi a különbség? Automatikusan
Deriválás A deriváltakat több féle módszerrel számolhatunk: Szimbolikusan f x = x 2, f x = 2x Numerikusan f 1.00 = 1.0000 ൠ f 1.01 = 1.0201 f 1.00 1.0201 1.0000 0.01 = 2.01 Automatikusan f x = x 2 f 1 = 1 1 f 1 + ε = 1 + ε 1 + ε = 1 + 2ε Tehát: f 1 = 1 és f 1 = 2
Automatikus differenciálás A módszer felfogható úgy, hogy a számokat kiterjesztjük egy infinitezimális iránnyal: x x + x ε ahol ε egy infinitezimális szám, és ε 2 = 0 x reprezentálja a függvény értékét x a derivált értéke az adott függvényérték mellett
Automatikus differenciálás A deriválási szabályok ekkor egyszerűen reprezentálhatóak: x + x ε + y + y ε = (x + y) + x + y ε x + x ε y + y ε = (xy) + x y + xy ε sin x + x ε = sin(x) + x cos(x) ε Általában tehát: f x + x ε = f x + f x x ε
Automatikus differenciálás Általában tehát: f x + x ε = f x + f x x ε Ezt viszont értjük, hiszen ez csak a lánc szabály!
Automatikus differenciálás f x + x ε = f x + f x x ε Konstansok: c = c + 0ε
Automatikus differenciálás f x + x ε = f x + f x x ε Ha van egy függvényem, hogy számolom ki a deriváltját egy adott x 0 pontban? Ha csak x + 0ε -t rakunk bele, akkor a fenti képlet szerint 0 lesz a deriváltat jellemző tag. f(x) + 0ε
Automatikus differenciálás f x + x ε = f x + f x x ε Ha van egy függvényem, hogy számolom ki a deriváltját egy adott x 0 pontban? Megoldás: x + 1ε Ekkor ugyanis az eredmény: (f x + f x ε)
Automatikus differenciálás Összefoglalva: Konstans: (c + 0ε) Változó: (x + 1ε) Lánc szabály: f x + x ε = f x + f x x ε Tovább komponálva: f g x + x ε = f g(x) + f g(x) g (x)x ε Még tovább: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε
Automatikus differenciálás Mi van több változó esetén? f x + x ε, y + y ε = f x, y + df dx x, y x + df dy x, y y ε Hasonlóan általánosítható, ha komponálunk: f g(x + x ε), h y + y ε = f g(x), h(y) + df dg g(x), h y g (x)x + df dh g(x), h y h (y)y ε
Automatikus differenciálás Menjünk vissza ehhez a képlethez: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε Ezt felrajzolhatjuk így is: f g h x
Automatikus differenciálás Menjünk vissza ehhez a képlethez: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε Ezt felrajzolhatjuk így is: Ha deriválni akarok, akkor (x 0 + 1ε)-t teszünk be alul: x 0 + 1ε f g h x
Automatikus differenciálás Menjünk vissza ehhez a képlethez: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε Ezt felrajzolhatjuk így is: f Ha deriválni akarok, akkor (x 0 + 1ε)-t teszünk be alul: h x 0 + h (x 0 )1ε g h És terjesztjük felfelé! x 0 + 1ε x
Automatikus differenciálás Menjünk vissza ehhez a képlethez: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε Ezt felrajzolhatjuk így is: Ha deriválni akarok, akkor (x 0 + 1ε)-t teszünk be alul: És terjesztjük felfelé! g(h x 0 ) + g h x 0 h (x 0 )1ε h x 0 + h (x 0 )1ε x 0 + 1ε f g h x
Automatikus differenciálás Menjünk vissza ehhez a képlethez: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε Ezt felrajzolhatjuk így is: f g(h(x)) + f g h x g (h x )h (x)x ε f Ha deriválni akarok, akkor (x 0 + 1ε)-t teszünk be alul: És terjesztjük felfelé! g(h x 0 ) + g h x 0 h (x 0 )1ε h x 0 + h (x 0 )1ε x 0 + 1ε g h x
Automatikus differenciálás Menjünk vissza ehhez a képlethez: f g(h x + x ε) = f g(h(x)) + f g h x g (h x )h (x)x ε Lényegében a derivált szorzatát jobbról zárójelezve halmozzuk fel f g h x
ҧ Automatikus differenciálás Tegyük fel, hogy egyszer kiszámoltuk az összes függvény értéket és letároltuk minden pontban: x = x h x = തh g h x = gҧ f g(h x + x ε) = f g(h(x)) + f g h x g h x h x x ε = ҧ f + f gҧ g തh h xҧ x ε f g h x fҧ gҧ തh xҧ
Automatikus differenciálás A deriváltban levő szorzatot ekkor felülről lefelé így is számolhatjuk: f g(h x + x ε) = f ҧ + f gҧ g തh h xҧ x ε f szintjén a derivált f a gҧ helyen g szintjén hozzájön szorzónak g deriváltja a തh helyen. h szintjén hozzájön szorzónak h deriváltja a xҧ helyen. x szintjén, hozzájön szorzónak x deriváltja, de az 1. f g h x fҧ gҧ തh xҧ
Automatikus differenciálás Mi van, ha elágazás van? f g(x + x ε), h y + y ε = f g, ҧ തh + df dg g, ҧ തh g ( x)x ҧ + df dh g, ҧ തh h (തy)y ε Összegezni kell az ágakra! f-nek két argumentuma van, lesz egy két tagú összeg df + df dg dh A g tagban jön szorzónak dg a x ҧ helyen. dx A h tagban jön szorzónak dh dy x-nél a szorzó 1. az തy helyen. g x gҧ xҧ f fҧ h തh y തy y-nál a szorzó 1.
Automatikus differenciálás Lényegében az, hogy a gráfban alulról felfelé, vagy felülről lefelé számolunk, ugyan azt az eredményt adja, mert csak átzárójelezzük a lánc szabály szorzatát df dg dg dp dp dx + df dh dh dq dq dy = f Alulról indulva Felülről indulva df dg df dg dg dp dp dg dp dx + df dh dp dx + df dh dh dq dh dq dq dy = dq dy g p x h q y
Automatikus differenciálás A költségek viszont egészen mások tudnak lenni (hányszor kell egy rész-függvény deriváltját előállítani) g f h Ha redukáló jellegű a kifejezés (sok tagból lesz kevés eredmény), akkor felülről célszerű indulni p x q y Fordítva (kevés adatból állítunk elő sok eredményt), akkor alulról célszerű indulni p q r s g h x
Automatikus differenciálás Ha nem valamelyik szélsőséges esetben vagyunk, akkor baj van: Kezdhetjük a szorzat építést akármelyik pontból és két irányban haladhatunk, de: A minimális költségű kiértékelési módszer megtalálása NP nehéz probléma... f g p h q x y p q r s g h x
Differenciálás Összefoglalva: Ha sok változó szerint kell deriválnunk, akkor az automatikus differenciálás módszere minimális költséggel megadja egy számítási gráf eredményeinek deriváltjait a paraméterek szerint. g p x f h q y p q r s g h x
Mihez kezdünk a deriváltakkal? Ezek numerikus értékek, elvileg fel tudunk írni belőlük egy egyenletrendszert, de nem tudjuk zárt eljárással megoldani (abban sem lehetünk biztosak, hogy létezik-e megoldás)
Mihez kezdünk a deriváltakkal? Ezek numerikus értékek, elvileg fel tudunk írni belőlük egy egyenletrendszert, de nem tudjuk zárt eljárással megoldani (abban sem lehetünk biztosak, hogy létezik-e megoldás) De iterálni mindig lehet...
Iteratív megoldás Emlékeztető: gradiens módszer 0 α 1 tanulási ráta w n+1 = w n α df dw w n f(w) df dw α df dw
Iteratív megoldás Emlékeztető: gradiens módszer Mi kell hozzá? w n+1 = w n α df dw w n Kezdő érték w 0 A derivált (ezt már megoldottuk) Megállási feltétel f(w) α df dw df dw
Gradiens módszer Problémák: Ha rosszul indítjuk el a módszert, nem talál megoldást Ha nem figyelünk a konvergenciára, nem mindig megy bele a minimumba Beragadhat lokális minimumba A minimum közelében nagyon lecsökkenhet a konvergencia sebessége (lapos minimum) Ha valahol nagy ugrás van a deriváltban (nem analitikus viselkedés), az nagyon elronthatja a konvergenciát... f(w) α df dw df dw
Gradiens módszer Hogy néz ez ki több változóra (w W, f F)? W n+1 = W n α df dw W n Azonban ne felejtsük el a kontextust: az F függvényünk lehet egy kompozíció, a végén egy költség függvénnyel, ami pl. egy összegzett eltérést fejez ki megfigyelt {X i, Y i } adatpontoktól: F = L Yi (M W (X i )) i
Gradiens módszer W n+1 = W n α N dlyi (M Wn (X i )) i dw Ez viszont azt jelenti, hogy ha N nagy, akkor nagyon költséges kiszámolni a teljes σ i d dw -t...
Gradiens módszer W n+1 = W n α N dlyi (M Wn (X i )) i dw Sőt, a helyzet rosszabb, sokszor a véges numerikus ábrázolás miatt a sokféle gradiens összegzésekor elveszik az az információ, hogy merre is a legjobb lépni a paraméterekkel.
Sztochasztikus gradiens módszer W n+1 = W n α n dlyi (M Wn (X i )) i dw A teljes felösszegzés helyett egy kisebb mintával közelíthetjük a deriváltat: n < N (batch) Ekkor a derivált csak egy sztochasztikus becslése lesz az igazi deriváltnak: Sztochasztikus Gradiens Módszer A továbbiakban ezt mindig odaértjük, ahol deriváltat írunk!
Momentum Gradiens módszer Egy másik változata a módszernek, amikor az előző változtatás nagyságát is figyelembe vesszük valamilyen súllyal: W n+1 = α n dl Yi M Wn X i i dw + β W n W n+1 = W n + W n
AdaGrad A jó konvergenciát sokszor segíti egy prekondícionáló használata, de ezt költséges lehet megkonstruálni. Az AdaGrad megpróbál becsülni egyet: df W n+1 = W n αq 1 dw W n Ahol Q = diag n t=0 df dw t df dw t Ez lényegében skálázza α-t a korábbi deriváltak nagysága szerint. További olvasnivaló: link, link
Root Mean Square Propagation Egy másik fajta prekondícionálás az alábbi: W n+1 = W n α df Q n,wn dw W n Q n,wn = βq n 1,Wn + 1 β df dw n 2 Minden egyes súlyra léptetünk egy skálázási faktort, ami csak 1 β faktorral változik a gradiens négyzetével arányosan.
Adam Az előzőek ötvözése: W n+1 = W n α Q n,wn P n,wn P n,wn = 1 1 β 1 β 1 P n 1,Wn + 1 β 1 df dw n Korábbi gradiensek átlaga Q n,wn = 1 2 df β 1 β 2 Q n 1,Wn + 1 β 2 2 dw n Korábbi gradiensek szórása Minden egyes súlyra léptetjük a korábbi gradiensek átlagának és szórásának egy becslését, és a szórást használjuk prekondícionálásra. Link
Gradiens módszerek Sok féle gradiens módszer változat létezik, nem könnyű előre megmondani, hogy adott problémára melyik lesz a legjobb Érdemes többet is kipróbálni, illetve a paramétereikkel játszani Egy részletesebb lista többféle módszerről: link
Függvény osztályok Mi legyen a modell függvényünk?
Függvény osztályok Az előző módszerekkel tehát tudunk optimalizálni függvény kompozíciókat. Vegyük azonban észre, ha a függvények mind lineárisak, akkor a teljes kompozíció is egy lineáris függvény lesz... f x = cx + d g x = ax + b f g(x) = ca x + (cb + d)
Függvény osztályok Tehát ahhoz, hogy nem lineáris függvényeket is le tudjunk írni, szükség van arra, hogy a kompozícióban legyen nemlinearitás is.
Függvény osztályok Tehát ahhoz, hogy nem lineáris függvényeket is le tudjunk írni, szükség van arra, hogy a kompozícióban legyen nemlinearitás is. Milyen nemlinearitás legyen?
Nemlinearitások Sok féle nemlinearitást ki lehet próbálni, néhány példa: Tanh: σ x = tanh(x) Szigmoid: σ x = 1 1+e x RELU: σ x = ቊ 0, x < 0 x, x 0 Továbbiak: link
Nemlinearitások Néhány szempont, ami számít: Folytonos, folytonosan differenciálható vagy sem 0 közelében lineáris-e, vagy sem Monotonitás a függvényre és a deriváltjára Olcsó legyen kiszámolni
Nemlinearis kompozíciók Érdekesebb azonban az Univerzális Approximációs tulajdonság: N f(x) i c i σ(a i x + b i ) < ε, x Azaz, pl. az előző nemlinearitások szuperpozíciójaként minden folytonos f(x) függvény tetszőlegesen pontosan közelíthető. Vö.: tavaly: Ortogonális függvényrendszerek Pl.: Cybenko, G. (1989) link
Nemlinearis kompozíciók A valóságban azonban azt tapasztaljuk, hogy minél több nemlinearitást komponálunk: N i x = σ i a i x + b i N 1 N 2 annál jobban működik a rendszer, azaz annál jobban tudja közelíteni a célfüggvényt. Ennek az elméleti magyarázata még nyitott kérdés.
Nemlinearis kompozíciók Miért lehet mégis hasznos? Egy illusztráció: Ha a sokparaméteres hálózatot úgy fogjuk fel, hogy egy magas dimenziós térben beágyazza az adatot, akkor több nemlinearitással több lehetősége van határfelületeket találni pl. klasszifikációhoz. Forrás: link
Neurális hálózatok
Neurális hálózatok Az előzőeket összerakva: A neurális háló egy differenciálható függvény kompozíció, ami nemlinearitásokat tartalmaz. A nemlinearitás azért fontos, hogy jól közelíthessünk általános függvényosztályokat. A differenciálhatóság azért fontos, hogy automatikus deriválással előállíthassuk a gradiens módszerhez szükséges deriváltakat és a módszer konvergáljon. Igazából ennél kevesebb is elég: nekünk csak egy eljárás kell minden elemhez a kompozícióban, hogy milyen járulékot írjunk a lánc szabály szorzatába.
Rétegek A neurális hálók kompozícióinak elemeit általában rétegeknek nevezik: Viszont a bemenet is réteg (input layer) és a kimenet is (output layer) a belső rétegekre a rejtett (hidden layer) elnevezést szokás használni
Rétegek A legáltalánosabb réteg a teljesen összefüggő (fully connected) réteg: f x = Ax + b Ahol A egy sűrű mátrix, b meg egy megfelelő méretű vektor. Ennek a hálózatnak a legnagyobb a kifejező ereje, de az N 2 paraméter nagyon költséges.
Rétegek Ha kevesebb paramétert akarunk és/vagy tudjuk, hogy valamilyen eltolás invariancia van a problémánkban, akkor célszerű konvolúciót használni: f x n = i w i x n+i + b Ahol w és b is vektor, w kevesebb elemű (tipikusan néhány), mint x, és f (és b) elemszáma x w. Az ehhez tartozó deriváltakat megfelelő index eltolással kell számolni: f x n x i = w i n f x i w i = x n+i
Rétegek Pooling (subsampling): Valamilyen módon összevonja a szomszédos adatokat, például maximum, átlag, medián, stb segítségével. A szerepe az, hogy csökkenti az utána jövő rétegek méretét (paraméter számát), illetve elősegíti a méret-függetlenség kifejezését Maximum esetén a deriváltat a következő képpen számolhatjuk: f f x = max x i, = ቊ 1, x j = max(x i ) x j 0, egyébként
Rétegek
Költségfüggvények Az utolsó réteg egy hálózatban a költségfüggvény, ami valahogy skálázza az eltéréseket az elvárt adatokhoz képest. Ennek nagy szerepe van. Egyszerű esetekben általában négyzet-összeget, vagy abszolút eltérést használhatunk, esetleg logaritmikus súlyozást használhatunk. De célfeladatokra vannak jól bevált költség függvények...
Költségfüggvények Ha a feladat klasszifikáció, azaz besorolás nem átfedő csoportokba, akkor a softmax-ot célszerű használni: Softmax R n R n f x 1,, x n i = ex i σ k e x k Ez egy normalizált összeg, ahol a végén σ i f i = 1, így lehet akár valószínűségi értelmezést is adni.
Költségfüggvények Ha egymástól független, de normált értékeket kell előállítani, akkor használatos a Cross-entropy: C = 1 N x Y ln y + 1 Y ln 1 y itt Y az ismert érték, y a háló kimenete, az összegzés a kimenetek számára (N) történik.
Feed forward networks Az eddigi hálózati elemek szűrő jellegűek: (feed forward network) A belső állapotot a paraméterek (W) jellemzik Ezek csak a tanítás során változnak, amikor használjuk a hálózatot, már nem, ezért a teljes rendszer egy szokványos tiszta függvényként tekinthető Másképp fogalmazva: nincs visszacsatolás a hálózatban, nincs hurok a számítási gráfban
Feed forward networks Ezek a hálózatok tipikusan a képfeldolgozási eljárásokban használatosak, ahol az adatokban nincs időszerűség
Rekurrens neurális hálózatok (RNN) Sokszor azonban fontos az időszerűség, pl. jósolni szeretnénk korábbi eseményekből a következőt. Ezek a hálózatok már tartalmaznak visszacsatolást és belső állapotot. A visszacsatolás miatt a számítási gráf már ciklikus Az időszerűség mellett nagy előnyük, hogy változó hosszúságú kimenetet is elő tudnak állítani.
Rekurrens neurális hálózatok (RNN) A rekurrens hálózatok leginkább az írott és beszélt szöveg feldolgozásban, fordításban, idősor jóslásban, vezérléstechnikában használatosak
Long short-term memory Az egyik legegyszerűbb építőelem a Long short-term memory (LSTM): Itt x a bemenet, h az előző kimenet, c a memória, σ a nemlineáris függvény C t = σ W f h t 1, x t + b f C t 1 + σ W i h t 1, x t + b i tanh W C h t 1, x t + b C h t = σ W o h t 1, x t + b o tanh(c t ) Olvasnivaló: link
Long short-term memory Az egyik legegyszerűbb építőelem a Long short-term memory (LSTM): Ez a rész azt szabályozza, hogy a régi kimenet és az új input mennyire változtassa meg a régi állapotot (mennyire felejtődjön el a korábbi memória). C t = σ W f h t 1, x t + b f C t 1 + σ W i h t 1, x t + b i tanh W C h t 1, x t + b C h t = σ W o h t 1, x t + b o tanh(c t ) Olvasnivaló: link
Long short-term memory Az egyik legegyszerűbb építőelem a Long short-term memory (LSTM): A másik vonalon az új memóriába írandó érték és annak a súlya állítódik be C t = σ W f h t 1, x t + b f C t 1 + σ W i h t 1, x t + b i tanh W C h t 1, x t + b C h t = σ W o h t 1, x t + b o tanh(c t ) Olvasnivaló: link
Long short-term memory Az egyik legegyszerűbb építőelem a Long short-term memory (LSTM): Végül a módosított memória és a beérkezett adatok függvényében előállítjuk az új kimenetet C t = σ W f h t 1, x t + b f C t 1 + σ W i h t 1, x t + b i tanh W C h t 1, x t + b C h t = σ W o h t 1, x t + b o tanh(c t ) Olvasnivaló: link
Long short-term memory Az LSTM, és általában a rekurrens hálók tanítása nem könnyű. Nem szeretnek tanulni: nehéz rávenni őket, hogy értékeket írjanak a belső állapotba, és gyakran ragaszkodnak ahhoz, hogy identitás függvényként viselkedjenek... A rekurrens hálózatokat általában kitekerik időben N lépésig, és így számolják a gradienseket és a tanítást.
Rekurzív hálók Egy másik érdekes struktúra a rekurzív neurális hálózat: Itt valamilyen gráfon ugyan azokkal a súlyokkal, de más léptékben történik ugyan az a művelet Ez akkor hasznos, ha fontosak a hierarchikus, ismétlődő struktúrák, a kompozícionalitás Például: Mondatelemzés, parafrázis detektálás Kép értelmezése, cimkézése
Tanítási módszerek Több féle tanítási metodológia létezik, amelyek általában más feladatokra működnek jól, vagy más célokat próbálnak elérni
Tanítási módszerek Három féle tanítási paradigmát szoktak megkülönböztetni Supervised learning (felügyelt tanítás, ebből indultunk ki) Adott sok bemenet kimenet pár, és ezzel tanítunk egy hálózatot, hogy közelítse a kívánt leképezést (függvényt) Reinforcement learning (megerősítéses tanítás) Nincs adat, a háló (ágens) állapot átmenetek közül választhat, és az egyetlen visszajelzés az, hogy jutalmat/büntetést kap, ha jó átmenetet választott, vagy elért egy kívánt állapotot (hibánál büntetést nem kap, a jutalom akár nagyon ritkán is jöhet). Unsupervised learning Nincs felcimkézett adat, nem lehet mérni a hibát, az optimalizáció a statisztikai momentumok hasonlóságán alapul
Reinforcement Learning technikák Monte-Carlo Tree Search Tipikusan játékok döntési sorozatának bejárása (pl. táblajátékok: go, vagy video játékok: PacMan) Q-learning Egy Q State Action Reward függvényt tanul meg, iterációval: Q n+1 = 1 α Q n s n, a n + α r n + γ max a Q n+1 s n+1, a A Google Deep Mind ezzel játszik Atari játékokat Előző állapot Pillanatnyi jutalom Következő állapot becslése Várható jutalom ellensúlya 83
Unsupervised learning technikák Autoencoder-decoder hálózat A háló először betömöríti a bemenetét, majd vissza kell alakítania a kimenetén a bemenetet, a közbülső rétegben ekkor előáll a tömörített forma, ami kicsatolható. Backprop-al tanítható Sparse AE (jutalom a ritkaságért) Variációs AE (adott eloszlás tanulása Bayes módszerrel) Pl. ha középen csak két változó van, akkor az egy 2D-s beágyazást állít elő: 84
Unsupervised learning technikák Generative Adversarial hálózatok Két háló verseng (zero sum game), az egyiknek elő kell állítania egy adatot, a másiknak egy ilyen, és egy adott valódi adathalmazból jövő random mintáról meg kell mondania, hogy valódi, vagy generált. Ha elég okos tud lenni a felismerő fél, akkor nagyon jó generátort lehet tanítani, relatíve kicsi adathalmazzal. Példák: 3D rekonstrukció 2D képből, viselkedés jóslás Egy generált festmény: 85
Unsupervised learning technikák Generative Adversarial hálózatok További példák 86
Nehézségek Annak ellenére, hogy számos alkalmazásban nagyon jól teljesítenek a bemutatott hálózatok, vannak problémák, amikbe könnyű belefutni
Nehézségek Súlyok inicializálása: Részben az előző problémának a továbbvetülése, mert több esetben sikerült megmutatni, hogy a megfelelő inicializációval sokkal gyorsabb tud lenni a konvergencia, elkerülhető a gradiensek eltűnése. Érdemes adott probléma, vagy hálózat architektúra esetén megnézni, hogy van-e ajánlott inicializálási módszer.
Nehézségek Súlyok inicializálása: Például, a lineáris transzformációban résztvevő súlyokat célszerű a Xavier módszerrel inicializálni, azaz olyan Gauss eloszlású értékekkel, amelyek átlaga nulla, szórása pedig: vagy Var W = 1 n in Var W = 2 n in + n out Olvasnivaló: link, link ahol n in a bejövő értékek, n out a kimenő értékek száma.
Nehézségek Gradiensek eltűnése: Ha elég sok réteget rakunk egymás után, akkor a nemlinearitások halmozódása gondot jelenthet, főleg akkor, ha szigmoid alakúak: A lánc szabályban felhalmozódó deriváltak nagyon kicsik, ha több rétegben is a szigmoid széle felé kerül az aktuális érték. Ez sok réteg esetén azt eredményezheti, hogy nagyon belassul a tanítás, esetleg teljesen meg is áll. A RELU esetén ez nem probléma, de nem minden feladathoz jó a RELU, mert negatív értékekre nem terjeszt vissza hibát
Nehézségek Tanítás problémái: A rendszer nem tanul pl. véletlenül rosszul sikerült az inicializáció, beragadt az optimizer,... A rendszer túltanul (overfitting) akkor szokott lenni, ha a hálónak sokkal több szabadsági foka van, mint a tanító adathalmaz és a háló elkezd a tanítóhalmaz sajátosságaira specializálódni
Nehézségek Tanítás problémái: A rendszer látszólag jól tanul (csökken a költség fv), de mégsem jó az eredmény Tipikusan 3 halmazzal szokás dolgozni, amelyek diszjunktak: Az első a tanítóhalmaz, ami alapján optimalizáljuk a súlyokat A második a validációs halmaz, ahol ellenőrizzük, hogy tud-e a háló általánosítani a tanítóhalmazon kívülre, és nem történt-e túltanulás A harmadik halmaz a teszt halmaz, ahol valójában mérünk metrikákat, hogy mennyire jól teljesít a hálózat
Nehézségek Tanítás problémái: Túltanulás: A tanítóhalmazon (kék) csökken a költségfüggvény, de a validációs halmazon (piros) nő! A rendszer nem általánosít, csak megjegyzi a tanítóhalmazt.
Tanítás Egy jól működő tanítás, kb. így fest: A tanító és a teszt halmazon is csökken a hiba, és kb. azonos nagyságrendűek.
Tanítás után Betanítottunk sikeresen egy hálót 1 millió paraméterrel. De vajon mindre szükség van? Példák Pruning: A hálók paramétereinek nagy része nagyon kicsi, közel nulla. Szisztematikus explicit kinullázással és újratanítással akár 75-90%-a a paramétereknek kiküszöbölhető jelentős minőségi romlás nélkül.
Tanítás után Mennyire megbízható a háló? Nem tudni... Rosszindulatú támadások: A tanítóhalmaz és a háló ismeretében könnyen konstruálható olyan bemenet, ami Az ember számára teljesen megkülönböztethetetlen a tanítóhalmaz egy elemétől, de a háló nagyon magabiztosan félreklasszifikálja Vagy olyan elemeket tartalmaz, amit az ember zajnak ítél, de a háló számára kulcsfontosságú azonosító elem. Forrás
Szoftveres rendszerek Ha valaki el akar kezdeni neurális hálókkal ismerkedni, számos nagy keretrendszer érhető el, amelyek magas szintű, technikai részletektől mentesen teszik elérhetővé ezeket a módszereket. Néhány példa: Tensorflow PyTorch MxNet Theano, Caffe (elavultak, nem fejlesztik tovább)