AI kezdőknek · Bevezetés a neurális hálókba · Lecke 05

Keretrendszerek és a túlillesztés

Bemutatja, miért nem érdemes neurális hálót nulláról, saját kódból tanítani, milyen szerepet tölt be a PyTorch és a TensorFlow, és mi az a túlillesztés, ami a gépi tanulás egyik leggyakoribb buktatója.

Vissza a tananyaghoz


8%Tanítóhiba34%Validációshiba
Túltanításnál a modell a tanító adaton jól, az újakon rosszul teljesít.

Miért kellenek keretrendszerek

Egy neurális háló hatékony tanításához két dologra van szükség. Az első a tenzorokon végzett műveletek, vagyis a szorzás, összeadás és olyan függvények kiszámítása, mint a szigmoid vagy a softmax. A második az összes kifejezés gradiensének meghatározása, hogy elvégezhető legyen a gradiens ereszkedésen alapuló optimalizáció.

Az első feladatra a numpy könyvtár is alkalmas, de a gradiensek kiszámításához külön mechanizmus kell. Ha valaki saját kézzel írt keretrendszerrel próbálkozik, minden derivált függvényt manuálisan kell beprogramoznia a visszaterjesztést végző lépésbe. Egy jó keretrendszer ehelyett automatikusan kiszámítja bármely, általunk definiált kifejezés gradiensét. Ezt a képességet automatikus differenciálásnak, röviden autogradnek nevezik.

Emellett fontos, hogy a számítások GPU-n vagy más speciális hardveren, például TPU-n is lefuthassanak, hiszen egy mély neurális háló tanítása rengeteg műveletet igényel, és ezek párhuzamosítása jelentősen felgyorsítja a folyamatot.


PyTorch és TensorFlow

Jelenleg két keretrendszer uralja a mély tanulás világát, a TensorFlow és a PyTorch. Mindkettő alacsony szintű API-t kínál a tenzorokkal végzett műveletekhez, CPU-n és GPU-n egyaránt. Emellett mindkettőhöz tartozik egy magasabb szintű réteg is, a TensorFlow-hoz a Keras, a PyTorch-hoz pedig a PyTorch Lightning.

A magas szintű API gyors eredményt hoz, mert nem kell a részletekkel foglalkozni. Az alacsony szintű API viszont sokkal nagyobb kontrollt ad a tanítási folyamat felett, ezért kutatási környezetben, új architektúrák kipróbálásánál gyakran ezt választják. A két megközelítés nem kizárja, hanem kiegészíti egymást. Lehet saját réteget építeni alacsony szintű API-val, majd azt beilleszteni egy magas szintű API-val felépített nagyobb hálóba, vagy fordítva, a magas szintű API-val definiált hálóhoz saját, alacsony szintű tanítási ciklust írni. Mindkét API ugyanazokra az alapfogalmakra épül, ezért jól együttműködnek.

Kezdéskor érdemes az alacsony szintű API-val és a tenzorokkal indulni, mert ez adja meg az alapos megértést arról, hogyan működik egy neurális háló a motorháztető alatt. Aki gyorsan szeretne eredményt látni, és nem akar sok időt tölteni a részletekkel, nyugodtan ugorhat egyenesen a magas szintű API-ra épülő megoldásokhoz.


Alacsony szintű API

  • Számítási gráfot épít a tenzorműveletekből
  • Teljes kontroll a tanítási folyamat felett
  • Kutatásnál, új architektúráknál választják
  • Ezzel érdemes kezdeni a mély megértéshez

Magas szintű API (Keras, Lightning)

  • A háló rétegek egymásutánja
  • Adat előkészítés, majd egyetlen fit hívás
  • Gyors eredmény, kevés részlettel
  • A kettő kombinálható is egymással

Mi az a túlillesztés

A túlillesztés, angolul overfitting, a gépi tanulás egyik legfontosabb és leggyakrabban félreértett fogalma. Képzeljünk el egy egyszerű feladatot, amelyben öt pontra kell egy görbét illeszteni. Egy két paraméteres lineáris modell egyenes vonalat rajzol, amely nem megy át pontosan mindegyik ponton, a tanítási hibája mondjuk 5,3, a validációs hibája pedig 5,1, vagyis a kettő közel áll egymáshoz.

Egy hét paraméteres, jóval bonyolultabb modell viszont pontosan áthaladhat mind az öt ponton, így a tanítási hibája nulla lesz. Csakhogy ez a modell nem az adatok mögötti valódi mintázatot tanulta meg, hanem szó szerint bemagolta a tanítópontokat, ezért a validációs hibája nagyon magas, akár 20 is lehet. Ez a jelenség a túlillesztés, vagyis a modell "gazdagsága", a paraméterek száma és a rendelkezésre álló tanítási minták száma közötti egyensúly felborulása.

A túlillesztésnek jellemzően három forrása van.


Lineáris modell, tanítási hiba5,3
Lineáris modell, validációs hiba5,1
7 paraméteres modell, tanítási hiba0
7 paraméteres modell, validációs hiba20

A lecke példája. A bonyolult modell bemagolta az öt pontot, ezért új adaton sokkal rosszabb.


Dropoutvéletlenszerű neuronok kikapcsolásaRegularizációa súlyok nagyságának büntetéseKorai leállítástanítás megállítása a legjobb pontnálTöbb adatváltozatosabb, nagyobb tanítóhalmaz
Négy bevett módszer a túltanítás visszaszorítására.

Hogyan ismerhető fel és előzhető meg

A túlillesztés jellegzetes jele, hogy a tanítási hiba nagyon alacsony, miközben a validációs hiba magas. Tanítás közben mindkét hiba csökkenni kezd, majd egy ponton a validációs hiba megáll, sőt elkezd újra emelkedni, miközben a tanítási hiba tovább csökken. Ez a pillanat jelzi, hogy a modell a jelentős mintázatok helyett már az adatokban rejlő zajt tanulja meg, és innentől a tanítást célszerű leállítani, vagy legalább menteni a modell addigi állapotát. Ezt a technikát korai leállításnak (early stopping) nevezik.

Ha a jelenség egyszer felismerhető, több eszköz is rendelkezésre áll a kezelésére.


tanítási idő hiba tanítási hiba validációs hiba korai leállítás pontja
Amikor a validációs hiba emelkedni kezd, a modell már a zajt tanulja, itt érdemes leállni.

Torzítás és variancia dilemmája

A túlillesztés valójában egy tágabb statisztikai jelenség, a torzítás és variancia közötti dilemma (bias variance tradeoff) egyik megnyilvánulása. A modell hibájának két fő forrása van.

Tanítás közben a torzítási hiba jellemzően csökken, ahogy a modell egyre pontosabban közelíti az adatokat, a varianciahiba viszont ezzel párhuzamosan nőni kezd. A cél mindig egy egyensúlyi pont megtalálása, amit vagy manuálisan érünk el, amikor felismerjük a túlillesztés jeleit, vagy automatikusan, regularizációs technikák beépítésével.


Alulillesztés (magas torzítás)

  • A modell túl egyszerű a feladathoz
  • Nem ragadja meg az adatok mögötti összefüggést
  • Tanítási és validációs hiba egyaránt magas

Túlillesztés (magas variancia)

  • A modell a zajt is megtanulja
  • Bemagolja a tanítópontokat a mintázat helyett
  • Alacsony tanítási, magas validációs hiba

Gyakorlati kód

Aki a fenti fogalmakat kódban, PyTorch tenzorokkal és autograd használatával is végig szeretné követni, a Microsoft eredeti Jupyter notebookjában talál lépésről lépésre bemutatott példát. IntroPyTorch.ipynb megnyitása a GitHubon.


← Előző lecke Következő lecke →

Workshop

AI Transformation Day

Egésznapos, vezetőknek szóló program. Feltérképezzük, hol tart a szervezet, mi az első reális lépés, és milyen belső feltételek szükségesek a sikerhez. A nap végén konkrét, prioritizált cselekvési lista.

Érdekel a program →