AI kezdőknek · Számítógépes látás · Lecke 07

Konvolúciós neurális hálók

Ez a lecke a Microsoft "AI kezdőknek" (AI For Beginners) tananyagának egyik leckéjéből készült magyar adaptáció, amely bemutatja, hogyan tanulnak meg a konvolúciós neurális hálók mintázatokat felismerni képeken, függetlenül azok pontos helyétől.

Vissza a tananyaghoz


Miért nem elég egy egyszerű neurális háló?

Korábban láttuk, hogy egy sűrűn kapcsolt, úgynevezett teljesen összekötött neurális háló is elég jól teljesít egyszerű feladatokon, például az MNIST adathalmaz kézzel írt számjegyeinek felismerésén. Ennek egyik oka, hogy az MNIST képek kényelmesek, minden számjegy középre van igazítva, a háttér egyszínű, a méret és az arányok szinte változatlanok.

A valós életben ez a kényelem eltűnik. Ha egy macskát akarunk felismerni egy fotón, az állat lehet a kép bal felső sarkában vagy a jobb alsóban, lehet kicsi vagy nagy, oldalról vagy szemből látható. Egy sűrűn kapcsolt háló minden egyes pixelt külön súllyal kezel, ezért nem ismeri fel automatikusan, hogy ugyanaz a mintázat máshol a képen is ugyanazt jelenti. Ráadásul a paraméterek száma egy nagyobb, színes képnél elképesztő méretűre nőne, ami kezelhetetlenné és könnyen túltanulóvá tenné a modellt.

A számítógépes látás emiatt más megközelítést igényel, mint az általános osztályozás. Amikor egy adott tárgyat keresünk egy képen, valójában specifikus mintázatokat és ezek kombinációit pásztázzuk végig. Ha egy macskát keresünk, először talán vízszintes vonalakat azonosítunk, amelyek bajuszt formázhatnak, majd bizonyos bajuszkombinációk alapján ismerjük fel, hogy valóban macskáról van szó. Ami igazán számít, az a mintázatok egymáshoz viszonyított helyzete és jelenléte, nem pedig az, hogy pontosan hol találhatók a képen.


Konvolúciós szűrők, ahogy a mintázatok felismerése működik

A mintázatok kinyeréséhez konvolúciós szűrőket használunk. Egy kép matematikailag egy kétdimenziós mátrixként, színes kép esetén pedig egy háromdimenziós tenzorként írható le. Egy szűrő alkalmazása azt jelenti, hogy egy viszonylag kicsi, úgynevezett szűrőmag mátrixot veszünk, és a kép minden pixeléhez kiszámítjuk a szomszédos pixelek súlyozott átlagát. Ezt úgy is elképzelhetjük, mint egy apró ablakot, amely végigcsúszik a teljes képen, és minden pozícióban a szűrőmag súlyai szerint átlagolja az alatta lévő pixeleket.

Ha például egy 3x3-as függőleges és egy vízszintes élt kereső szűrőt alkalmazunk egy képre, azokon a helyeken kapunk magas értéket, ahol az eredeti képen valóban függőleges, illetve vízszintes él húzódik. Ezek a szűrők tehát élek "keresésére" használhatók. Hasonló logikával számos más, alacsony szintű mintázatra, például sarkokra vagy textúrákra is tervezhetünk szűrőket.

A kulcsfontosságú felismerés az, hogy bár ezeket a szűrőket elméletileg kézzel is megtervezhetnénk, egy konvolúciós neurális hálóban a szűrők súlyait nem előre rögzítjük, hanem tanítás közben, a hálózat automatikusan tanulja meg őket. Ez az egyik legfontosabb gondolat a konvolúciós háló mögött.


A konvolúciós háló működésének alapelvei

A konvolúciós neurális hálók működése néhány egyszerű, de erős elvre épül.

Ez a hierarchikus felépítés az, ami miatt a konvolúciós hálók egy korai rétege még csak éleket és egyszerű textúrákat ismer fel, egy középső rétege már szemekre, fülekre vagy kerekekre hasonlító alakzatokat, egy mély rétege pedig komplett arcokat vagy tárgyakat.


Pooling rétegek, a kép fokozatos tömörítése

A konvolúciós rétegek mellett a legtöbb konvolúciós hálóban megjelenik egy másik fontos elem is, az összevonó, angolul pooling réteg. A pooling réteg feladata, hogy csökkentse a kép térbeli felbontását, miközben megőrzi a legfontosabb jellemzőket. A leggyakoribb változat, a maximum pooling egyszerűen kiválasztja a legnagyobb értéket egy kis, például 2x2-es pixelablakból, és ezzel felére csökkenti a kép szélességét és magasságát.

Ennek két fontos haszna van. Egyrészt jelentősen csökkenti a további rétegek számítási igényét, hiszen egyre kevesebb pixellel kell dolgozni. Másrészt segít abban, hogy a háló kevésbé legyen érzékeny a mintázat apró elmozdulására a képen, vagyis robusztusabbá teszi a felismerést azzal szemben, hogy a tárgy pontosan hol helyezkedik el.


Piramis architektúra és klasszikus hálók

A legtöbb képfeldolgozásra használt konvolúciós háló az úgynevezett piramis architektúrát követi. Az első konvolúciós réteg, amely közvetlenül az eredeti képre épül, jellemzően viszonylag kevés szűrőt tartalmaz, gyakran csak nyolcat vagy tizenhatot, amelyek egyszerű pixelkombinációknak, például vízszintes vagy függőleges vonalaknak felelnek meg. A következő rétegekben a kép térbeli mérete pooling rétegek segítségével fokozatosan csökken, miközben a szűrők száma nő, hiszen egyre több lehetséges kombinációt kell megkülönböztetni. Ahogy a hálón végighaladunk a végső osztályozó felé, a kép térbeli dimenziói egyre kisebbek, a szűrők száma pedig egyre nagyobb lesz.

Az egyik legkorábbi, ma is gyakran hivatkozott architektúra a LeNet, amelyet még a kilencvenes években fejlesztettek ki kézzel írt számjegyek felismerésére, és amely a konvolúciós réteg és a pooling réteg váltakozó alkalmazásának alapmintáját fektette le. Ez a minta később sokkal mélyebb és összetettebb hálókban is visszaköszönt. Jó példa erre a VGG-16, amely 2014-ben 92,7 százalékos pontosságot ért el az ImageNet versenyen az öt legvalószínűbb osztály közötti találat alapján, és amely tizenhat súlyozott rétegen keresztül fokozatosan növeli a szűrők számát, miközben csökkenti a kép térbeli méretét. Az azóta megjelent architektúrák, mint a ResNet vagy az Inception, ugyanezt az alapelvet fejlesztették tovább további trükkökkel, amelyek lehetővé tették, hogy a hálók még mélyebbek legyenek anélkül, hogy a tanításuk ellehetetlenülne.


Gyakorlati kód

Ha szívesen kipróbálnád élőben, hogyan épül fel és tanul egy konvolúciós háló PyTorch-ban, a Microsoft eredeti notebookja lépésről lépésre bemutatja a folyamatot. Elérhető itt. GitHub.

Forrás

Ez a lecke a Microsoft nyílt forráskódú, MIT licenc alatt elérhető "AI For Beginners" tananyagának magyar adaptációja. Eredeti angol lecke. GitHub. Felhasznált magyar gépi fordítás. GitHub.


← 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 →