Articles

a neurális hálózatok megértése 2: a neurális hálózatok matematikája 3 egyenletben

a sorozat első részében a neurális hálózat fogalmát, valamint az egyetlen neuront leíró matematikát tárgyaltuk. Ugyanakkor sok neuron van egyetlen rétegben, és sok réteg az egész hálózatban, ezért ki kell találnunk egy általános egyenletet, amely leírja a neurális hálózatot.

egyetlen neuron

hálózatunknak először az információkat kell továbbítania a rétegeken keresztül. Már tudjuk, hogyan kell ezt megtenni egyetlen neuron számára:

az idegsejt kimenete az idegsejt bemenetének súlyozott összegének aktiválási funkciója

2 neuronok

most ugyanazt a logikát alkalmazhatjuk, ha 2 neuronunk van a második rétegben.

ebben a példában az első réteg minden neuronja kapcsolódik a második réteg minden neuronjához, ezt a típusú hálózatot teljesen csatlakoztatott hálózatnak nevezzük. Az Y1 Neuron az X1 és X2 neuronokhoz kapcsolódik W11 és W12 súlyokkal, az Y2 neuron pedig az X1 és X2 neuronokhoz kapcsolódik W21 és W22 súlyokkal. Ebben a jelölésben a súly első indexe a kimeneti neuront, a második index pedig a bemeneti neuront jelzi, így például a W12 az X2-től Y1-ig tartó kapcsolat súlya. Most írhatjuk az Y1 és Y2 egyenleteit:

most ez az egyenlet mátrixszorzással fejezhető ki.

a mátrix szorzás vizualizálása http://matrixmultiplication.xyz/

ha Ön új mátrix szorzás és lineáris algebra, és ez teszi meg zavaros én nagyon ajánlom 3blue1brown lineáris algebra sorozat.

most írhatjuk az első neuron kimenetét Y1 – ként, a második neuron kimenetét pedig Y2-ként. Ez a következő egyenletet adja nekünk:

egész réteg

ebből elvonhatjuk a réteg kimenetének általános szabályát:

ebben az egyenletben minden változó mátrix, a szorzási jel pedig mátrixszorzást jelent.

a mátrix használata az egyenletben lehetővé teszi, hogy egyszerű formában írjuk le, és a kimenet tetszőleges számú bemenetére és neuronjára igaz legyen.

a neurális hálózatok programozásában mátrixszorzást is használunk, mivel ez lehetővé teszi a számítástechnika párhuzamosítását és hatékony hardver használatát, mint például a grafikus kártyák.

most van egy egyenletünk egy rétegre, de semmi sem állít meg minket abban, hogy ennek a rétegnek a kimenetét használjuk a következő réteg bemeneteként. Ez megadja nekünk az Általános egyenletet, amely leírja az ideghálózat egyes rétegeinek kimenetét. Még egy dolog, amit hozzá kell adnunk, az aktiválási funkció, elmagyarázom, miért van szükségünk aktiválási funkciókra a sorozat következő részében, mert most a kimenet méretezésének módjára gondolhat, így nem válik túl nagynak vagy túl jelentéktelennek.

ezzel az egyenlettel az információt a neurális hálózat annyi rétegén keresztül terjeszthetjük, amennyit csak akarunk. De tanulás nélkül a neurális hálózat csak véletlenszerű mátrixszorzatok halmaza, ami nem jelent semmit.

tehát hogyan tanítsuk meg neurális hálózatunkat? Először ki kell számolnunk a neurális hálózat hibáját, és át kell gondolnunk, hogyan továbbíthatjuk ezt a hibát az összes rétegnek.

2 : a hiba — vissza-terjedés átadása

a hiba-terjedési algoritmus megértéséhez vissza kell térnünk egy példához, amelyben az első rétegben 2 Neuron, a második rétegben 1 neuron található.

tegyük fel, hogy az Y réteg a hálózat kimeneti rétege, és az Y1 neuronnak vissza kell adnia valamilyen értéket. Most ez az érték kissé eltérhet a várt értéktől, tehát van némi hiba az Y1 neuronon. Ezt a hibát úgy tekinthetjük, mint a visszatérített érték és a várható érték közötti különbséget. Ismerjük az Y1 hibáját, de ezt a hibát át kell adnunk a hálózat alsó rétegeinek, mert azt akarjuk, hogy az összes réteg megtanuljon, nem csak az Y réteget. Tehát hogyan kell átadni ezt a hibát X1 és X2? Nos, naiv megközelítés lenne az Y1 hiba egyenletes felosztása, mivel az X rétegben 2 neuron van, mondhatjuk, hogy mind az X1, mind az X2 hiba megegyezik az Y1 hibával, amelyet a 2.

van azonban egy nagy probléma ezzel a megközelítéssel — az idegsejtek különböző súlyokkal kapcsolódnak hozzájuk. Ha az X1 neuronhoz kapcsolódó súly sokkal nagyobb, mint az X2 neuronhoz kapcsolódó súly, akkor az Y1 hibáját sokkal jobban befolyásolja az X1, mivel Y1 = ( X1 * W11 + X2 * X12). Tehát, ha a W11 nagyobb, mint a W12, akkor az Y1 hiba nagyobb részét át kell adnunk az X1 neuronnak, mivel ez az a neuron, amely hozzájárul ehhez.

most, hogy megfigyeltük, frissíthetjük algoritmusunkat, hogy ne osszuk el egyenletesen a hibát, hanem a bemeneti neuron súlyának aránya szerint osszuk fel a kimeneti neuron összes súlyára.

frissítse a

súlyt most egy lépéssel tovább mehetünk, és elemezhetjük azt a példát, ahol egynél több neuron van a kimeneti rétegben.

ebben a példában azt látjuk, hogy például az X1 neuron nemcsak az Y1 hibájához járul hozzá, hanem az Y2 hibájához is, és ez a hiba még mindig arányos a súlyával. Tehát az X1 hibáját leíró egyenletben szükségünk vanmind az Y1 hibája szorozva a súlyok arányával, mind az Y2 hibája szorozva az Y2-re érkező súlyok arányával.

ez az egyenlet mátrix szorzás formájában is megírható.

most van még egy trükk, amelyet megtehetünk, hogy egyszerűbbé tegyük ezt az idézetet anélkül, hogy sok releváns információt elveszítenénk. A súlyarány nevezője normalizáló tényezőként működik, ezért nem érdekel annyira, részben azért, mert a végső egyenlet más eszközökkel rendelkezünk a neurális hálózat tanulásának szabályozására.

ez is egy további megfigyelés, amelyet megtehetünk. Láthatjuk, hogy ebben az egyenletben a súlyú mátrix meglehetősen hasonló a mátrixhoz, amely a feed forward algoritmust alkotja. A különbség a sorok és oszlopok vannak kapcsolva. Az algebrában ezt a mátrix átültetésének nevezzük.

mivel nincs szükség 2 különböző változó használatára, csak ugyanazt a változót használhatjuk a feed forward algoritmusból. Ez megadja nekünk a hátsó terjedési algoritmus általános egyenletét

vegye figyelembe, hogy a feed-forward algoritmusban az első réteget az utolsóig, de a hátsó terjedésben a hálózat utolsó rétegét az elsőhöz alakítjuk ki, mivel egy adott réteg hibájának kiszámításához információra van szükségünk a következő réteg hibájáról.

felkapott mi cikkek:

1. Hogyan használtam a gépi tanulást inspirációként a fizikai festményekhez

2. MS vagy indítási munka-melyik út a mély tanulás karrierjének felépítéséhez?

3. TOP 100 közepes cikkek kapcsolódó mesterséges intelligencia

4. Mesterséges intelligencia konferencia

most, hogy tudjuk, hogyan kell továbbítani az információkat előre, és adja át a hibát hátra tudjuk használni a hibát minden réteg frissíteni a súlyt.

3 : a súlyok frissítése

most, hogy tudjuk, milyen hibákat okoz a neurális hálózat az egyes rétegeknél, végre elkezdhetjük tanítani hálózatunkat, hogy megtalálják a legjobb megoldást a problémára.

de mi a legjobb megoldás?

a hiba arról tájékoztat minket, hogy mennyire rosszak a megoldásaink, így természetesen a legjobb megoldás az lenne, ahol a hibafunkció minimális.

a Hibafunkció a hálózat súlyától függ, ezért olyan súlyértékeket akarunk találni, amelyek a hibafunkció globális minimumát eredményezik. Ne feledje, hogy ez a kép csak vizualizációs célokat szolgál. A valós alkalmazásokban több mint 1 súlyunk van, tehát a hiba funkció nagy dimenziós funkció.

de hogyan találjuk meg ennek a funkciónak a minimumát? Egy egyszerű ötlet az, hogy véletlenszerű súlyokkal kezdjük, kiszámoljuk a súlyok hibafunkcióját, majd ellenőrizzük ennek a függvénynek a lejtését lefelé.

de hogyan ismerjük meg a függvény lejtését?

ismét használhatjuk a lineáris algebrát, és kihasználhatjuk azt a tényt, hogy egy függvény deriváltja adott ponton megegyezik az a függvény meredekségével ezen a ponton. Ezt a származékot a következő módon írhatjuk:

ahol E a hibafunkciónk, W pedig a súlyokat jelöli. Ez a jelölés arról tájékoztat minket, hogy meg akarjuk találni a hibafunkció deriváltját a súly tekintetében. Az N+1-et használjuk a hibával, mivel a jelölésünkben a neurális hálózat kimenete a WN súlyok után+1-en van.

ezután felhasználhatjuk ezt a származékot a súly frissítésére:

ez a “lefelé haladást” jelenti minden tanulási iteráció (korszak) frissítjük a súlyt a hibafunkció deriváltjának lejtése szerint.

van még egy dolog, amire szükségünk van a végső egyenlet bemutatása előtt, ez pedig a tanulási Arány. Learning-rate szabályozza, hogy milyen nagy lépéseket teszünk során megy lefelé.

mint látható a nagyobb tanulási arány, nagyobb lépéseket teszünk. Ez azt jelenti, hogy gyorsabban eljuthatunk a funkció optimumához, de van egy reszelő esély is, hogy hiányozni fogunk.

a kisebb tanulási rátával kisebb lépéseket teszünk, ami azt eredményezi, hogy több korszakra van szükség a funkció minimumának eléréséhez, de kisebb esély van arra, hogy kihagyjuk.

ezért a gyakorlatban gyakran használjuk tanulási arány, amely függ az előző lépéseket pl. ha van egy erős tendencia, hogy egy irányba haladunk, nagyobb lépéseket tehetünk (nagyobb tanulási arány), de ha az irány folyamatosan változik, akkor kisebb lépéseket kell tennünk (kisebb tanulási arány) a minimum jobb keresése érdekében. Példánkban azonban az egyszerű megközelítést fogjuk alkalmazni, és rögzített tanulási arányértéket használunk. Ez a következő egyenletet adja nekünk.

a tanulási Arány (LR) egy szám a rage 0 — 1-ben. Minél kisebb, annál kisebb a súlyváltozás. Ha a tanulás közel van 1. a derivált teljes értékét használjuk a súlyok frissítéséhez, és ha közel van a 0-hoz, akkor csak egy kis részét használjuk. Ez azt jelenti, hogy a tanulási arány, amint a neve is sugallja, szabályozza, hogy a hálózat mennyit “tanul” egyetlen iterációban.

a súlyok frissítése volt az utolsó egyenlet, amire szükségünk volt a neurális hálózatunkban. Az egyenletek felelősek a hálózat tényleges tanulásáért és azért, hogy megtanítsák a véletlenszerű értékek helyett értelmes kimenetet adni.

mindent összerakva

továbbítás

vissza-szaporítás

a súlyok frissítése

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.