Nem olyan régen volt szó a Mesterséges Neurális Hálózatok legegyszerűbb fajtájáról a Feed Forward típusról. A mai posztban egy ennél összetettebb megoldást fogunk megvizsgálni: a Ismétlődő Neurális Hálózat1 (INH) típust. Amíg a FF egyedi megfigyelések vizsgálatára alkalmas, addig INH sorozatokra alkalmazható.
A Feed Forward típus esetén lényegében független és azonos eloszlású véletlenszerű megfigyelésekkel tanítjuk a rendszert. Vagyis feltételezzük, hogy a van egy közös nem ismert állandó modell, amiből sikerül úgy mintákat vennünk, hogy ezek a mintavételek nem befolyásolják egymást.
De mi van akkor, ha nem igaz a mintavételek függetlensége? A leggyakrabban előforduló ilyen adatok az idősorok. Ilyenkor feltételezzük, hogy a megfigyelések sorrendje maga is hordoz információt. A FF komoly hiányossága, hogy nem képes a megfigyelések sorrendjét figyelembe venni. Így született meg a Ismétlődő Neurális Hálózat koncepciója 1986-ban David Rumelhart munkájának köszönhetően.
Maga az INN, nem más mint egy rakás, konkrétan t mennyiségű, FF egymás után. Ahol a t a sorszám a megfigyelt sorozatunkban. Minden egyes FF lényegében egy konkrét időpillanat modellezésért felelős. Valahogy így:2

A fenti ábrán a zöld négyzetek a FF hálózat. Az alul lévő értékek meg az egyes időpillanatokban észlelt megfigyelések. Mint látható egyesével, az észlelés sorrendjének megfelelően dolgozzuk fel az adatokat. Talán nem egyértelmű, de csak egy Feed Forward hálózatunk van. Ugyanazt a FF-t tanítjuk újra meg újra. Ami új, hogy a megfigyelések mellett egy új tulajdonságot is használunk a tanulásra. Ez az új tulajdonság meg nem más, mint az előző megfigyelésen alapuló előrejelzés, a un. “Rejtett állapot”. Tehát a Rejtett állapotot a előző megfigyelés kimenete alapján állítjuk elő:

Majd a FF együtt tanulja meg ezt a Rejtett állapotot és az új megfigyelést, és számítja a a következő időpillanatra vonatkozó Rejtett állapotot:

Vagyis nem történik más, mint, hogy párhuzamosan vizsgáljuk az előző időpillanatunk állapotát és a jelenlegi megfigyelés értékeit. Így lehetőség van arra, hogy megvizsgáljuk mekkora súllyal járul hozzá a múltbeli állapot a jelenlegihez. És fordítva, a jelenlegi állapot menyiben független a múltbeli állapottól.
Vegyük észre, hogy menyire elegáns ez Hálózati modell. Lényegében néhány sorban le lehet programozni:3
class RNN: # ... def step(self, x): #Rejtett állapot frissítése self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) # kimenet számítása y = np.dot(self.W_hy, self.h) return y rnn = RNN() y = rnn.step(x)
Ahol:
— a Rejtett állapot súlya
-
— a megfigyelés súlya
-
— a kimeneti súlya
-
— a Rejtett állapot
-
— a megfigyelések
Az INH meglepően jól teljesített számtalan esetben: képklasszifikáció, beszéd felismerés, idősorok előrejelzése stb. Akit érdekel Andrej Karpathy-nak van erről egy nagyon jó blogbejegyzése: The Unreasonable Effectiveness of Recurrent Neural Networks.
Eltűnő Gradient probléma
1986 óta sok mindent történt a Neurális Hálózatok terén. Így talán nem árulok el titkot azzal, hogy a fenti alapkoncepciónak, amit jelenleg Teljesen ismétlődőnek neveznek, több módosított változata is megjelent az idők során. Talán a legismertebb közülük a Hosszú Munkamemóriájú Neurális Hálózat.
Ennél érdekesebb kérdés, hogy miért volt szükség a INH továbbfejlesztésére. Sajnos a modellnek van egy problémája a Visszajátszással kapcsolatban. Ezt a problémát Eltűnő Gradient problémának nevezik. Idézzük fel a Mesterséges Neurális Hálózat alapjai – 2. rész (12) képletét, a tanulással kapcsolatban:
(1)
Ahol:
— a gradient descent tanulási rátája.
— menyiben járul hozzá az adott súly a Hibához
— egy adott tulajdonsághoz tartozó súly
A visszajátszás során minden egyes korábbi időpillanatra nézve ki kell számolnunk a parciális deriváltat, és annak megfelelően frissíteni a -t. A probléma gyökere, hogy sok aktivációs függvény egy széles bemeneti tartományt egy korlátozott kis méretű kimeneté alakítja. Vegyük például a fentebb is használt Hiperbolikus tangens függvényt. Ennek a kimeneti értéke minden esetben -1 és 1 közötti érték:
Ez ahhoz vezet, hogy lényegében összenyomjuk a bemeneti tartományt, vagyis széles bemeneti tartomány viszonylag kis kimeneti tartományban fog megjelenni. A tanh függvénynél maradva, például a mínusz végtelen és a -2,5 közötti széles x tartomány minden értéke nagyjából mind -1 értékként fog megjelenni a kimenetben. Nem nehéz belátni ennek a problematikus voltát. Ehhez tegyük hozzá, hogy a számítógépek nem képesek folytonos számokkal dolgozni, és már látjuk is a problémát. Amikor deriváljuk ezt a függvényt, lényegében nem egy konkrét számot kapunk hanem egy tartományt a bemeneti értékből, ami bizonyos esetekben igen széles lehet.
Persze ez a probléma már a Feed Forward Neurális Hálózatokat is érinti. Lényegében minden Visszajátszást használó Hálózat szenved tőle. Viszont a INH esetében a probléma hatványozódik minden egyes feldolgozott mintavétel során. Az első megfigyelés esetén összenyomjuk a kimeneti értéket a tanh segítségével. Ezt pedig mint mint megint átengedünk az Aktivációs függvényen a következő megfigyelés feldolgozása során. Vagyis a már összenyomott tartományt még tovább zsugorítjuk. És ez ismétlődik minden egyes új megfigyelés esetén. Könnyű belátni, hogy ez a tömörítés egy bizonyos számú megfigyelés után már olyan mértékű, hogy a parciális deriválás során nem tudunk lényegi különbséget tenni a bementi értékek között. Más szóval eltűnik a gradiens.
Ennek köszönhetően a Ismétlődő Neurális Hálózat csak korlátozottan képes hosszabb sorozatok tanulására. Úgy is mondhatjuk, hogy csak Munkamemóriája van.
Lábjegyzet
- Angolul: Recurrent Neural Network
- Szokásommal ellentétben most hozott ábrákkal fogok dolgozni. Ennek oka, hogy Michael Nguyen olyan kiváló munkát végzet ilyen téren, amit nehéz lenne túlszárnyalni. A fenti ábrák a Illustrated Guide to LSTM’s and GRU’s bejegyzéséből származnak, én csak magyarítottam őket, ahol kellet.
- A kód forrása a fentebb már említett Andrej Karpathy: The Unreasonable Effectiveness of Recurrent Neural Networks.
Irodalom
- Andrej Karpathy: The Unreasonable Effectiveness of Recurrent Neural Networks.
- Christopher Olah: Understanding LSTM Networks
- Michael Nguye: Illustrated Guide to LSTM’s and GRU’s