csonk Mi az a Gradiens Descent? - Egyesüljetek.AI
Kapcsolatba velünk
AI mesterkurzus:

AI 101

Mi az a Gradiens Descent?

mm
korszerűsített on

Mi az a gradiens süllyedés?

Ha olvasott a neurális hálózatok képzéséről, szinte biztosan találkozott már a „gradiens süllyedés” kifejezéssel. Színátmenet az elsődleges módszer a neurális hálózat teljesítményének optimalizálására, csökkentve a hálózat veszteség/hibaarányát. A gradiens süllyedés azonban kissé nehezen érthető lehet azok számára, akik még nem ismerik a gépi tanulást, és ez a cikk arra törekszik, hogy megfelelő megérzéseket adjon a gradiens süllyedés működéséhez.

A gradiens süllyedés egy optimalizálási algoritmus. Egy neurális hálózat teljesítményének javítására szolgál a hálózat paramétereinek módosításával oly módon, hogy a hálózat előrejelzései és a hálózat tényleges/várt értékei (amelyeket veszteségnek nevezünk) közötti különbség a lehető legkisebb legyen. A gradiens süllyedés felveszi a paraméterek kezdeti értékeit, és számításon alapuló műveleteket használ, hogy az értékeket azokhoz az értékekhez igazítsa, amelyek a lehető legpontosabbá teszik a hálózatot. Nem kell sok számítást ismernie ahhoz, hogy megértse a gradiens süllyedés működését, de értenie kell a színátmeneteket.

Mik azok a színátmenetek?

Tételezzük fel, hogy van egy grafikon, amely leírja a neurális hálózat által elkövetett hibák mennyiségét. A grafikon alja a legalacsonyabb hibapontokat jelöli, míg a grafikon teteje az, ahol a legnagyobb a hiba. Szeretnénk a grafikon tetejétől lefelé haladni az aljára. A gradiens csak egy módja annak, hogy számszerűsítsük a hiba és a neurális hálózat súlya közötti kapcsolatot. E két dolog kapcsolata lejtőként ábrázolható, helytelen súlyokkal, amelyek több hibát okoznak. A lejtő/lejtő meredeksége azt jelzi, hogy a modell milyen gyorsan tanul.

A meredekebb lejtő azt jelenti, hogy a hiba nagymértékben csökken, és a modell gyorsan tanul, míg ha a lejtő nulla, a modell egy fennsíkon van, és nem tanul. A lejtőn lefelé haladhatunk a kisebb hiba felé, ha modellünkhöz gradienst, mozgásirányt (a hálózat paramétereinek változását) számítunk.

Csak kissé toljuk el a metaforát, és képzeljük el a dombok és völgyek sorozatát. Le akarunk jutni a domb aljára, és megtalálni a völgynek azt a részét, amelyik a legkisebb veszteséget jelenti. Amikor elindulunk a domb tetején, nagy léptekkel lefelé haladva biztosak lehetünk benne, hogy a völgy legalsó pontja felé tartunk.

Azonban ahogy közeledünk a völgy legalacsonyabb pontjához, a lépéseinknek kisebbnek kell lenniük, különben túlléphetjük a valódi legalacsonyabb pontot. Hasonlóképpen előfordulhat, hogy a hálózat súlyainak módosításakor a korrekciók valóban távolabbra vihetik a legkisebb veszteség pontjától, és ezért a korrekcióknak idővel kisebbnek kell lenniük. Egy dombról a legalacsonyabb veszteségű pont felé történő leereszkedéssel összefüggésben a gradiens egy vektor/utasítás, amely részletezi az utat, amelyen meg kell haladnunk, és hogy mekkora legyen a lépéseink.

Most már tudjuk, hogy a gradiensek olyan utasítások, amelyek megmondják, hogy melyik irányba haladjunk (mely együtthatókat érdemes frissíteni), és milyen nagy lépéseket kell megtennünk (mennyit kell frissíteni az együtthatókat), megvizsgálhatjuk a gradiens kiszámításának módját.

Gradiens és Gradient Descent számítása

A gradiens süllyedés a nagy veszteség helyén kezdődik, és többszöri iterációval a legkisebb veszteség irányába lép, az optimális súlykonfiguráció megtalálása érdekében. Fotó: Роман Сузи a Wikimedia Commonson keresztül, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

A gradiens süllyedés végrehajtásához először a gradienseket kell kiszámítani. sorrendben a gradiens kiszámításához, ismernünk kell a veszteség/költség függvényt. A derivált meghatározásához a költségfüggvényt fogjuk használni. A számításban a derivált csak egy függvény lejtésére vonatkozik egy adott pontban, tehát alapvetően csak a domb lejtését számítjuk ki a veszteségfüggvény. A veszteséget úgy határozzuk meg, hogy az együtthatókat a veszteségfüggvényen keresztül futtatjuk. Ha a veszteségfüggvényt „f”-ként ábrázoljuk, akkor kijelenthetjük, hogy a veszteség kiszámításának egyenlete a következő (csak az együtthatókat futtatjuk a választott költségfüggvényünkön):

Veszteség = f (együttható)

Ezután kiszámítjuk a deriváltot, vagy meghatározzuk a meredekséget. A veszteség deriváltjának lekérése megmondja, hogy melyik irány felfelé vagy lefelé halad a lejtőn, azáltal, hogy megadja a megfelelő előjelet, amellyel együtthatóinkat korrigálhatjuk. A megfelelő irányt „delta”-ként fogjuk képviselni.

delta = derivált_függvény(veszteség)

Meghatároztuk, hogy melyik irány lefelé a legalacsonyabb veszteség pontja felé. Ez azt jelenti, hogy frissíthetjük az együtthatókat a neurális hálózat paramétereiben, és remélhetőleg csökkenthetjük a veszteséget. Frissítjük az együtthatókat az előző együtthatók alapján, mínusz az irány (delta) és a változás nagyságát szabályozó argumentum (a lépésünk nagysága) által meghatározott megfelelő értékváltozásból. A frissítés méretét szabályozó argumentumot a „tanulási arány” és „alfa”-ként fogjuk ábrázolni.

együttható = együttható – (alfa * delta)

Ezután csak ismételjük ezt a folyamatot, amíg a hálózat a legalacsonyabb veszteség pontja körül konvergál, aminek közel nullának kell lennie.

Nagyon fontos a tanulási sebesség (alfa) megfelelő értéke kiválasztása. A választott tanulási sebesség nem lehet sem túl kicsi, sem túl nagy. Ne feledje, hogy ahogy közeledünk a legkisebb veszteség pontjához, lépéseinknek kisebbnek kell lenniük, különben túllépjük a legkisebb veszteség valódi pontját, és a másik oldalon kötünk ki. A legkisebb veszteség pontja kicsi, és ha a változás mértéke túl nagy, a hiba ismét növekedhet. Ha a lépésméretek túl nagyok, a hálózat teljesítménye továbbra is a legalacsonyabb veszteség pontja körül ugrál, túllépve az egyik, majd a másik oldalon. Ha ez megtörténik, a hálózat soha nem fog konvergálni a valódi optimális súlykonfigurációhoz.

Ezzel szemben, ha a tanulási ráta túl kicsi, a hálózatnak rendkívül sok időbe telhet, amíg konvergál az optimális súlyokhoz.

A gradiens süllyedés típusai

Most, hogy megértettük, hogyan működik általában a gradiens süllyedés, vessünk egy pillantást a különbözőre a gradiens süllyedés típusai.

Kötegelt gradiens süllyedés: A gradiens süllyedés ezen formája végigfut az összes betanítási mintán az együtthatók frissítése előtt. Ez a fajta gradiens süllyedés valószínűleg a gradiens süllyedés számítási szempontból leghatékonyabb formája, mivel a súlyok csak akkor frissülnek, ha a teljes köteg feldolgozása megtörtént, ami azt jelenti, hogy összesen kevesebb frissítés történik. Ha azonban az adatkészlet nagyszámú betanítási példát tartalmaz, akkor a kötegelt gradiens leereszkedés meghosszabbíthatja a betanítást.

Sztochasztikus gradiens süllyedés: A sztochasztikus gradiens süllyedésben csak egyetlen betanítási példa kerül feldolgozásra a gradiens süllyedés és a paraméterfrissítés minden iterációjához. Ez minden képzési példánál előfordul. Mivel csak egy betanítási példa kerül feldolgozásra a paraméterek frissítése előtt, ez általában gyorsabban konvergál, mint a Batch Gradient Descent, mivel a frissítések hamarabb történnek. Mivel azonban a folyamatot a betanítási halmaz minden elemén el kell végezni, meglehetősen hosszú ideig tarthat a befejezés, ha az adatkészlet nagy, ezért szükség esetén más gradiens süllyedéstípusok valamelyikét kell használni.

Mini-Batch Gradient Descent: A Mini-Batch Gradient Descent úgy működik, hogy a teljes képzési adatkészletet felosztja alszakaszokra. Kisebb mini kötegeket hoz létre, amelyek a hálózaton keresztül futnak, és amikor a mini-kötegelt felhasználták a hiba kiszámításához, az együtthatók frissítésre kerülnek. A Mini-batch Gradient Descent középutat talál a sztochasztikus gradiens süllyedés és a kötegelt gradiens süllyedés között. A modellt gyakrabban frissítik, mint a Batch Gradient Descent esetében, ami valamivel gyorsabb és robusztusabb konvergenciát jelent a modell optimális paraméterei között. Számítási szempontból is hatékonyabb, mint a sztochasztikus gradiens süllyedés

Blogger és programozó szakterületekkel Gépi tanulás és a Deep Learning témákat. Daniel abban reménykedik, hogy segíthet másoknak az AI erejét társadalmi javára használni.