Neurális hálózatok elrendezési és funkciónális típusai

Neurális hálózatok elrendezési és funkciónális típusai

A neurális hálózatok a mesterséges intelligencia és a gépi tanulás alkalmazásának egyik legnépszerűbb eszközei manapság. Az elmúlt 10 évben több olyan speciális struktúra szerinti csoportosítást fedeztek fel, mely csoportok egy típusú probléma megoldásában a leghatékonyabbak.

Az előző cikkben bemutattam a mesterséges neurális hálózatok mögött rejlő intuíciót és biológiai rendszerből vont párhuzamokat. Már tudjuk milyen elemekből épül fel és milyen kapcsolatok találhatóak az elemek között, illetve melyek a legfőbb hasznosítási területek.

Ebben a részben szeretném bemutatni, az 5 legtöbbet használt hálózati elrendezést, illetve hogy milyen probléma megoldása során vethetők be a mindennapi életben.

Perceptron

Nem szabad elfelejteni, hogy a neurális hálózatok számítási alapköve a perceptron, a neuron matematikai modellje. A bementi értékek súlyozásra kerülnek, majd összeadjuk őket és legvégül egy aktivációs függvény segítségével határozzunk meg, hogyan alakul a kimenetünk.

A neuron matematikai modellje.
A neuron matematikai modellje.

Ezt a rendszert előrecsatolt neurális hálózatnak is nevezik (feed forward neural network), mivel az információ balról jobbra halad a neuronokon keresztül. Ismert bementekre, adott kimenetek alapján képesek vagyunk a bementi értékek súlyozásának változtatásával a rendszer hibáját minimalizálni (back-propagation). Függetlenül attól, hány réteg neuron található a rendszerünkben, a neurális hálózatok mindig a ki és bemenetek közötti kapcsolatot szimulálják.

Egyszerű és mély tanuló neurális hálózatok topológiai összehasonlítása.

Egyszerű és mély tanuló neurális hálózatok topológiai összehasonlítása. Forrás: Medium.

Az előrecsatolt neurális hálózatok gyakorlati használata kevés esetre szűkül, főleg csoportosítási és regressziós előrejelzés feladatok megoldására használhatjuk. Amikor az előrejelzéstől eltérő feladatokat szeretnénk megoldani, más felépítésű hálózatok alkalmazása válik szükségessé.

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

Ezek a hálózatok nagymértékben különböznek a többitől, mivel elsősorban képfeldolgozási funkciókkal rendelkeznek. Emellett képesek más jellegű bementet (videó, hang stb.) is értelmezni. A tipikus felhasználás során egy kép adatait (pixel szinten) küldjük keresztül a hálózaton és kép által tárolt információ alapján történő osztályozás a végső célunk.

A konvolúciós neurális hálózat (convolutional neural network – CNN) a bemenetként megadott adatot nem egészében értelmezni, hanem részleteit szkenneli le. Abban az esetben, ha egy 1 000 x 1 000 pixel felbontású képet adunk meg bementként, nem a leghatékonyabb egy 1 000 000 (1 000 x 1 000) neuronból álló réteget használni a pixel szintű értelmezés során. Helyette inkább egy 100 x 100 képpont méretű szűrőt használunk, amelyen keresztül részleteiben áramlik az adat a hálózaton.

A konvolúciós neurális hálózatok által használt szűrő egység működése.
A konvolúciós neurális hálózatok által használt szűrő egység működése. Forrás.

A CNN hálózatokat két fő részre lehet osztani: jellemzők felderítése és osztályozás. A jellemzők felderítése során a kép egységein átlagolásokat (konvolúció) és összevonást, tömörítést végzünk, mely lépések segítenek speciális jellemzők felderítésében.

Például, ha egy macskát ábrázoló képet adunk meg a rendszer bemenetének, a jellemzők felderítése során a képpontok tömörítése megadja a képet jellemző formákat (fül, száj, lábak).

A kiderített jellemzők alapján a megfelelően paraméterezett és tanított osztályozó rész képes a jellemzők összességét vizsgálni és ezáltal a képen szereplő teljes képet értelmezni és osztályozni.

A konvolúciós neurális hálózatok tanításához előre feliratozott adatfáljok szükségesek. A rendszert jellemző hiperparaméterek (azon paraméterek, amelyek a struktúrát adják meg) kiválasztása jelenti a legnehezebb feladatot: neurális hálózat felépítése, azaz hány réteget használunk, illetve melyik rétegbe hány neuron kerüljön, egyes rétegekben használt aktivációs függvény, illetve a használt szűrő mérete és felépítése.

A konvolúciós neurális hálózat működésének bemutatása.
A konvolúciós neurális hálózat működésének bemutatása.

Egyik legelső gyakorlati alkalmazásuk a MNIST adatbázisban található, kézzel írt számjegyeket tartalmazó rendszer értelmezése, valamint a képek alapján a számjegyek felismerése volt. Az alábbi linken bárki ki tudja próbálni, hogyan ismeri fel a kézzel írt számjegyeket egy konvolúciós neurális hálózat, valamint hogyan működik a képpont szintű felderítés és az osztályozás.

Visszacsatolt neurális hálózatok

Az előrecsatolt neurális hálózatok nem rendelkeznek memóriával, azaz nem képesek a múltban történt eseményekre emlékezni. Ettől természetesen kivételt képez a tanítási folyamat, melynek során a neuronok súlyértékének beállítása történik.

A visszacsatolt neurális hálózatok (recurrent neural network – RNN) esetében az információ egy hurkon keresztül halad át, így amikor a neuron egy kimenetet ad meg, képes a korábbi bemenetekre adott választ figyelembe venni.

Képzeljük el, hogy egy előrecsatolt hálózat bemeneteként a “neuron” szót adjuk meg és rendszer karakterről-karakterre dolgozza fel az információt. Amikor az “r” bemenetre adott kimenetet számolja ki, már nem képes a korábban feldolgozott betűket figyelembe venni. Így, ha egy összetett objektum jelentését kívánjuk meghatározni, mindenképpen szükségünk van a részegységek és a köztük lévő kapcsolat figyelembevételére.

Visszacsatolt neurális hálózat értelmezése. x(t) bementi, h(t) kimeneti érték.
Visszacsatolt neurális hálózat értelmezése. x(t) bementi, h(t) kimeneti érték. Forrás.

A visszacsatolt neurális hálózat neuronja két bemenettel rendelkeznek: adott “t” időpillanatban a rendszeren keresztül haladó és a “t-1″, “t-2″ stb. korábbi értékek.

Gradiens probléma

Neurális hálózatok esetén a gradiens (bemenet szerinti parciális derivált) mutatja meg, hogy a bemenet minimális megváltozása esetén, milyen mértékben változik meg a kimenet. A gradiensre, mint a bemenet és kimenet közötti kapcsolatot jellemző függvény meredekségre is lehet gondolni.

Ha egy rendszer (hálózat felépítés és adatok) “nagy” gradienssel rendelkezik, a modell gyorsan tud a megadott adatok alapján tanulni, mivel kis eltérésű bemenetek hatására is megismeri a kimenetek változását. Ha a gradiens értéke kicsi vagy nullára csökken, a tanulási folyamat megáll.

A RNN hálózatok alkalmazása során két féle probléma merülhet fel: a túlfutó (exploding gradient) és az eltűnő gradiens (vanishing gradient) esete. Előbbi során az algoritmus túlzottan nagy jelentőséget tulajdonít a neurális hálózatban található súlyoknak, így nem képes megfelelő átmetet képezni a bemenet változtatásával. Ezáltal lehetetlenné teszi a hálózatnak megadott feladat megoldását. Eltűnő gradiens esetében, a gradiens értékünk viszont túlzottan alacsony, így a tanítási folyamat rendkívül sok időt és erőforrást vesz igénybe.

LSTM hálózatok

Az eltűnő gradiens probléma megoldására találták ki a hosszú-rövidtávú memóriával rendelkező hálózatokat (Long Short-Term Memory – LSTM). Az LSTM rendszer része a memóriafunkció, ami hasonlóan a számítógépek memóriájához, képes olvasni és írni a saját memóriájában. Ez lehetővé teszi, hogy a visszacsatolt neurális hálózat hosszú időn keresztül emlékezzen a korábban megadott bemenetekre.

A rendszer memóriája tulajdonképpen egy kapus cellaként jelenik meg, a kapu dönti el, hogy tárolja vagy törölje a cellában található adatokat, az információhoz rendelt fontosság alapján. Egy LSMT egységben jellemzően 3 kapu található. A bemeneti kapu határozza meg, hogy éppen érkező információt belépteti e a folyamatba, a törlő kapu törli, ha nem tartja a hálózat releváns adatnak, illetve a kimeneti kapu a kimenetre hatással lévő matematikai műveletet hajt végre.

Visszacsatolt neurális hálózat alkalmazási lehetősége: képek automata feliratozása. Forrás.

A visszacsatolt neurális hálózatokat többféle probléma megoldására lehet használni: audiovizuális anyagok szöveg szerinti értelmezése, képek automatikus feliratozása, gépi fordítás (magyar szavak sorozatából angol szavak szorzata), dokumentum osztályozás.

Autoencoder (AE)

Az autoencoder-ek a neurális hálózatok egy speciális fajtái. A bemeneti adatot az enkódolást végző terület egy tömörített reprezentációban tárolja el. Ezután a dekódoló rész a reprezentáció alapján generálja a kimetet. Ha az autoencoder-ek egyetlen célja a bemenet lemásolása lenne a kimeneti oldalra, kérdezhetnénk, hogy mi hasznuk van valójában?

Autoencoder egyszerűsített működési mechanizmusa, a bemenet és a kimenetek ábrázolása mellett.
Autoencoder egyszerűsített működési mechanizmusa, a bemenet és a kimenetek ábrázolása mellett. Forrás.

A valóságban viszont az autoencoder bemenet kimenetté történő másolása során végzett tanítás alatt a reprezentáció számunkra hasznos tulajdonságokat vesz fel. Azáltal, hogy a tömörített reprezentáció kisebb méretre korlátozzuk a megadott bemenethez képest, arra kényszerítjük az enkódolást végző területet, hogy a bemeneti adat legfontosabb jellemzőit tanulja meg.

A megtanult, fontos jellemzők alapján képes ezután a dekódoló rész a bementhez hasonló kimenetet generálni. Napjainkban az autoencoder-eket legtöbb esetben az adatokban található zaj és a dimenziók csökkentésére használják. Megfelelő strukturális korlátok megadásával megtanulnak olyan jellemzőket is, melyeket más módszerrel (pl. PCA – principal component analysis, főkomponens analízis) nem tudunk kideríteni.

Az autoencoder-ek maguktól tanulnak az adatokból, azaz nincs szükség új vagy speciális feldolgozási struktúra megalkotásához, hogy egy típusú bementi adatból, hatékony leképzéseket hajtsanak végre.

Autoencoder gyakorlati hasznosítása: szürkeárnyalatos képek színessé tétele. Forrás

A gyakorlatban használni lehet őket kép hiányzó részleteinek megfejtéséhez, szürkeárnyalatos képek színessé változtatásához vagy életlen képek élessé tételében.

GAN hálózatok

A GAN hálózatok talán az egyik legérdekesebb neurális hálózatok közé sorolt rendszer. Gyakorlatban megcáfolta azt a kijelentést, mi szerint egy számítógép vagy mesterséges intelligencia nem lehet kreatív.

A GAN-ok (Generative Adversarial Network) általában két különböző részegységből állnak: egy előrecsatolt és egy konvolúciós neurális hálózat alkotja őket. Az előrecsatolt hálózat feladata a tartalom generálása (generatív hálózat), míg a konvolúciós felelős a tartalom felismeréséért (diszkriminatív hálózat). A felismerő terület felelős azért, hogy megállapítsa, egy tartalom mesterségesen lett létrehozva vagy valódi e.

GAN hálózatok működésének egyszerűsített ábrája.
GAN hálózatok működésének egyszerűsített ábrája. Forrás

A generátor feladata – egy véletlen zaj mellett – a valósághoz minél jobban hasonlító adat generálása, melyet a diszkriminátor vizsgál meg és dönti el, hogy valódi vagy sem. A generatív hálózat gyakorlatilag a hamisítók egy csoportja, akik hamis pénzt nyomtatnak, a diszkriminatív hálózat pedig a rendőrség, akik próbálják felismerni a hamis pénzeket.

Mivel a két hálózatot váltott optimalizációval tanítják be, így a folyamat végén a generatív rendszer által generált adatok nem különböznek a valóságtól.

A gyakorlati alkalmazás lehetőségi végtelenek. A GAN hálózatok képesek mindent lemásolni, vagy egy változási modellt egyedi esetekre alkalmazni. Tegyük fel, hogy van egy adatbázisunk, ahol ugyanazokról az emberekről vannak fényképeink, melyek az életük különbőz időpontjaiban készültek (10 évesen, 20 évesen stb.).

Ha ezt az adathalmazt felhasználva megtanítunk egy GAN hálózatot, és elegendően sok adattal rendelkezünk, képesek leszünk bámely személy, bármely életszakaszában készített fényképe alapján megmondani, hogyan nézett ki 10 évvel ezelőtt és hogyan fog kinézni 20 év múlva.

Az öregedés modellezése GAN hálózatok segítségével (age-cGAN).
Az öregedés modellezése GAN hálózatok segítségével (age-cGAN). Forrás, Publikáció

Például divatszakma is rengeteget profitálhat a GAN hálózatokból: nem lesz szükséges többé egy modellnek a ruhakollekció összes darabját felpróbálni és fényképet készíteni, hanem a modell, a póz és a ruhadarabok információi alapján, egy tanított GAN hálózat képes az össze kombináció automatikus generálására.

Megadott póz alapján történő kép generálás. Forrás

Összefoglalás

Azt gondolom, a neurális hálózat a valaha feltalált egyik legszebb programozási technika, szemléletmód. A hagyományos programozási megközelítéssel ellentétben, nem az ember határozza meg a feladat megoldásához szükséges apró, pontos lépéseket, hanem a rendszer, a biztosított megfigyelési adatokból tanul és keres megoldást a problémára.

Napjainkban a mély neurális hálózatok kiemelkedő teljesítményt nyújtanak a gépi látás, beszédfelismerés és nyelvfeldolgozás témakörökben, de mint a cikkből is látszik, számos olyan további terület van, ahol adatok alapján lehet az üzleti döntéshozatalt vagy a problémamegoldást támogatni.

Felhasznált források

https://medium.com/cracking-the-data-science-interview/a-gentle-introduction-to-neural-networks-for-machine-learning-d5f3f8987786
https://medium.freecodecamp.org/an-intuitive-guide-to-convolutional-neural-networks-260c2de0a050
https://towardsdatascience.com/applied-deep-learning-part-4-convolutional-neural-networks-584bc134c1e2
https://ertedmar.hu/cikkek/konvolucio
https://towardsdatascience.com/recurrent-neural-networks-and-lstm-4b601dd822a5
http://colah.github.io/posts/2015-08-Understanding-LSTMs/

Neurális hálózatok – a mesterséges intelligencia szent Grálja

Neurális hálózatok – a mesterséges intelligencia szent Grálja

A mesterséges neurális hálózatok napjaink egyik leggyakrabban használt gépi tanulás algoritmusa. Gyakorlatilag minden probléma megoldására lehet használni, beszéljünk gépi látás, nyelvfeldolgozás, vagy akár önvezető autók témaköréről. Különösen sok esetben használatos a mély tanulás, komplex vagy sok adatot tartalmazó összefüggések értelmezésére.

A neurális hálózatokat, alkalmazási módszereit 3 cikkben szeretném bemutatni: elsőként az intuíció és a felhasználás alapvető fogalmait, kérdésköreit tisztázzuk. A második cikkben a hálózatok típusairól, és elrendezési lehetőségeit fogom bemutatni. Legvégül egy esettanulmányban, valódi adatok alapján fogunk előrejelzéseket készíteni neurális hálózatok segítségével.

Intuíció a neurális hálózatok mögött

Ha a neurális jelzőt olvassuk, az első dolog ami az eszünkbe jut az nem más, mint az agyban található neuronok. Ezek az egységek és a belőlük felépülő hálózatok felelősek az agy döntéshozatali funkciójáért. Az egyik legnagyobb különbség az ember és a robot vagy számítógépes program között, hogy az emberi agy önmagától képes felismerni, analizálni és tanulni a környezetében tapasztalható ingerekből.

Az emberi agyban található neuron szerkezete, kiemelve a bemeneteket és a kimeneteket.
Az emberi agyban található neuron szerkezete, kiemelve a bemeneteket és a kimeneteket. Forrás: Wikipedia.

Egy számítógépes program ezzel szemben megadott utasításokat követ és a végrehajtás visszajelzéseiből nem fejleszti önmagát. Ahogy egy korábbi cikkben is bemutattam, mesterséges intelligencia és gépi tanulás módszerekkel a statikus programkódok is alkalmasak lehetnek a környezet változásával bekövetkező események kezelésére.

A gépi tanulás és azon belül a neurális hálózatok módszertan képes tanulási fázisban önmaga fejlesztésére, ezáltal pontosabb becslési hatékonyság megvalósítására. Amikor az információ keresztül halad a neurális hálózaton, a rendszer érzékeli az elvárt és tényleges kimeneti adatok között az eltérést, így változtatja a paramétereit. Minél több adat halad keresztül a hálózaton, annál pontosabb becslést biztosít a rendszer. Ezt nevezik a tanulás folyamatának.

Tulajdonképpen a mesterséges neurális hálózatokat nem lineáris statisztikai adatmodellezéshez használhatjuk, ahol komplex kapcsolat és összefüggés létezik a bemenet és a kimenet között.

Megértés esetpéldája

Tegyük fel, hogy egy ingatlan árát szeretnénk meghatározni 4 paraméter segítségével: méret, szobák száma, ingatlan állapota, fűtés típusa.

Neurális hálózatok esetén az összefüggés az ingatlan paraméterei és ára között lineáris összefüggés alapján.
Összefüggés az ingatlan paraméterei és ára között lineáris összefüggés alapján.

Legegyszerűbb esetben mondhatjuk azt, hogy minél nagyobb az ingatlan annál többet ér, minél több szoba van annál magasabb az ára és így tovább. Azonban ha a lineáris összefüggéseken túl, további kapcsolatokat is keresünk, nem elégséges a fenti struktúra alkalmazása.

Nézzük meg három különböző, 50 négyzetméter alapterületű lakás esetén az árak alakulását:

Paraméter / LakásLakás 1Lakás 2Lakás 3
Méret (négyzetméter)505050
Szobák száma (db)123
Ár (millió forint)81210

Látható, hogy egy azonos méretű lakás esetén a példában a szobák száma nem lineárisan befolyásolja az ingatlan értékét. Egyszerűen elképzelhető, hogy egy 1 szobás lakásban túl nagy a tér, nehéz azt hasznosítani, míg egy 3 szobás lakásban pedig túlzottan kis méretűek a helységek. Így egy bizonyos lakásvásárló szempontjából a 2 szobás eset az ideális, amiért a legtöbb pénzt fizeti.

Neurális hálózatok esetén az összefüggés az ingatlan paraméterei és ára között nem lineáris kapcsolatok alapján.
Összefüggés az ingatlan paraméterei és ára között nem lineáris kapcsolatok alapján.

Amikor a megadott paraméterek, bemenetek közötti összefüggést is vizsgáljuk, már nem lineáris esetről beszélünk. Így lehet modellezni, hogyan befolyásolja két különböző paraméter egymásra gyakorolt hatása (esetünkben aránya), a kimeneti változót. A neurális hálózatok is hasonló felépítéssel rendelkeznek, mint ahogy a fenti ábrázolás mutatja.

Továbblépve, ha nagyon sok paraméter esetén, nem elégséges a páronkénti összefüggés vizsgálata, a neurális hálózatokba még több réteget is beépíthetünk.

Neurális hálózatok esetén az összefüggés az ingatlan paraméterei és ára között mély tanuláshoz hasonló kapcsolatok alapján.

Összefüggés az ingatlan paraméterei és ára között mély tanuláshoz hasonló összefüggések alapján.

Ebben az esetben akár a méret-szobák száma valamint az ingatlan állapot-fűtés típusa paraméterek közötti apró változások hatását is figyelemmel lehet követni. Ezt a struktúrát mély tanulásnak nevezik.

A mély tanulás olyan speciális megközelítés, amelyet a valós ideghálózatok leképezésére találtak ki. A neurális hálózat mélynek nevezhető, ha a bemeneti adatokat több nem lineáris transzformáció segítségével alakítják kimenetté.

Egyszerű és mély tanuló neurális hálózatok topológiai összehasonlítása.

Egyszerű és mély tanuló neurális hálózatok topológiai összehasonlítása. Forrás: Medim.

A példa alapján válik a legegyszerűbb módon láthatóvá, hogy neruális hálózatok esetén nem csak egyértelmű, jól értelmezhető összefüggéseket keresünk. Az emberi viselkedés, vagy döntéshozatal megfelelő modellezése esetén a legfontosabb tényezők, az előre nem látható összefüggések felderítése és alkalmazása.

Neurális hálózatok elemei

A neurális hálózatokat két fő elem alkotja: csomópontok és kapcsolatok. Az egyes csomópontok halmaza építi fel a hálózat rétegeit.

A csomópont egy olyan hely, ahol matematikai művelet történik meg, hasonlóan az emberi agyban található neuronok esetében. A csomópont az előző kapcsolat alapján történő adat bevitelét egyesíti egy olyan együtthatóval, vagy súllyal, amely a csomópont szempontjából erősíti vagy csillapítja az adott bemenetet.

Neurális hálózatok csomópontjának struktúrája.
Neurális hálózatok csomópontjának struktúrája. Forrás.

Így lehetséges az egyes paraméterek fontosságát meghatározni a tanuló algoritmus szempontjából, azaz hogy mely bemenetek a leghasznosabbak adott csomópont esetén a hibamentes kimenet becsléséhez.

Az egy csomópontba érkező bemeneteket összegezzük, majd az összeget egy aktivációs függvény segítségével dolgozzuk fel. Az aktivációs függvény segít meghatározni, hogy egy adott jel továbbhaladjon e a hálózaton vagy sem, ezáltal hogyan befolyásolja a végső kimenetet.

Ha a jelek továbbhaladnak az adott csomóponton vagy neuronon, az adott neuront aktívnak nevezzük.

Az elején említettek alapján, hálózatban egy szinten lévő neuronok alakítják ki a rétegeket a rétegek összessége pedig a neurális hálózatot. Az eredeti bemenetek megfelelően súlyozva érkeznek az első réteghez, ott bizonyos neuronokat aktiválva tovább lépnek a következő rétegekbe.

Ez folytatódik egészen addig, amíg el nem érkezünk a kimenethez (lehet egy vagy több is). A tanulási folyamat során a tanító adatok segítségével, megadott bemenetek segítségével beállítjuk a hálózatban levő súlyokat és aktivációkat úgy, hogy az elvárt és a tényleges kimenet között minél kisebb legyen a különbség. Ezután a neurális hálózat készen áll, hogy valódi, vagy új adatok alapján a bemenetek segítségével meghatározzuk a nem ismert kimeneteket.

Gyakorlati alkalmazásuk

Három fő csoportba lehet sorolni az alkalmazási lehetőségeket, függően attól, hogy milyen alapadatok alapján, milyen a vizsgálat változó.

1. Osztályozás

Minden osztályozási feladat a címkézett adatállomány (pl. kép egy kutyáról, fájl név: kutya.jpg) segítségével történik meg. Az emberi értelem alapján kell strukturálni a neurális hálózatokat, úgy hogy megismerjék a címkék és az adatállomány közötti kapcsolatot. Ezt a folyamatot más néven felügyelt tanításnak is hívják.

Példák lehetnek:

– arcok észlelése, képeken lévő emberek azonosítása, arckifejezések felismerése (öröm, düh),
– képeken lévő objektumok azonosítása,
– gesztusok felismerése videó felvételeken,
– hangok észlelése, emberi beszéd szöveggé átalakítása,
– szöveg vagy e-mail üzenet osztályozás (spam, csalók), üzenet feladó hangulatának felismerése (ügyfél boldog vagy csalódott).

Bármely ember által generált címkézési rendszer, bármely kimenetel ami érdekes lehet vagy korrelál a bemeneti adatokkal felhasználhatóak a neurális hálózat tanítási folyamatához.

2. Klaszterezés

Klaszterezés vagy csoportosítási feladatok során az egyes paraméterek hasonlóságának észlelése a feladat. A mély tanulási módszer nem igényel címkézés használatát a hasonlóságok felfedezéséhez. A címkék nélküli tanítási folyamatot felügyelet nélkülinek nevezik.

Példák lehetnek:

– keresési feladatok (dokumentumok, képek vagy hangok összehasonlítása),
– anomáliák felismerése: rendellenességek vagy szokatlan viselkedés észlelése (sok esetben a szokatlan viselkedés nagymértékben korrelál a detektálandó és megelőzendő tevékenységekkel – csalás, túlterheléses támadás stb.)

3. Prediktív analitika

Osztályozás segítségével a mély tanulási algoritmus képes korrelációt megállapítani a képet alkotó pixelek és a képen szereplő személy között. Ezt statikus előrejelzésnek nevezzük.

Hasonlóképpen megfelelő minőségű és mennyiségű múltbéli adatok alapján lehet kapcsolatot teremteni a jelen és s jövőbeli események között. A jövőbeli esemény bizonyos értelemben olyan, mint egy címke. A mély tanulás nem törődik az idő, mint tényező fontosságával, csak a legvalószínűbb következő értéket adja meg.

Példák lehetnek:

– hardver meghibásodások (adatközpontok, termelés, szállítmányozás),
egészségügyi problémák előrejelzése (stroke, szívinfarktus előrejelzése statisztikai és hordható eszközök adatai alapján),
– ügyfelek lojalitása (ügyfél kilépési valószínűsége a webes tevékenység és a meta adatok alapján),

Ahogy látható, a múltbéli viselkedés alapján a biztonsággal megjósolható események megjósolhatóak lesznek, így ezáltal megelőzni is könnyebb lesz.

A neurális hálózatok, valamint a prediktív analitika segítségével egy kevésbé meglepő világ felé haladunk. Sosem tudunk olyan rendszereket építeni amelyek teljes egészében megjósolják az ember és természet viselkedését, de a kiszámítható történések biztonságosan kezelhetők lesznek.

A következő részben az aktivációs függvénnyel fogunk foglalkozni, valamint bemutatom milyen neurális hálózat felépítések léteznek a funkcionalitás szempontjából.

Idősor alapú előrejelzés gépi tanulás segítségével Colab platformon

Idősor alapú előrejelzés gépi tanulás segítségével Colab platformon

Személy szerint mindig akkor kezdek el hinni valamiben, ha megfelelő leírások alapján saját adatokkal, saját motivációval azt a valamit le tudom tesztelni. Ezt első alkalommal a Mesterin-en, most fogjuk megtenni egy gépi tanulás példával:

múltbeli, idősor alapú (tőzsdei) adatok alapján fogunk előrejelzést készíteni, Python programozási nyelvben, Google Colab platformon.

Amennyire bonyolultnak tűnik első olvasatra, annyira lesz egyszerű a megvalósítása.

Kiemelném, hogy nem biztos, 100%-os módszert akarok adni, hogy lehet tőzsdei árfolyamokat előrejelezni, hanem a sokak által ismert, könnyen hozzáférhető adatokkal szeretnék dolgozni.

Idősor alapú adatok

Idősor alapú adatokról abban az esetben beszélünk amikor a statisztikai megfigyelések elemeit egymás követő időpontokban vagy időszakokban tesszük és ez a fajta időbeliség az adatok fontos tulajdonsága.

Szóval, ha 30 napon keresztül, minden reggel 8:00-kor feljegyezzük a lakás egy megadott pontján lévő hőmérő által mutatott értékek, és ezt táblázatos vagy diagramos formátumban tesszük, idősor alapú adatokról beszélünk. Nagyon fontos, hogy csak akkor értelmezhető jól az adatsor amikor a mintavételezések értéke mellé az adott dátumot is feljegyezzük, mert így állíthatóak időrendbe az értékek.

Egyéb példák lehetnek:

  • hipermarket napi bevételének adatsora,
  • munkanélküliségi ráta negyedéves adatsora,
  • vonat járat utasainak száma óránként,
  • ipari termelés és értékesítés negyedéves adatsora,
  • cég tőzsdei árfolyamának napi záróértékei.
Magyarországi ipari termelés és értékesítés idősori diagramja. Forrás: KSH.

Előrejelzés idősor alapú adat alapján

Ha képbe kerültünk az idősor alapú adatok fő tulajdonságaival, érdemes szót ejteni arról, hogy milyen lehetőségeink vannak az adatok alapján előrejelzést tenni.

Elsőként az átlag, medián fogalmak juthatnak eszünkbe: átlag a számértékek összege, osztva az összeadott számok számával, míg a medián a számértékek növekvő sorba rendezése után a középső elem, vagy páros számú elem esetén a két középső elem átlag.

Ezek jól hangzanak, de mi van abban az esetben, amikor például ránézünk az OTP árfolyam 2018-as napi záró értékeinek diagramjára?

Az OTP részvény napi záróértékei a 2018-as évben.
Az OTP részvény napi záróértékei a 2018-as évben.

Kékkel ábrázoltuk a napi árfolyamot és narancssárga vonallal az átlag értéket. Ha feltesszük a kérdést, valószínűleg melyek a 2019.01.01-ét követő tőzsdei záró érték, valószínűleg nem a sárga pontot jelölnénk meg.

Tudhatjuk, hogy az árfolyam nem mindig az áltag érték felé mozog el, lehetnek benne szezonalitások (visszatérő tendenciák), így emiatt szinte lehetetlen egyszerű leíró statisztikával előre jelezni az árfolymot.

Érzékeltetni szerettem volna, hogy a konvencionális statisztikai megoldások alkalmazásával nem lehet bonyolult rendszereket pontosan és jól leírni. Ilyen esetben érdemes a összetettebb matematikai stuktúrát, a gépi tanulás eszközeit igénybe venni.

Tőzsdei adatok letöltése

A példánkban tőzsdei adatokat fogok használni. A letöltéshez a BÉT (Budapesti Értéktőzsde) honapjára kell ellátogatni (link), ahol következő felület fogad minket.

A BÉT adatletöltési felülete.
A BÉT adatletöltési felülete.

Itt lehetőség van beállítani az időszakos bontást, az adott időszakot, az adatformát és az adat típusát. Mi most a 2015.01.01-től 2019.01.18-ig terjedő időszak, napi záró adataival fogunk dolgozni és vesszővel ellátott (*.csv, comma separated value) formátumot használunk.

Továbblépve, az “Azonnali piac” részen a “Részvények Prémium” lehetőséget kell kiválasztani, valamint egy instrumentumra rámutatni. A példában most az OTP árfolyammal fogok dolgozni. Ha minden beállítással végeztünk, a letöltés gombbal van lehetőség az adatok mentésére.

A kiválasztott insturmentum letöltése.
A kiválasztott insturmentum letöltése.

A letöltött fájlt eztán jegyzettömb vagy táblázatkezelő alkalmazással meg tudjuk nyitni. Miután megtettük, az alábbi kép fogad minket.

A táblázatkezelőbe betöltött csv fájl egy része.

A táblázatkezelőbe betöltött csv fájl egy része.

A CSV fájl formátum egy népszerű módja az adatok tárolásának, ugyanis nincsenek elválasztó tabulátorok az adatok között, csak a vessző értékek jelölik az értékek elválasztását.

Esetünkben 4 oszlop és 1010 sor szerepel a letöltött fájlban (mivel hétvégén nincs nyitva a tőzsde, azokra és az ünnepnapokra nincs jegyzett érték). Az első oszlop az instrumentum nevét jelöli, míg a második oszlopban találhatóak a dátum értékek. A dátumok és a hozzá kapcsolódó mennyiség értékek (zárási ár, forgó mennyiség) biztosítják az adathalmaz idősor alapú tulajdonságát.

Így már rendelkezésre áll a gépi tanulás alkalmazásához szükséges kiinduló adatsor.

Google Colab bemutatás

A nagy IT vállalatok közül a Google az egyik olyan aki komoly pénzt és időt invesztál a mesterséges intelligencia és a gépi tanulás népszerűsítésére. Ennek egyik eredményeként létrehozta a Colab felületet, azért hogy elősegítse a gyakorlati alkalmazásukat.

A program nagyon hasonló a Google Docs rendszerhez, aki rendelkezik Google fiókkal ingyenesen használhatja a rendelkezésre bocsájtott számítási kapacitást. A Colab felületen Python programozási nyelvben, szükség esetén GPU (grafikus feldolgozó egység, videókártya) teljesítmény igénybe vételével tudják a kezdők programozási és a gépi tanulással kapcsolatos tudásukat fejleszteni és elmélyíteni.

Előkészületek a gépi tanulás alkalmazásához

Első lépésként szükséges egy Google fiók, melynek Drive felületére kell feltöltenünk a BÉT rendszeréből exportált adatállományt.

A Google Drive rendszere, ahova az exportált adatállomány kell feltölteni.
A Google Drive rendszere, ahova az exportált adatállomány kell feltölteni.

A Colab felületére belépve, egy új Python 3 fájlt kell megnyitni, ez lesz az az online környezet, ahol dolgozni fogunk.

A Google Colab platform, ahol a gépi tanulás programját el fogjuk készíteni.
A Google Colab platform, ahol a gépi tanulás programját el fogjuk készíteni.

Ha ezzel megvagyunk, egy üres programfájl kerül a szemünk elé. Ezek a file-ok *.ipynb kiterjesztéssel rendelkeznek és a Drive / Colab Notebooks elérési úton kerülnek tárolásra. Ezek a fájlok letölthetőek és adott esetben saját gépen is szerkeszthetőek.

Egy üres Python file a Colab felületen.
Egy üres Python file a Colab felületen.

Első lépésként, a későbbi könnyebb azonosítás végett az Untitled0.ipynb-t, egy kattintás segítségével nevezzük át.

Az átnevezett Python file a Colab felületen.

Az átnevezett Python file a Colab felületen.

A Colab rendszerben vannak beépített parancsok és könyvtárak, de az egyik leghasznosabb tulajdonsága az hogy saját magunk is tudunk könyvtárakat telepíteni. Ezt a !pip install paranccsal tudjuk megtenni. Második lépésként az fbprophet könyvárat kell telepíteni.

Colab parancssor: !pip install –upgrade fbprophet

Ezután a bal felső sarokban található cella futtatása (run cell, play ikon, CTRL+ENTER) segítségével tudjuk telepíteni az online környezetben az fbprophet rendszert.

Fbprophet könyvtár telepítése.
Fbprophet könyvtár telepítése.

Fbprophet bemutatása

Na de mi is az a fbprophet? Az alkalmazást idősor jellegű adatok alapján történő előrejelzésre fejlesztették ki, ahol a rendszer egy additív modellt használ, olyan módon hogy figyelembe veszi a napi, heti, éves szezonalitásokat. Azon adatok alapján lehet a legpontosabb előrejelzéseket tenni az fbprophet segítségével, melyek erős szezonalitás hatással rendelkeznek és nagy mennyiségű múltbeli adat áll rendelkezésre.

Nagyon fontos, hogy a rendszer kezeli az idősorból esetlegesen hiányzó adatokat, trendek eltolódását, valamint a kiugró adatokat is. Ebből a szempontból az fbprophet az egyik legjobb egyszerűen használható alkalmazás tőzsdei idősoros adatok alapján történő előrejelzés készítésére.

Ha megtörtént az alkalmazás telepítése, egy új cellát kell nyitni (bal felső sarok: + CODE). Ezután importálni szükséges a telepített fbprophet könyvtárat valamint más szükséges könyvtárakat. Az fbprophet telepítésével kapcsolatos kimeneti információkat az első sor melletti CLEAR OUTPUT ikonnal törölni lehet.

Colab parancssor:
import pandas as pd
from fbprophet import Prophet
from fbprophet.plot import add_changepoints_to_plot

A különböző könyvtárak importálása a programba.
A különböző könyvtárak importálása a programba.

A Python programozási nyelvben az import parancs szükséges, hogy a futtatott program használni tudja a telepített könyvtárakat. Első lépésként a Panda könyvtárat (adatkezelés és adatvizualizáció miatt szükséges) importáljuk és az as paranccsal megadjuk, hogy később az egyszerűség kedvéért csak pd kóddal hivatkozunk rá.

Az fbprophet könyvtárból két részt csatolunk a saját programunkhoz: a Prophet szükséges az idősor alapú előrejelzés kiszámításához, míg az fbprophet.plot a vizuális megjelenítés miatt lesz hasznos eszköz. Ha megvagyunk a lejátszás ikonnal tudjuk a programsort a rendszerben futtatni.

Ha nincs hibaüzenet, ebben az esetben nem kapunk visszajelzést a Colab-tól. Következő lépésként a Drive tárhelyet kell a Colab-hoz csatolni, annak érdekében, hogy onnan adatot lehessen beolvasni.

Adatok beolvasása Python-ban

Colab paranccsor:
from google.colab import drive
drive.mount(‘/content/drive’)

A Drive tárhely kapcsolása a Google Colab rendszerhez.
A Drive tárhely kapcsolása a Google Colab rendszerhez.

A futtatás nem történik meg, ugyanis a csatlakozáshoz autentikálni kell a Google Drive felületet. Ennek érdekében a megadott linkre kell kattintani, majd az ott található kódot az szükséges helyre be kell másolni és enter billentyűt nyomni. Ha minden rendben lezajlott a Mounted at /content/drive üzenet jelenik meg.

Egy következő cellában hivatkozzuk meg a korábban feltöltött CSV adatsort.

Colab paranccsor:
df = pd.read_csv(“drive/My Drive/”)
df.head()

A df lesz az a változónk ahova a Panda (I) segítségével a CSV fájlból beolvassuk az adatokat. A Python közvetlenül nem képes fájlokból dolgozni, így mindig szükséges először a külső fájl tartalmát változóba beolvastatni a program segítségével.

A drive/My Drive/ rész után kell megadnunk a Drive-ba feltöltött fájl nevét és kiterjesztését. Amennyiben a feltöltés előtt átnevezzük vagy más CSV fájlt használunk adatelemzésre, értelemszerűen annak a nevét kell megadni. Amennyiben nem a Drive gyökér könyvtárába töltjük fel az fájlt, természetesen az elérési utat is át kell nevezni.

 A Panda segítségével, a Drive-ba feltöltött fájl olvasásása.
A Panda segítségével, a Drive-ba feltöltött fájl olvasásása.

A df.head() paranccsal íratjuk ki az importált adatok fejlécét és első pár sorát. Amikor a cellát futtatjuk (play ikon vagy CTRL+ENTER segítségével) fenti ábrán látható táblázatos visszajelzést kapjuk.

Itt a korábban megnyitott CSV fájl köszön vissza, ugyanolyan struktúrában, ahogy korábban a számítógépen, excel segítségével megnyitottuk. Ezután a

df.plot(x=’Dátum’, y=’Utolsó ár’, kind=”line”)

paranccsal vonalas rajzon is megjeleníthetjük az értékek változását. Az x értéket minden esetben a időváltozó nevével (jelen esetben Dátum) jellemezzük, míg az y a változó mennyiségét jelenti.

Az OTP árfolyam alakulása 2015-től napjainkig.
Az OTP árfolyam alakulása 2015-től napjainkig.

Előrejelzés elkészítése

Ha ezzel is végeztünk, jön a legizgalmasabb rész, a gépi tanulás applikációja a adatokra, olyan módon, hogy abból az árfolyam értékének jövőbeli alakulását előre lehessen jelezni.

Colab parancssor:
df = df.rename(columns={‘Dátum’:’ds’, ‘Utolsó ár’:’y’})
m = Prophet(changepoint_range=0.2)
m.fit(df)
future = m.make_future_dataframe(periods=200)
forecast = m.predict(future)
fig1 = m.plot(forecast)
a = add_changepoints_to_plot(fig1.gca(), m, forecast)

A df.rename paranccsal átneveztük az oszlopok fejlécét annak érdekében, hogy az fbprophet értelmezni tudja az adatokat.

Az m változó fogja megadni, a prophet struktúrában milyen százalékos arányban jelenjenek meg trendfordulók (changepoint_range=0.2, ez lehet variálni.). Ez az értéket utána m.fit(df) paranccsal illesztjük a saját adatsorunkra.

A future változónk lesz, ahol a jövőbeli (napi) értékeket tárolni fogja a program. A változó amit szabadon át lehet írni, a periódusok száma (periods), azaz hogy hány napot jelez előre a rendszer. Az alap érték használatával 200 napos előrejelzés alakulását láthatjuk majd az ábrán.

És a végső ábránk (dobpergés…):

A gépi tanulás könyvtár (Fbprophet) segítségével előrejelzett OTP részvényárfolyam alakulása.
A gépi tanulás könyvtár (Fbprophet) segítségével előrejelzett OTP részvényárfolyam alakulása.

Az ábra értelmezését szándékosan nem végzem el, mindenkinek a saját fantáziájára bízom. Érdemes azonban a fent megnevezett 2 változó (changepoint_range és periods) variálásával figyelni hogyan reagál a gépi tanulás a jövőbeli adatok meghatározása során.

Összefoglalás

A gépi tanulás alkalmazása nem is annyira bonyolult, mint amennyire első ránézésre tűnik. A Google Colab egy remek felület, ahol ingyenesen, mindenféle programok telepítése nélkül ki lehessen próbálni a mesterséges intelligencia alkalmazásait. Mivel ingyenesen biztosít erőforrást, komolyabb, GPU-t igénylő számítási feladatok (gépi látás tanítása) elvégzésére is lehet használni.

A cikkben szerepelő példában, egy nyilvánosan elérhető (BÉT adatok) tőzsdei részvény múltbeli adatait töltöttük fel a Google Drive rendszerébe, melyet összekapcsoltuk a Colab programozási platformmal. Itt egy egyszerű, pár soros program segítségével telepítettük a gépi tanulást biztosító Fbprophet Python könyvtárat, és változóba olvastuk a CSV fájlban tárolt adatokat. Innen pedig pár sor segítségével sikerült az idősor alapú adatok 200 napos előrejelzését megadni.

A módszert jól lehet használni, más idősor alapú adathalmaz elemzéséhez, de jól működik például termelési folyamatparaméterek múltbeli értékein alapú előrejelzése során is. Innentől kezdve a képzelet szab határt milyen adatok előrejelzésére lehet felhasználni a leírt módszert.