Remove ads
From Wikipedia, the free encyclopedia
A mesterséges neurális hálózat, mesterséges neuronháló vagy ANN (artificial neural network) biológiai ihletésű szimuláció. Fő alkalmazási területe a gépi tanulás, melynek célja ezeknek a hálóknak a tanuló rendszerként történő gyakorlati alkalmazása. Gráf alapú modell, melyben rétegekbe rendezett mesterséges neuronok kommunikálnak egymással nemlineáris aktivációs függvényeken keresztül. A legalább három rétegbe rendezett, nemlineáris aktivációs függvényt használó neurális hálózat univerzális függvényapproximátor,[1] a visszacsatolásokat, rekurrenciát tartalmazó architektúrák pedig Turing-teljességgel rendelkeznek, így képesek megoldani bármilyen problémát vagy futtatni bármilyen algoritmust, amit számítógép segítségével meg lehet oldani vagy futtatni lehet.[2]
Tanításuk általában a hiba-visszaterjesztéssel (backpropagation of errors) kombinált gradiensereszkedéssel történik, de számos alternatív algoritmus is elérhető ezeken kívül.
A mesterséges neuron ma is használt modellje a Hebb tanulásban és a küszöblogikában gyökerezik, előbbi leírta, hogy a tanulás nem passzív folyamat, hanem az ideghálózatban ideiglenesen vagy véglegesen bekövetkező biokémiai és fiziológiai változások összessége, az úgynevezett neuroplaszticitás, mely szerint az együtt tüzelő neuronok egymás iránt fogékonyabbak, egymás jelére érzékenyebbek lesznek.[3] A küszöblogika a neuron egyik első modellje, a neuront számítási egységként kezeli, melynek több bemenete és egy kimenete van (a biológiai neuron számos dendritjének és egyetlen axonjának analógiájára). A bemenetekhez egyedi súlyok tartoznak, melyekből lineáris kombinációval előállítható a neuron izgatottsága. Ha az izgatottság egy megadott küszöbértéket átlép, a neuron "tüzel", kimenete 1, különben 0.[4] Ezt a neuronmodellt használta a Rosenblatt-perceptron, mely a 20. század közepén hatékony képfelismerő algoritmus volt.[5]
A perceptron hátránya, hogy kettőnél több réteg esetén a tanítása nehezen kivitelezhető, ugyanis azok a gradiensereszkedések, melyek egy veszteségfüggvényt próbálnak iteratív módon minimalizálni, és ehhez a függvény gradiensével számolnak, alkalmatlanak a nem differenciálható küszöblogika tanítására. Más tanító algoritmusok (pl. differenciál-evolúció, hegymászó algoritmus) pedig a gradiensereszkedéshez képest sokkal lassabban konvergálnak. A kettőnél több rétegű (rejtett rétegeket tartalmazó) perceptron esetében a rejtett réteg tanítása szintén egy nehéz probléma, akkor is, ha a küszöblogikát a modernebb szigmoid jellegű aktivációs függvényeket alkalmazó szigmoidneuronokra cseréljük. Egy évtizeddel később bebizonyították, hogy a többrétegű, küszöblogikán alapuló perceptron csupán lineáris döntési határ képzésére képes, függetlenül attól, hogy hány réteggel látják el azt.[6] A leírt nehézségekből fakadóan a mesterséges intelligencia kutatásban beköszöntött egy kevéssé termékeny időszak.
A mesterséges intelligencia telét a hiba-visszaterjesztés algoritmus (backpropagation of errors) leírása törte meg, mely lehetővé tette a rejtett rétegeket tartalmazó, differenciálható aktivációs függvénnyel ellátott neurális hálózatok tanítását gradiensereszkedéssel. Az új felfedezés, a számítási kapacitás exponenciális növekedése és a videókártyák lineáris algebra gyorsítóinak általános célú felhasználhatósága (GPGPU) lehetővé tette új neurális architektúrák feltalálását és azok gyakorlati alkalmazását.
További fontosabb közlemények, architektúrák a teljesség igénye nélkül:
A mesterséges neuron a neurális hálózat elemi számítási egysége, a biológiai neuron erősen leegyszerűsített modellje. A neuronokat általában nem önmagukban modellezzük, hanem sok ugyanolyan neuront egy rétegként értelmezünk, ekkor a legtöbb neurális számítás felírható mátrixműveletekként. A pontos művelet, amelyet egy adott réteg végez adja a réteg típusát, a hálózatban alkalmazott rétegek száma, típusa és sorrendje az adott neurális hálózat architektúrája.
Zárójelben az implementációkban, programkönyvtárakban gyakran használt neve a rétegnek.
A neurális hálózatok rendszerint legalább három funkcionálisan és strukturálisan jól elkülöníthető részből állnak:
A kernel trükköt alkalmazó tanuló algoritmusoktól vett analógiával kijelenthetjük, hogy neurális hálózatok esetében a rejtett rétegek egy konfigurálható, tanulható kernelként működnek, ahol a kimeneti réteg az osztályozó.[12]
A neuronrétegek között sokféle aktivációs függvényt alkalmazhatunk. Ezeket jellemzően elemenként értékeljük ki a bemeneti mátrixra, egyes különleges esetekben a bemenet többi elemével is számolunk.
A gradiensereszkedés kivitelezése végett választanunk kell egy olyan függvényt, mely deriválható és egy objektív számértékként összefoglalja a hálózat hibáját a kimenet és a várt kimenet ismeretében. Számos veszteségfüggvény létezik a gépi tanulás témakörében, neurális hálózatok esetében a leggyakrabban alkalmazott veszteségfüggvények a következők:
De a fentiek mellett alkalmazható a támasztóvektor-gépeknél használt Hinge-veszteségfüggvény vagy a Kullback-Leibler divergencia is.
A neurális hálózatok, különösen a mély architektúrák rendkívül ki vannak téve a statisztikai túlillesztés problémájának. Ennek kiküszöbölése végett regularizációs technikákat vethetünk be. Az alapelv az, hogy regularizált tanulás esetén a megtanult modell általánosabb lesz a regularizálatlan modellhez képest.
A tanuló fázisban meghatározzuk egy neurális hálózat kimenetének hibáját egy differenciálható hibafüggvénnyel, majd megbecsüljük az egyes súlyok hozzájárulását ehhez a hibához a hibafüggvény súlyok tekintetében vett gradiensének meghatározásával. Egyszerű esetben ezt a gradienst kivonjuk a súlyokból, ezzel olyan irányba módosítjuk a súlyokat, ami garantáltan csökkenti a veszteségfüggvényt. Azonban egyes esetekben a gradiens önmagában csak lassan képes biztosítani a konvergenciát. Ilyen esetekben a konvergencia meggyorsítására a gradiensereszkedés algoritmust különböző kiterjesztésekkel láthatjuk el, ezeket a technikákat, illetve a gradienssel nem is számoló egyéb technikákat nevezzük optimalizálóknak.
Tipikus gradiens alapú optimalizálók:
A számítási kapacitás növekedésével a neurális hálózatok különféle területeken való feltörekvésével egyre összetettebb architektúrák jelennek meg, melyek jellegzetesen halmozzák egymásra a különböző típusú neuronrétegeket (mélyülnek) vagy változatos elágazásokat tartalmaznak. A neurális hálózatok mélységének növekedésével növekszik azok absztrakciós képessége, a különböző mélységi szinteken álló rétegek egyre összetettebb feladatok megoldására válnak képessé, azonban új típusú problémák megjelenésével járnak együtt.[18]
A mély tanulás (Deep Learning) egy hívószó, mely a fenti problémakörre utal.
A mesterséges neurális hálózatok tanítása minden esetben egy felügyelt regressziós problémára kerül visszavezetésre, de kivitelezhető osztályozás és felügyeletlen tanítás is. A hálózatok működésében két fázist különíthetünk el: tanítási fázisban a ismert bemeneti paraméterek és várt kimenetek ismeretében a súlyokat változtatjuk úgy, hogy egy veszteségfüggvény értékét (például az átlagos négyzetes hibát) minimalizáljuk ezzel. A feltanított neurális hálózat a predikciós fázisban ezután ismeretlen bemenet átadásakor kimenetet képez, mely lehet például egy kategóriába való tartozás valószínűsége.
A jól leírható eset a három rétegű, összesítőként lineáris kombinációt, aktivációs függvényként valamilyen folytonos függvényt alkalmazó, előreterjesztéses (visszacsatolást nem tartalmazó) hálózat, amelynek esetében levezetjük a tanítás folyamatát.
Tanításkor jellemzően nem egyetlen bemeneti vektort adunk át, hanem egy részmintát képzünk az adatainkból és azokra egyszerre határozzuk meg a veszteségfüggvényünk gradiensét, majd a kapott gradienseket átlagoljuk az egyes súlyokra. m részmintaméret és d dimenziós bemenet esetében tehát a bemenetünk a következő mátrix lesz: .
A hálózat rejtett rétegének súlyait és eltolósúlyait a következőképpen definiálhatjuk: , ahol Wh a súlymátrix, bh pedig az úgynevezett eltolósúly-vektor.
A rejtett réteg által végzett művelet a következő: , ahol gh a rejtett réteg aktivációs függvényét jelöli. A bemeneti mátrixot megszorozva a súlymátrixszal, az eredeti bemenetet neurontérbe transzformáljuk. Az eltolósúly a bemenetekben fellelhető esetleges torzítás kiküszöbölése végett van jelen. A transzformáció eredményére elemenként a logisztikus függvényt hívjuk, mely 0 és 1 közé szorítja a kimenetet. A rejtett réteg kimenete, .
Az utolsó réteg a kimeneti réteg, melyet szintén egy súlymátrix és egy eltolósúly-vektor definiál: , ahol v a kimeneti neuronok száma.
A kimeneti réteg a következő műveletet végzi: , ahol go a kimeneti réteg aktivációs függvényét jelöli.
A hálózat kimenetének hibáját a várt kimenet ismeretében egy folytonos függvény, az úgynevezett veszteségfüggvény segítségével számszerűsítjük. A hálózat egyes súlyainak hozzájárulása a hibához a veszteségfüggvény súlyok tekintetében vett gradiensével egyenlő: , ahol w a hálózat összes súlyát tartalmazó képzeletbeli vektor, C pedig a veszteségfüggvény (például az átlagos négyzetes eltérés).
A kimeneti réteg súlyai tekintetében vett gradiens a láncszabállyal határozható meg: .
A rejtett rétegek hibájának meghatározásához alkalmaznunk kell a hiba-visszaterjesztést. Ehhez észre kell vennünk, hogy a lineáris kombinációig (tehát az aktivációs függvény hívása előttig) visszaszámított gradiens kétszer is felhasználásra kerül: egyrészt meghatározható általa a súlyok gradiense, másrészt az előző réteg kimenetének tekintetében vett gradiens, mely az előző réteg tanításához kell. A lineáris kombinációig visszaszámított gradiensre bevezetjük a delta-jelölést: , ahol O* a kimeneti réteg lineáris kombinációját jelöli, pedig jelen definíció szerint a kimeneti réteg hibája vagy deltája és a következőképpen határozzuk meg: , aholg az aktivációs függvény deriváltja, melyet elemenként kiértékelünk az O mátrixra, pedig mátrixok elemenkénti szorzását jelöli. A delta jelöléssel felírjuk a kimeneti súlyok gradiensét:, ahol T felső indexben a transzponálást jelöli.
A rejtett réteg hibájának meghatározásához vissza kell terjeszteni a gradienst a rejtett réteg kimenetéig, majd kiszámítani a rejtett réteg deltáját, végül a deltából a súlyok gradiensét:
eljuttat minket a rejtett réteg kimenetének gradienséig.
a rejtett réteg deltája (gradiens a lineáris kombinációnál).
a rejtett réteg súlyainak gradiense.
Az eltolósúlyok gradiense és .
Ha neurális hálózat minden rétegének és minden súlyának meghatároztuk a gradiensét, a tanulási rátával (η) modulált gradiens kivonható a súlyok aktuális értékéből, így minden súlyt olyan irányba térítünk el, amely a veszteségfüggvény értékének csökkenéséhez vezet:
Ezzel zárul egy tanulási iteráció. A következő iterációban újra részmintát képzünk a tanuló adatsorból, kimenetet képzünk, hibát számolunk és visszaterjesztünk, majd gradiensereszkedést hajtunk végre. A tanuló adatsor egyszer teljes végigjárását nevezzük egy tanulókorszaknak. Az iteráció során a veszteségfüggvény kimenetét nyilvántartjuk és addig folytatjuk a tanítást, míg a veszteséget lehetőleg minimálisra csökkentjük. Ekkor elmondható, hogy az algoritmus egy minimumra konvergált.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.