Létezik egy figyelemre méltó tétel a
számítástechnikában, amelyik szerint NAND kapuk összekapcsolásával bármilyen
függvényt előállíthatunk. Első látásra ez így elég semmitmondónak tűnhet, pedig a mai
tudásunk alapján bátran kijelenthetjük, hogy a függvények képezik az
intelligencia alapját, legyen az mesterséges vagy biológiai.
Ha az intelligencia
nem más, mint az összetett célok elérésének képessége, akkor rendkívül összetett
függvények alkalmazásával olyan struktúrákat hozhatunk létre, amelyek egészen
összetett célok elérésére képesek, vagyis intelligensek.
Nos, a megfelelően
elrendezett anyag bármilyen összetett függvény kiszámítására képes. Jó példa
erre az agyunkban kialakult neurális hálózat, ami úgy néz ki, hogy megfelelően
van elrendezve. De arra is van példa, hogy az élettelen anyag van megfelelően elrendezve és számítást végez,
lásd a számológépeket. Márpedig a mai számítástechnika alapja a NAND kapu, hiszen
csupán NAND kapuk megfelelő kombinálásával bármilyen jól definiált számítást
végre lehet hajtani. Elegendő számú NAND
kapu elrendezésével tehát olyan eszköz hozható létre, amely bármit ki tud
számítani. Ezt az eszközt ma úgy hívjuk, hogy számítógép.
Ilyen megvilágításban,
már érdekes lehet, sőt illik közelebbről megvizsgálni a számítógépünk legó-elemét,
amelyik a tudatlan anyagból egy egyszerű, ám rendkívüli fontos logikai függvényt
fogalmaz meg: a függvény bemenete két bit (legyen A és B), kimenete egy bit (C); 0 logikai állapotú a kimenet, ha
mindkét bemenet 1, minden más esetben a kimenet 1 állapotú. A függvény képlete
C=/(A*B), vagyis: C
egyenlő A ÉS B tagadása – innen származik a függvény neve: Non AND. Ezt a
függvény kapjuk például amikor sorba kötünk két kapcsolót egy villanykörtével. A
körte csak akkor világít (0), ha mind a két kapcsoló be van kapcsolva, minden
más esetben sötét marad (1). Ez a kis apróság az alapja a számítógépünknek, a
telefonunknak és bármelyik okos kütyünknek. Nélküle ezek nem léteznének. Olyan
fontos, hogy nem árt iderajzolni:
Persze a mai számítógépekben a NAND
kapuk jellemzően miniatűr szilícium lapkára vésett mikroszkopikus tranzisztorokból
készülnek és egyre több fér el belőlük ugyanakkora felületen. A következő ábra
azt szemlélteti, hogyan lehet NAND kapukkal kifejezni a négy alap logikai függvényt
(áramköri legókat): NOT (tagadás), AND (és), OR (vagy), XOR (kizáró vagy: C=/A*B+A*/B).
Ezekkel az
alapáramkörökkel bármilyen logikai függvényt összerakhatunk. Például, egy
összeadó áramkört, amelyik három különböző bitet összegez egy kétbites számmá, 11
NAND kapuval lehet megcsinálni:
Ezt használhatjuk azután két olyan
szám összeadására, amelyeket négy biten fejezünk ki, az eredményt pedig értelem
szerűen 5 biten kapjuk:
Látható, hogy ez már egy bonyolultabb
függvény, mivel lényegében 44 darab NAND kapuból raktuk össze.
Végül vegyünk egy olyan függvényt, amelyik két,
négy biten kifejezett bináris szám szorzatát számolja ki 8 biten és már van
annyira bonyolult, hogy restelljem lerajzolni, hiszen a mai világban elég azt tudni,
hogy melyik ikont válasszuk ki és merrefelé forgassuk a telefonunkat, ha le
akarunk olvasni egy QR kódot, nem szokás a részletekkel foglalkozni. De hát,
ahogy Hofi mondaná, miért pont most változzak meg, hát lerajzolom:
Összesen 164 NAND
kaput használtunk. Vessünk rá egy pillantást, azután kapjuk el a tekintetünket,
nehogy megigézzen. Hiszen csak egy számítás, egyféle mintázat az anyag tér és
időbeli elrendezésében.
Habár a fenti rajzot átlátni
egy kihívás, azt mindenképpen szemlélteti, hogy a kézzelfogható fizikai anyag
miképpen hozhat létre olyan elvont dolgot, mint az intelligencia. Az csak hab a
tortán, hogy a számítás ugyanúgy közegfüggetlen mint az információ. Az anyagot
újra, meg újra jobbra cserélhetjük, növelve ezzel a számítások komplexitását,
sebességét és nem utolsó sorban a számítások árát. Ez utóbbival jól állunk, a statisztikák
szerint a számítások ára pár évente megfeleződik, eszerint száz év alatt
milliószor-milliószor-milliószor csökkent a költsége. Ha az anyag is ennyivel
olcsóbbá vált volna, akkor most egy eurócentért megvásárolhatnánk minden árut
és szolgáltatást, amit az utóbbi száz évben a Földön létrehoztak.
Most nézzük meg, hogy
állunk a sebességgel meg a komplexitással. Habár egy egyszerű számológép is
kenterbe ver bennünket egy aritmetikai versenyen, mégsem vagyunk megelégedve,
sem a sebességével, sem a komplexitásával. Mert a mai, már klasszikusnak nevezhető
számítógépes intelligencia, nem képes az emberi intelligenciához hasonló
bonyolult függvények kiszámítására. Ráadásul, minél inkább növeljük a gépi számítások
bonyolultságát, annál exponenciálisan több időre és anyagra van szükség ezeket elvégezni.
Ez egy probléma, amin
lázasan dolgoztak a kockafejűek az elmúlt évtizedekben. Addig jutottak, hogy
eleget tettek Moore törvényének, vagyis menetrend szerűen megduplázták
kétévente a klasszikus technológia kapacitását. De ahogy Einstein mondta, egy
problémát nem lehet megoldani ugyanazzal a gondolkodásmóddal, amivel létrehoztuk.
Ahhoz, hogy radikálisan előbbre jussunk szemlélet kellet váltani.
Az áttörés akkor kezdődött,
amikor valakinek támadt egy új ötlete, és tanulmányozni kezdte a biológiai
neurális hálózatok számítási képességeit. Egy neurális hálózatot összekapcsolódó
neuronok alkotnak, amelyek befolyásolni tudják egymás viselkedését. A neuronok
bonyolult elektrokémiai eszközök, különféle részekből, axonokból és
dendritekből állnak és rendkívül változatos módon működnek, de van valami közös
bennük. Minden neuron átlagosan ezer másikkal áll összeköttetésben, a
szinapszisnak nevezett kapcsolatokon keresztül, és ez a durván százbillió
szinaptikus kapcsolat, ami az agyban összejön, teszi lehetővé a kiemelkedően
összetett feladatok elvégzését és új komplex számítások elsajátítását. A recept
egyszerű: a szinapszisok erőssége időnként frissül, a kapcsolatok hol megerősödnek,
hol gyengülnek, aszerint, hogy mikor és hogyan aktiválódnak a neuronok. Ezt
hívjuk tanulásnak.
Hamarosan, Heuréka,
le is esett a megoldás tantusza. Kockafejűek rájöttek, hogy a tanulás képessége
az, ami a mesterséges intelligenciának is a döntően meghatározó feltétele. Innen már csak egy
lépés kellett ahhoz, hogy a mesterséges neurális hálózatok modelljét megalkossák.
Ebben a modellben minden egyes neuron állapotát és minden egyes szinapszis
erősségét egy-egy szám jelöli, lásd az alábbi rajzon.
Minden neuron rendszeres időközönként frissíti
az állapotát. Veszi az összes rákapcsolódó neurontól származó kimenetek
átlagát, súlyozza azokat a szinaptikus erősségükkel, opcionálisan konstanst ad
hozzá, majd az eredményre alkalmazza az aktivációs függvényt, hogy kiszámítsa a
következő állapotot.
Hát ez elég
tudományosan hangzik, de figyeljük meg, hogy lényegében milyen egyszerű dologról
van szó. Nézzük meg még egyszer az előbbi rajzot. A kör összeadást végez (átlagol)
a bemeneteivel, a vonalak pedig szoroznak (súlyoznak) a rajtuk levő számokkal.
A négyzet egy egyszerű függvényt jelent, ami a kör által összegzett értékkel
végzi el a számítást.
Egyszerű példának
vegyük a már annyit emlegetett NAND logikai kaput. A súlyozó értékek mindkét bemenet esetén 1, az
aktiváló függvény pedig egy egyszerű küszöbfüggvény: értéke 1, ha a bemenete
nagyobb vagy egyenlő mint 2 és értéke 0, ha a bemenete kisebb mint 2. Ha a
neuron bemenetei csak logikai értékeket vehetnek fel (0 vagy 1), akkor a
kimenete a NAND logikai függvényt követi.
Hasonló egyszerű struktúrát
szerkeszthetünk a NOT, AND és OR logikai kapura is. Hogy a dolgokat egy kicsit
bonyolítsuk nézzük meg egy XOR kapu neuronmodelljét. Ehhez már két rétegű
neuronháló szükséges.
Ahhoz, hogy az XOR logikai
függvényt (a kimenet csak akkor 1, ha vagy az egyik, vagy a másik bemenet 1)
megvalósítsuk, az ábrán látható súlyozásokat használjuk és az összes neuron aktiválási
függvénye ugyanaz a g küszöbfüggvény.
És most jön a forradalmi. Ez az egyszerűsített neuronmodell sokkal bonyolultabb dolgok kiszámítására is képes. A következő rajzon
látható, hogy mindössze öt neuron miként képes összeszorozni két tetszőleges valós
számot, tetszőleges pontossággal. Ehhez csak az szükséges, hogy jól válasszuk
meg az aktivációs függvényünket (ebben az esetben ez a rajzon látható szigmoid
függvény) és hogy a szinapszisok erősségét (a súlyozó értékeket) frissítsük. Más szóval,
beállítjuk a súlyozók pontos értékét, ezáltal betanítjuk a hálózatunkat a
feladat elvégzésére.
A tanítás alapgondolata, hogy értékeket
adunk a bemenetekre (ezek az un. minták) és a kimeneten mért hiba minimalizálása
érdekében módosítjuk a neuronháló súlyait. Ha a hiba pozitív, akkor a háló
kimenete túl kicsi, tehát a pozitív bemenetekhez tartozó súlyokat növeljük, a
negatívakhoz tartozókat pedig csökkentjük. Ha a hiba negatív, akkor éppen ennek
az ellenkezőjét csináljuk. A teljes algoritmus egyesével sorban végig futtatja
a mintákat a hálón, és minden egyes példa után a hiba csökkentése érdekében
kissé módosítja a súlyokat. A mintahalmaz egyszeri végigfuttatását epoch-nak nevezzük.
Az epochokat addig ismételjük, amíg valamilyen leállási feltétel nem teljesül,
például amikor a súlyváltozások már nagyon kicsivé válnak. Ez az un. gradiens
alapú optimizációs eljárás.
A komplexebb
feladatokat - például képfelismerést - ellátó többrétegű (mély) mesterséges neurális hálózatok, ennél
kifinomultabb, izgalmas neveket viselő tanulási szabályokkal állíthatók be; visszaprogramozás
(backpropagation), sztochasztikus gradiens lejtő (stochastic gradient), megerősített
tanulás (reinforcement learning), meg egyéb más, képtelen elnevezésű algoritmus.
Mindenesetre lenyűgöző,
ahogy ezek az egyszerű szabályok alapján definiált neurális hálózatok a
kiemelkedően összetett feladatokban képesek emberi szintű teljesítményre, csak
azzal, hogy a szinapszisok erősségét jelző számokat egyszerű determinisztikus
szabályok alapján megfelelően kiigazítják. Bizonyíthatóan, egy tetszőleges
méretű neurális hálózattal elméletben bármi kiszámítható. Ráadásul az eljárás
jóval kevesebb neuront igényel, mint amennyi NAND kaput a klasszikus módszer.
Ugyebár, két valós tetszőleges nagyságú szám szorzására öt neuront használtunk,
míg egy előző példában két, alig négy biten kifejezett bináris szám szorzására 164
NAND kapura volt szükségünk. Egy képfelismerő feladat megoldására pedig nem is lenne elegendő logikai kapunk a mai (még) limitált anyagi platformunkon.
Még mielőtt valaki megjegyezné, hogy jó, jó, de egy NAND kapu létrehozásához
elég egy pár alkatrész, nevezetesen két tranzisztor meg egy ellenállás, egy neuronmodell
pedig, jóval komplexebb szerkezetű, lássuk be, hogy egy ilyen összehasonlításnak egy anyagi világban van értelme.
Csakhogy a mai
világunkban már nem az anyag a lényeg! A neuronmodell egy anyagon elhelyezett
számítás, a számítás ára pedig, mint látjuk, döbbenetes mértékben csökken. Az
anyag elrendezhető úgy, hogy miközben engedelmeskedik a fizika meglepően
egyszerű törvényeinek, számításokat végez és tanul. Ehhez önmagát kell
újrarendeznie, olyan módon, hogy egyre pontosabban tudjon kiszámolni egy kívánt
függvényt. Ennek az anyagnak azonban már nem kell biológiainak lennie.
Elolvastam az első pár sort és úgy találtam , hogy az én intelligencia fügvényem a NÍMAND.
VálaszTörlésgg...
TörlésAz enyém a tulipán
Törlés