Mélységi tanulás, mesterséges intelligencia és gyakorlati alkalmazások


Hozzáadva: 2020. Május 02. Megtekintve: 333

Az internet tele van olyan cikkekkel, amelyek arról beszélnek, hogy az adat tudomány illetve a mesterséges intelligencia meg fogja változtatni a világot. A pénzügyi világban olyan dolgokról beszének, mint a személyre szabott pénzügyi ajánlatok, csalás elleni védekezés, kockázatelemzés (például kölcsönök), befektetési portfólió analízis vagy kereskedési stratégiák, de az ezekhez szükséges technológiát máshol is hasznosíthatják. Ilyen területek lehetnek vásárlói szokások elemzése, a személyre szabott egészségügyi szolgáltatások, a megelőző karbantartó munkálatok kezelése gyártósorokon valamint az eladási trendek előrejelzése. Ezeket a felhasználási területeket már régóta ismerjük és nem is hívhatjuk őket szigorú értelemben vett mesterséges intelligenciának, amelyet a neurális hálók jelentenek. Azonban, mivel egyre inkább forgalomba kerülnek az ilyen könnyen módosítható olcsó hardwarek, amelyeken a készen kapható algoritmusokat lehet futtatni az adat tudomány számára elkerülhetetlen erőforrás igényes megközelítések népszerűsége növekszik és ez húzza a mesterséges intelligencia szekerét is.

Főbb definíciók: Gépi tanulás, Adat tudomány és egyebek


A szakavatottak számára a definíciók jól ismertek, azonban sokan vannak olyanok, akik kevésbé járatosak a témában. Nézzük tehát egy néhány egyszerű definíciót.


Alapvetően, az adat tudomány folyamatai olyan adatokat alakítanak át, amelyek heterogén forrásból származnak. A hasznos döntési lépésekhez modelleket és tanulási algoritmusokat használnak. A döntéseket automatizálni lehet. Ilyenek lehetnek az online keresések vagy a hitelkártya csalások elleni védő mechanizmusok. A döntéseket át lehet adni embereknek, mint például egy befektetési alap kezelőjének, aki a befektetésekről dönt. A következőekben nézzük mi a különbség az adat tudomány és az adat mérnökség között. Igazándiból ugyan arról az érméről van szó, csak a másik oldalról nézzük.


Az adatmérnökök és az adattudósok egymásra vannak utalva és egyik sem képes a másik nélkül értelmes munkát végezni. Egy jó adattudósnak azonban képesnek kell lennie áthidalni a szakadékot, amely az algoritmusok, az implementáció és az üzleti fortélyok között áll. De sok olyan mérnökkel is találkozhatunk, akik mind a két képességgel meg vannak áldva, ők gyakran doktori képesítéssel rendelkeznek és algoritmuselméleti kutatásokat végeznek, amelyben egyetemi éveiket élik újra. Az ő létezésük teszi azt lehetővé, hogy a specialisták egyedi feladatokat tudjanak kiosztani. Ezek lehetnek algoritmuselméleti kutatások, adatbányászat és tárolás, szoftverfejlesztés és az abból következő üzleti jelentések, valamint automatizált feladat végrehajtás

A következőekben nézzünk pár algoritmuselméleti fogalmat, amelyek a Java nyelv tárgyalásánál lesznek fontosak. Gépi tanulás: “Olyan tudományterület, amely a számítógépet olyan képességgel ruházzal fel, amelynek segítségével azok tanulásra képesek anélkül, hogy azokat felprogramoztuk volna.” - Arthur Samuel (1959)

Ezt a területet további két kategóriára lehet feloszatni.


A gépi tanulás alapvetően cimkézett tanuló adatot használ arra, hogy jövőben vett értékeket jósoljon meg, vagyis példákból tanul. A tanulásnak két fajtája van. Az egyik a felügyelt a másik a felügyeletlen. Felügyelt tanulás esetében a modellt ismert bemenet és kimenet mellett tanítják. Felügyeletlen tanulás esetében a bemeneti adatban rejtett mintázatot vagy természetből adódó struktúrákat keresnek.


Olvass még: Arcfelismerő és nyomkövető rendszer megvalósítása videókártyán


A mélységi tanulás esetében a számítógépes modell megtanulja, hogy hogyan kell osztályozni képek, szövegek, jelek vagy hangok segítségével. A modelleket nagy méretű cimkézett adat és sok rétegből álló neurális háló segítségével tanítják. A sok mélységi tanulási algoritmus közül a pénzügyi területeket használtak érdekesek lehetnek a következők:


Konvolúciós neurális hálózatok, amelyek képi mintázatokat nyernek ki. Ezeket segítségével például városokon kívüli bevásárló központok műhold felvételeit analizálják és az ott parkoló autók számából következtetnek az eladási statisztikára. Rövid-hosszú távú memória hálózatokat használnak szövegek érzelmi tartalmának eldöntésére és ezekkel elemeznek híreket, Twitter bejegyzéseket vagy könyvelési jelentéseket és ezeken alapulva hoznak meg kereskedési stratégiákat.


Megerősített tanulás: Magyarul a próba szerencse módszere. A modellt betanítják azokra azokra a módszerekre, amelyek pozitív eredményt produkáltak és eldobatják vele azokat, amelyek nem működtek. Ez a tanulási módszer különösen népszerű a keresési, eladási és kereskedelmi területeken, mert összetett emberi viselkedéseket képes modellezni. Továbbá ADAS (Advanced-Driver Assistance Systems, Fejlett-Vezető Asszisztens Rendszerek)-ben is használják őket, hiszen jól alkalmazhatóak az ember-gép kapcsolati felületi rétegben.


Miért érdemes Java-t használni az adattudományban?

Minden programozási nyelvnek megvan a maga szépsége. A 2010-15-ös években a Python és az R nyelvek voltak népszerűek az adattudomány területén. Ezek előtt a MATLAB-ot használták a fejlesztők, hiszen ebben implementáltak sok kezdeti neurális hálót. Megoszlanak a vélemények arról, hogy a Python-nak és az R-nek milyen jelentősége van a vállalati szoftverfejlesztés világában. A kutatásban előszeretettel használnak R-t, hiszen gazdag statisztikus könyvtárral rendelkezik, Python-ban pedig Tensorflow, PyTorch és Keras-nak hívott könyvtárakat lehet használni SciPy és Pandas csomagokkal kiegészítve. A többi nyelv is felveszi a versenyt, hiszen a Java, C++ és a .NET is egyre gyakrabban kerül a programozók kezébe, amikor gépi tanulási algoritmusokat kell implementálni.


Sokan azon a véleményen vannak, hogy a legjobb eredmény eléréséhez ezek közül ki kell választani egyet, de ez nem feltétlenül igaz. A választáskor alapvetően két dolgot kell megfontolni:


1. A végső termék milyen mértékben lesz kompatibilis a már meglévő szoftverekkel.


2. Milyen mértékben léteznek aktív környezetben használható adat analizáló könyvtárak ezeken a nyelveken.


Jelenleg szinte minden népszerű nyelvben találunk jól használható adat analizáló könyvtárat. A Java kiváló példa és napjainkban nagyon aktív fejlesztési láz övezi, köszönhető ez főként a már meglévő JVM nyelveknek. A C++ is hasonló tulajdonságokkal rendelkezik és nagy mennyiségben szolgáltat már meglévő algoritmus implementációkat. A szabadalmaztatott rendszerek, mint például a .NET általában tartalmazzák a legújabb algoritmusok megvalósítását és a tanulási paradigmákat. Ha valaki tehát azt mondja neked, hogy ma csak Pythonban lehet programozni, nem biztos, hogy érdemes meghallgatni a további mondanivalóját.


A Java nyelvben való fejlesztésről a következő két pontot emelném még ki:


i) Az adattudományban megjelenő algoritmusok, amelyeket Python, R vagy MATLAB segítségével lettek megvalósítva főleg a statisztikából, gépi tanulásból és a mélységi tanulásból erednek, ezáltal sokan közülük elterjedtek más nyelvekben is. A Java-ban például a következő keretrendszerek népszerűsödnek:


- DeepLearning4J Ebben találunk eszközöket fordításra, tanulásra és a neurális hálók kihelyezésére is. Az RL4J, amelyet megerősítéses tanulással is felszereltek képfeldolgozásra használt és Markov Döntési Folyamatot (Markov Decision Process) valamint Mély Q Hálózatot (Deep Q Network) is tartalmaz.


- ND4J: Egy fontos tudományos JVM alapú könyvtár, amelyet a Python-ban megírt NumPy és fő Matlab modulokra alapoztak. Mélységi tanulásra is használható.


- Amazon Deep Java Library: Gépi tanulási és mélységi tanulási modelleket lehet vele fejleszteni és kihelyezni. Főként a MXNet, PyTorch és a TensorFlow könyvtárakon alapul.


Nem meglepetés tehát, hogy a Java-t sokan előszeretettel használják az adattudomány területén.


Ne felejtsük el, hogy az üzleti világban használt népszerű környezetek, mint például a SAS, a KNIME vagy a Rapid Miner adatttudományos területen használható Java nyelven alapuló rendszereket biztosítanak számunkra. A MATLAB szintén jól kapcsolódik a Java nyelven fejleszett alkalmazásokhoz API-ja segítségével. A Matlab Production Server segítségével például Matlab nyelven megírt algoritmusokat lehet Java üzleti környezetbe kihelyezni. A Java kódban lehetőség van interféc definiálására, amely a kihelyezett Matlab funkciót valósítja meg és ezzel egy proxy objektumot hozhatunk létre. Ez az objektum fog az aktív környezetben futó szerverrel kommunikálni és meghívja majd a Matlab által generált függvényt.


R nyelven írt nyílt forráskódú funkciók Java nyelvvel való integrációjára is van lehetőség. Erre használják az RServe csomagot például.


Röviden tehát a Java nyelv segítségével aktív vállalati környezetben futtatható adattudományos algoritmusokat valósíthatunk meg, de ha ragaszkodunk egy másik nyelvhez, akkor is van lehetőség a két nyelv összekapcsolására. Mindenbizonnyal a Python (a NumPy, SciPy és a Pandas könyvtárakkal), az R és a Matlab, főként azért mert erős statisztikus alapokkal rendelkeznek és mátrix algebra könyvtárakat is tartalmaznak megmaradnak a legnépszerűbb nyelveknek az adattudomány területén, de a Java sem érdemli meg, hogy elfelejtsük.


És a C++ is megér egy misét. Ne felejtsük el, hogy a fő Python könyvtárak, mint például a Tensorflow és a PyTorch erős C++ alapokkal rendelkeznek.


ii) Az üzleti szoftverfejlesztés világában a Java Virtuális Gép (JVM) segítségével a Java fontos szerepet tölt be. Itt azokról a megvalósításokról beszélünk, amelyekhez a biztonságos adatátvitel elengedhetetlen és Java alapú platformokon vagy nyelveken (Scala vagy Clojure) alapulnak. Ezek lehetnek:


Hadoop: Elosztott tárhely és big data (nagy mennyiségű adat) feldolgozás, MapReduce programozási modell segítségével


Spark: Hasonló a Hadoop-hoz, de kötegelést és adatátvitelt valósít meg


Kafka: Üzenetváltás és adatátvitel


Cassandra: NoSQL adatbázis


Neo4J: Egy másik népszerű NoSQL adatbázis


Elasticsearch: Keresőmotor a Lucene könyvtáron alapulva. Elosztott szöveges keresőmotor, amelyhez van HTTP webes interféc és JSON dokumentumokat is használhatunk vele.


A Java kiválóan használható elosztott környezetekben. Természetéből fakadóan ügyesen kezeli a biztonságos adatátvitelt, módosítást és a különböző kapcsolatokat. Stabil fejlesztési irányvonalát a Sun Microsystems, Oracle és a nemrég megjelent OpenJDK szervezetek felügyeletének köszönheti. A vállalati szoftverfejlesztés megvalósítására ott van a JVM, amely segít abban, hogy az egyszer kifejlesztett rendszert bárhova feltelepíthessük. Fontos itt megemlíteni a Project Panama-t, amely megkönnyíti a hozzáférést a Java nyelvben való fejlesztéshez és közelebb hoz minket a videókártya architektúrákhoz valamint a számítás igényes mélységi tanulásra használt CUDA és OpenCL alapú könyvtárakhoz.


Összességében véve tehát a Java egy elegáns pozíciót foglal el a vállalati szoftverfejlesztés területén, de egyre gyakrabban találkozunk vele az adattudományos területeken is. Azt várjuk, hogy karöltve haladnak a fejlődés útján a Python, R, Matlab, C++ és más nyelvekkel, nem próbálva meg azokat leszorítani az útról. Így egyre több izgalmas megvalósítással találkozhatunk majd az adattudomány amúgy is sok csodát rejtő erdejében.



Hozzászólások (1)

PKovacs 2020.05.08 07:05

J


Érdekes bejegyzéseink

Partnereink írták

Scroll to Top