AI és gépi tanulás: Hogyan lehet megtanulni őket vizuálisan

Ezt az oktatóanyagot mint mesterséges intelligencia alapszintű darabját hoztam létre.

Minden új tantárgyat a nyelvi nyelven kell bemutatni, amely megegyezik a tanuló abban az időben elért készségeivel. Tehát ne várjon még őrült matematikai képleteket.

Különösen a Machine Learning, más néven a Deep Learning nézetet fogjuk áttekinteni.

A neurális hálózat mélységét a bemeneti rétegek száma határozza meg.

A gépi tanulási algoritmusok megmérik egy adott adatkészlet valószínűségét egy adott mintához viszonyítva.

Tartományban gondolkodás

Az agyában lévő neuronok egyértelműen nem digitálisak, de a bináris logikára akár be-, akár kikapcsolt állapotban hasonlítanak. De a szoftverben inkább egy sor értéket használunk.

A számítási ciklus eredménye egy AI műveletnél egy precíziós becslés a 0,0–1,0 közötti tartományban. Végül - a kimeneti értéket az alapján állítják elő, hogy a bemeneti adatok mennyiben felelnek meg egy adott mintának, amikor az 1,0 100% -os egyezésű (ritkán érheti el ezt, de 0,95 - 0,97 jó.)

Ezt a mintát általában képzik, mielőtt értelmes eredményeket lehet elérni. Erről bővebben később ebben az oktatóanyagban. De először: itt van az ML a legalapvetőbb.

Az egész idegi hálózatokkal kezdődik - az agyban lévő idegsejtek fizikai szerkezetének szoftver utánozása.

Egyszerű neurális hálózat felépítés

Gépi tanulás a legalapvetőbb formájában - egy nagyon egyszerű idegi hálózat.

Ebben a minimalista példában az 1 bemeneti réteg látható, amely 3 bemeneti csomópontból áll.

Révénként többszörös bemeneti készlet biztosított. Minden bemenetet valamilyen típusú forrásból gyűjtünk. Mint például az arcfelismeréshez használt képpont tömbje, például / vagy bármilyen más adat. Ez attól függ, hogy mi a célja az AI algoritmussal.

Mind a bemeneti, mind a kimeneti érték lebegő pt. számok 0,0 és 1,0 között.

Logisztikai szempontból a hálózati üzemeltetés során az adatokat balról jobbra továbbítják. Ugyanakkor… A visszaterjedést néha használják a neurális hálózat optimalizálására. Ekkor fordítva haladunk a hálózaton. De egyelőre nem kell ezzel aggódnunk.

Összeg

Több bemeneti csomópont összege éppen úgy hangzik. Ez az előző bemeneti réteg minden csomópontjának súlya. Az összeg kiszámítása után az aktív funkcióba kerül feldolgozásra.

Aktiválási funkció

Az aktiválási funkció a bemeneti értékek összegét kimeneti értékre konvertálja.

De pontosan hogyan működik?

Vessen egy pillantást a gépi tanulás egy másik aspektusára.

Emlékszel a középiskolai matematikai egyenletekre? Parabolas - bárki?

Képforrás: https://pl.wikipedia.org/wiki/Plik:Catenary-pm.svg

Az aktivációs függvény szó szerint csak egy matematikai egyenlet. Tehát a matematikai háttérrel rendelkezők számára ez kissé könnyebben megragadható. Ha nem, olvassa el tovább a vizuális ábrákat és az oktatóanyag többi részét, hogy elkezdjen belemerülni!

Ennek oka, hogy nem használhatunk egyszerű lineáris egyenleteket, korlátozásuknak köszönhető.

Nem elegendőek a hasznos ideghálózatok létrehozásához.

A neurális hálózatokat bonyolultabb egyenletek köré tervezték. Például a Sigmoid (más néven Logistic) funkció nagyon gyakori. (Néhány különféle képet nézünk meg az alábbi szakaszban.)

Mindegyik f (x) =… formában van, majd az x értéket az adott függvényre jellemző módon összenyomják. Miért számít ez és miért vannak különféle AF-funkcióink, egy kicsit később derül fény.

Mi történik, ha megkapjuk az eredményünket?

Az AF továbbítja a kiszámított értéket a következő csomópontra, és lényegében részleges bemenetként a következő bemeneti halmaz csomópontjának egyik aktiválási funkciójába.

Gondolkodhat úgy, mintha több bemenet sorozatát venné. És átadjuk a kiszámított értéket a következő csomópontra. Ez a bemeneti halmazok közötti átjáró.

Az aktiválási funkciók különféle típusai

Csakúgy, mint a matematikai egyenletek különféle típusai ... az aktiválási függvények különböző típusai is vannak.

Pontosan az, hogy hogyan számolják össze a számokat a végső kimeneti érték eléréséhez, szorosan összekapcsolódik a meglévő hálózat előző képzésével. Tehát még nem mehetünk be olyan mélyen a témába, mert összességében a rendszer nem olyan egyszerűen épül, mint a numerikus eredmény kiszámítása és visszatérítése.

De mit tehetünk - az eddigi megértés elmélyítése érdekében - vessünk egy pillantást az egyes matematikai egyenletek vizuális ábrázolására a különféle aktivációs függvények mögött!

Ez egy vizuális bemutató. És ahhoz, hogy alapvető képet kapjon arról, hogy mire küzd, itt egy táblázat a matematikai egyenletek klasszikus készletéből áll, amelyre sok klasszikus aktiválási függvény alapulhat.

A legalapvetőbb AF-t f (x) = x vagy az Identity Function jelöli.

Néhány alapvető ismert matematikai képlet.

Számos más is van. De egy kicsit összetettebbek.

Alapvetően ezeket a függvényeket használják a kapott csomópontérték meghatározására.

Mennyire határozza meg egy aktiválási függvény értékét?

Nos, ez egy AF. Bemenetként vesz számot, és visszatérési értéket hoz létre 0,0–1,0 között (néha a tartomány +/- végtelen). A tényleges képleteket a fentiekben ismertetjük. Ezeket az egyenleteket újraírhatja függvényekként Python, JavaScript vagy bármely más programozási nyelvben.

Ha matematikába jár, és sok idő van a kezedben, akkor imádni fogja ezeket a funkciókat kódban kiírni! De gyakran nem kell. És ez azért van, mert a már létező A.I. a könyvtárak gondoskodnak róla. Ilyen módon összpontosíthat a neurális hálózat kiépítésére és egy meghatározott célra történő képzésére.

Minden csomópont számított súlyt hordoz

Tehát ezek az aktiválási funkciók értéket teremtenek.

A legfontosabb dolog, amelyet ebben az időben észre kell venni - minden pont súlya.

Ez a súly azt a valószínűséget méri, hogy egy bizonyos mintázat illeszkedik-e.

A bemeneti halmazok több rétege azonban lehetséges, ahogy a következő példában bemutatjuk.

Egy kissé fejlettebb neurális hálózat csomópontjai kapcsolódnak egymáshoz.

Minden egyes csomópont a következő bemeneti réteg minden egyes csomópontjával kommunikál, amely ezt a keresztkötött kommunikációs autópályát alkotja.

Az egyes rétegekben szereplő elemek száma tetszőleges. Ennek nem feltétlenül kell lennie a fenti ábrán látható számmal. Attól függően, hogy melyik problémát próbálja megoldani.

Néhány intuíció és kreativitás szükséges ahhoz, hogy meghatározzuk az egyes rétegekben használni kívánt bemeneti csomópontok számát. De még ugyanazon probléma megoldása különféle idegi hálózati struktúrákkal is megvalósítható.

A számítások nemlineáris jellege miatt ez a folyamat kétértelmű.

Rejtett rétegek

Éppen arról beszélgettünk, hogy egy neurális hálózat hogyan lehet több bemeneti réteggel. Ezek úgy tekinthetők, mint a csomópontok függőleges sorai.

Az első bemeneti sor és a kimeneti csomópont közötti összes belső réteget gyakran rejtett rétegeknek nevezik. Ennek van értelme, mert itt történik a legtöbb szemcsés AI feldolgozási munka. Alapvetően ez az AI rejtély doboz.

Különböző típusú ideghálózati minták

Időnként az ML tűnhet olyannak, mintha hálózati mintát készítsen, hogy megfeleljen a mintáknak.

A neurális hálózatok különböző formájúak.

A különféle típusú ideghálózati struktúrák alkalmasabbak a szerkezetükhöz kapcsolódó bizonyos típusú problémák megoldására.

OK - De hogyan írhatjuk a kódot?

Ez sok elmélet volt.

De hogyan valósíthatjuk meg valóban kódban?

Az induláshoz használhat egy olyan könyvtárat, mint a Tensorflow.js.

De ez nem fog semmi jót hozni, mert még mindig sok mindent le kell fedni.

OK - De hogyan hoz értelmes eredményeket?

Eddig megvitattuk az idegi hálózat szerkezetét.

Beszéltünk az aktiválási funkciókról, az adatbevitelről és a rejtett rétegekről.

Arról is beszéltünk, hogy milyen súlyok vannak a szimulált kapcsolatok felé.

Annak érdekében, hogy egy nemlineáris gépi tanulási algoritmus ésszerű eredményt hozzon, először egy meglévő adatkészletre kell képeznie.

Mindig az adatok megválasztásával kezdi meg az AI algoritmusát.

Ez attól függ, hogy milyen problémát próbál megoldani.

Ha fel szeretné ismerni egy kép számát, akkor számjegyekkel kezdje meg.

A számok felismerése egy képernyőképről

A klasszikus AI-példa egy ideghálózat megtanítása a 0–9 közötti szám felismerésére. Ugyanúgy, mint egy gépi algoritmus kiképzése az A – Z betűk vagy akár az emberi arc egy részének - egy szem vagy egy száj felismerésére A fénykép egy olyan alak vagy mintázat egy bizonyos típusát is ábrázolja, amely minden ember számára általános, de kissé eltérő lehet.

Ne feledje, minden, amivel itt foglalkozunk, minták.

Ha az algoritmus felismer egy mintát, akkor az soha nem lesz 100% -os egyezés. De minél közelebb jutunk az 1,0-hoz (100%), annál valószínűbb, hogy a keresett forma képviseli azt, amit felismertünk.

Ha egy szabványos betűtípust használnánk, akkor sem kellene semmilyen AI-munkát elvégeznünk. Az egyes számjegyeket egyszerűen beolvashattuk a pontos pixelmintázat érdekében. De az AI legfontosabb pontja az, hogy felismerjék a homályosság mintáját.

Először is szükségünk van valamilyen adathordozóra, amelyet edzési adatokként használunk. Minden számjegy képpel ábrázolható:

Ugyanazok a számjegyek többször írva kissé eltérő mintát eredményeznek. A kép a JavaScript AI bemutatóján található, amely a http://myselph.de/neuralNet.html webhelyen található

Az egyes számjegyeket látás alapján könnyen felismerheti. De egy AI algoritmust ki kell képezni a hasonló minták felismerésére, mert bár ezek hasonlóak, még mindig nem 100% -ban azonosak.

Ennek elérése érdekében az elsődleges mintát kisebb blokkokra bonthatjuk, és megvalósíthatunk valamit, amelyet szolgáltatáskivonásnak nevezünk.

Feature Extraction

A számjegyek azonosításához az algoritmus olyan szolgáltatáskivonat-rendszert valósít meg, amely a közös mintákat a teljes számjegy / szimbólum / betű / stb. Felépítéséhez szükséges megfelelőkre bontja.

A minta lényege változatlan. Például a 0 többnyire egy kör - kisebb mintázatokra bontható, mindkét oldalán ívelt:

Ha csak akkor képezhetjük ki algoritmusunkat, hogy felismerjük ezt a 4 egyedi mintát, és ellenőrizzük jelenlétüket a kép lokalizált területén, kiszámolhatjuk a bizonyosság mértékét, amellyel azt lehet mondani, hogy ez nulla lehet.

Ugyanez vonatkozik a többi számjegyre is. Az 1. szám például egyetlen függőleges sáv. Vagy talán egy kisebb vonallal, kissé szögben a tetején.

A 2-es szám egy fél kör a tetején, átlós vonal és vízszintes vonal.

A 3-as szám két félig íves mintára bontható.

A 4. szám 3 vonalnak tekinthető: függőleges, vízszintes és átlós.

…stb.

Mi van, ha ez egy kézzel írott számjegy? Ennek a számjegynek ugyanazok a tulajdonságai vannak: ugyanazok a szélek, ugyanazok a hurkok.

Mi lenne, ha a szám jelenik meg egy sebességkorlátozási jelnél, amelyet egy fényképen közvetett szögből ki lehet utalni az utcán? Hasonlóan a saját elképzelésünkhöz, az AI-nak képesnek kell lennie arra, hogy képes legyen alkalmazni bizonyos típusú hibafogyasztásokat.

Ez egy öt, három vagy nyolc?

Próbálja ki ezt az AI JavaScript bemutatót, amely lehetővé teszi, hogy rajzoljon valamit a képernyőn, és az előzetesen képzett algoritmus elmondja neked, amit éppen rajzolott.

Az algoritmus megpróbálja megadni a legjobb egyezést akkor is, ha a rajzod nem valójában egy szám. Mégis láthat a mesterséges értelmet a munkahelyén, hogy megpróbálja elérni a lehető legközelebbi hozzáállást.

Hogyan néz ki a kiképzett készlet?

Itt egy kivonat az algoritmus edzési adataiból. Ez csak egy nagyon hosszú tömbben tárolt súlyok listája (értékek ezrei):

// A neurális hálózat súlyai ​​(egység-egység súlyok és egység torzítások) // az edzést a Matlab-ban végeztük, az MNIST adatkészlettel.
// ezek az adatok egy 784-200-10 egységre vonatkoznak, logisztikai nemlinearitással
// a rejtett és a softmax a kimeneti rétegben. A bemenet a
// [-1; 1] szürke színű kép, háttér == 1, 28x28 pixel linearizálva
// oszlopok sorrendjében (azaz 1. oszlop (:); 2. oszlop (:); ...) az első kimenet
// a maximális érték azt jelenti, hogy a hálózat azt gondolja, hogy a bemenet kódolja
// (i-1) Az alábbi súlyok 1,92% -os hibaarányt mutattak a teszt során
// adatkészlet (9808/10000 számjegy helyesen felismerve).
legyen w12 = [[-0,00718674, 0,00941102, -0,0310175, -0,00121102, -0,00978546, -4,65943e-05, 0,0150367, 0,0101846, 0,0482145, 0,00291535, -0,00172736, 0,0234746, 0,0416268, 0,0315077, 0, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0,00692898, 0,0215552, 0,0540464, 0,0393167, 0,0668207, 0,0232665, 0,031598, 0,0143047, 0,0156885, -0,0269579, -0,00777022, 0,0397823, -0,00825727, 0,0212889, -0,0075751515, 0,0353843, 0,0353843, 0,0353843, 0,02
/ * ... Több ezer súly követi ... * /

A teljes forráskód nem fog beleilleni ebbe a cikkbe. De a készletek általában elég hosszúak, még akkor is, ha triviális tesztnek tűnik.

A kép bevitele a neurális hálózatba

Ezt a kis kódot a JavaScripten írt tunnista () függvényből vettük.

A bemutatóról vették át a http://myselph.de oldalon

Itt megtekintheti a teljes forráskódot.

// megjelenítéshez / hibakereséshez: a bemenetet festeni kell a neurális hálózatba. if (document.getElementById ('előfeldolgozás'). ellenőrizve == true)
{
    ctx.clearRect (0, 0, vászon szélesség, vászon magasság);
    ctx.drawImage (copyCtx.canvas, 0, 0);
    for (var y = 0; y <28; y ++) {
        for (var x = 0; x <28; x ++) {
           var blokk = ctx.getImageData (x * 10, y * 10, 10, 10);
           var newVal = 255 * (0,5 - nnbemenet [x * 28 + y] / 2);
           for (var i = 0; i <4 * 10 * 10; i + = 4) {
               block.data [i] = newVal;
               block.data [i + 1] = newVal;
               block.data [i + 2] = newVal;
               block.data [i + 3] = 255;
           }
       ctx.putImageData (blokk, x * 10, y * 10);
       }
   }
}

Ez a részleges kóddarab „beilleszti” a képbemenetet (szabadkézi rajz), amelyet korábban 10 x 10 blokkra osztottak, és amely a kép adott területének átlagos szürkeárnyalatos értékeit tárolja.

Ezután ellenőrzi a képzett készlettel, és az összegek összeroppantása után, és az átlagos összehasonlításokkal visszaadja az eredmény valószínűségét abban a tekintetben, hogy a HTML-vászonrajz milyen szorosan illeszkedik egy adott számjegyhez.

Záró szavak

A mesterséges intelligencia hatalmas téma. Különböző típusú gépi tanulási minták és oktatóanyagok jelennek meg minden nap. Ez az oktatóanyag csak bevezetésként szolgálhat azoknak, akik még csak indulnak!

Kövess engem a Twitteren ingyenes ajándékért

Ragadja meg a CSS Visual Dictionary példányát is. az összes CSS tulajdonság diagramja.

A Twitter-en: Az Árapályhullám az a számla, amely ingyenesen adja el könyvemet.

Kövessen engem a j @ js_tut oldalon, ahol freemium JavaScript oktatóanyagokat írok.