A korábban ismertetett teljesen csatolt Neurális Hálózatokkal szemben a mai bejegyzésben egy részlegesen csatolt rendszerről fogunk beszélni: a Konvolúciós Neurális Hálózatról (angolul: Convolutional neural network). Ezeket a rendszereket leggyakrabban képelemzésre használják, de másra is lehet. Ebben a begyezésben mi egy idősoron fogjuk kipróbálni.
Bevezetés
Kezdjük azzal mi is az a “konvolúció”? Röviden egy matematikai művelet, amikor két függvény szorzatából egy harmadikat állítunk elő. Olyasmi, mint a keresztkorreláció, de itt az egyik függvényt tükrözzük[1] és úgy toljuk el. A Wikipedián van erről egy jó szemléltetés:

Jogos kérdés, hogy miért értelme van a tükrözésnek? Vegyük észre, hogy a konvolució esetén a tagok felcselérhetők. Vagyis .
Rendben,de miért erről a matematikai operációról lett elnevezve ez a Neurális Hálózat típus? Minden egyes Konvolúciós rendszernek van egy olyan rétege amiben ez a művelet fut le. Ennek során a réteg bemeneti adatain (jelöljük f-el) egy fix mag [2] (jelöljük mondjuk g-vel) függvényt léptetünk végig, és ennek eredményét továbbítjuk a következő rétegnek. Nézzük meg miért.
Miért?
Neurális Hálózatok tanításánál kulcs kérdés a rendelkezésünkre álló tananyag menyisége. Általában azt szokták mondani, hogy legalább tízszer[3] annyi megfigyelésünk legyen, mint ahány változó (súly) van a rendszerben. Ebből egyenesen következik, hogy összetettebb hálózatokhoz sokkal több adat kell, mint az egyszerűbbekhez.
Minél bonyolultabb a probléma annál összetettebb Hálózat kell, amihez pedig egyre nagyobb mennyiségű tanuló adat. Ez eddig tiszta sor. De ez csak az egyik eset, amikor sok adat kell. A másik az, amikor maguk a bemeneti adatok rendkívül összetettek. Erre tipikus példa egy kép. Még egy közepes méretű kép is rengeteg pixelből áll, ha mindegy egyes pixelt egy bemeneti neuronnal jelképezünk olyan bonyolult rendszert kapunk amihez nem nagyon fogunk tudni elegendő adatot gyűjteni. Ez az egyik oka, amiért képelemzésekre lényegében alkalmatlanok a teljesen csatolt neurális rendszerek.
A probléma felismerése után nem nagy logikai ugrással el lehet jutni két gondolathoz:
- Egyszerűsítsük a bemeneti adatokat
- Ne csatoljunk mindent mindennel. Például egy kép esetén a két ellentétes képsarok valószínűleg kevesebb hatással van egymásra, mint a mellettük lévő pixelek.
A fenti két pont magyarázza miért alkalmazzuk a konvolúciós réteget.
A Konvolúció réteg
Már tudjuk, hogy mi az a probléma amiért a Konvolúciós réteget alkalmazzuk, most nézzük meg egy kicsit részletesebben miért ez a művelet a válasz a fenti problémára (miért nem mondjuk a Keresztkorreláció?)
Legyen a bementi adatunk () a következő 3×3-ös mátrix:
A mag () pedig, egy 2×2-as mátrix:
Előrejátszás
Ha valaki odafigyelt a Bevezetésre, akkor észreveszi, hogy most tükrözni kell, ez ebben az esetben 180°-os forgatást jelent, tehát:
Jefkine-nek van erről egy jó írása, amiben így ábrázolja ezt a műveletet:

Most léptessük végig ezt a -t a
bemeneti adatokon. Ez lényegében azt jelenti, hogy a bal felső sarokból elindulva megszorozzuk a bemeneti és a mag függvényt. Ami eredménye:
Ábrázolva pedig:

A konvolúciós réteg előrejátszása lényegében ennyi. Ok, ez eddig egyszerű, de talán nem egyértelmű, hogy itt lényegében egy részlegesen kapcsolt neurális hálózatot valósítunk meg. Vegyük észre, hogy nem minden egyes bemeneti cella (neuron) kerül minden egyes elemmel kapcsolatba a mag függvényből. A bal felső cellát például csak egyszer érinti a , a legelső lépésben. Ha hagyományos neuronokon és súlyok rendszerében ábrázolnánk a fentieket, felhasználva Jefkine színkódolását, akkor a következő ábrát kapnánk:

Vegyük észre, hogy csak a bemenet közepét reprezentáló neuron van kapcsolatban minden egyes neuronnal a következő rétegben. Értelemszerűen ennek két következménye van: egyrészt csökkentettük a súlyok számát (ami a célunk volt). Ennek örülünk. Másrészt a Hálózat a bemeneti mátrix közepén elhelyezkedő adatokra érzékenyebb lesz. Ezt már nem annyira szeretjük. Ezért született meg a “kipárnázás” [4].
Kipárnázás
Szóval mit tehetünk, ha úgy gondoljuk a bemenet szélén lévő adatoknak szeretnénk nagyobb fontosságot tulajdonítani? A fő probléma ugye, hogy a mag függvénynek teljes egészében a bemenetre kell illeszkednie. Innen gyorsan el is lehet jutni az ötlethez, hogy mi lenne ha megnagyobbítanánk a képet? Például ha körbevennénk 0-al. Valahogy így:
Voilà! Már is megoldottuk, hogy a szélső neuronoknak sokkal több kapcsolata legyen. Persze ez nem biztos, hogy jó nekünk, lévén a KNN egyik előnye, hogy nem teljesen kapcsolt, és így kevesebb súlyt kell optimalizálni.
Visszajátszás
Most nézzük meg mi történik a visszajátszás során. A teljesen kapcsolt hálózatról szóló bejegyzésben már megnéztük a visszajátszás matematikai lépéseit úgyhogy itt ezzel most nem foglalkoznék. Helyette koncentráljunk arra, hogy miben tér el a két rendszer. Ugye az egyértelmű, hogy a következő rétegtől megkapjuk, hogy mekkora mértékben járult a hibához az . Jelöljük ezeket deltával:
De hogy, határozzuk meg, hogy melyik súly mekkora részben felelős a hibáért a bemeneti és a konvolúciós réteg között. A konkrét probléma, hogy ugye a Konvolúciós rétegben lévő értékek a bemeneti réteg különböző neuronjainak szorzatának összegei. De nekünk arra van szükségünk, hogy ezek a részek mekkora részben járultak a hibához. A trükk, hogy még egyszer készítünk egy konvolúciót, de ezúttal a mag függvény helyett a Hibát használjuk. Ehhez első lépésben elforgatjuk az -t:

Majd ugyanúgy, mint korábban, végiglépkedünk a bemeneti adatokon:

Végezetül
Fentebb átnéztük a Konvolúciós Neurális Hálózatok legjellemzőbb rétegét, de nem ez az egyetlen típus. A hamarosan jövő következő részben megnézzük még milyen rétegek szoktak lenni egy KNN. Majd a minisorozat befejezéseként nézünk egy gyakorlati megvalósítást.
Irodalom
- Jason Brownlee: How Do Convolutional Layers Work in Deep Learning Neural Networks?
- Jason Brownlee: Crash Course in Convolutional Neural Networks for Machine Learning
- Jefkine: Backpropagation In Convolutional Neural Networks
- Rachel Draelos: Convolution vs. Cross-Correlation
Endnotes
- Sajnos az internetes irodalom egy jelentős része nem veszi ezt észre, és összekeveri a keresztkorrelációt és a konvolúciót. ↩︎
- angolul kernel ↩︎
- Ez erősen a minimum, pl. a Is your dataset big enough? Sample size requirements when using artificial neural networks for discrete choice analysis kutatás szerzői ötvenszer több adatot javasolnak. ↩︎
- angolul: padding ↩︎
“Konvolúciós Neurális Hálózat – 1. rész” bejegyzéshez egy hozzászólás