Articles

neuroverkkojen ymmärtäminen 2: neuroverkkojen matematiikkaa 3 yhtälössä

tämän sarjan ensimmäisessä osassa käsittelimme neuroverkon käsitettä, samoin kuin yhtä hermosolua kuvaavaa matematiikkaa. Neuroneja on kuitenkin paljon yhdessä kerroksessa ja koko verkostossa monia kerroksia, joten meidän on keksittävä yleinen yhtälö, joka kuvaa neuroverkkoa.

yksittäinen neuroni

verkostomme tarvitsee ensimmäiseksi siirtää tietoa eteenpäin kerrosten läpi. Tiedämme jo, miten tämä tehdään yhdelle neuronille.:

hermosolun ulostulo on aktivointifunktio, jossa hermosolun tulo on painotettu summa

2 neuronit

nyt voimme soveltaa samaa logiikkaa, kun meillä on 2 neuronia toisessa kerroksessa.

tässä esimerkissä jokainen ensimmäisen kerroksen hermosolu on liitetty jokaiseen toisen kerroksen hermosoluun, tällaista verkkoa kutsutaan täysin yhdistetyksi verkoksi. Neuroni Y1 on yhteydessä neuroneihin X1 ja X2 painoilla W11 ja W12 ja neuroni Y2 on yhteydessä hermosoluihin X1 ja X2 painoilla W21 ja W22. Tässä notaatiossa painon ensimmäinen indeksi ilmaisee lähtöhermon ja toinen indeksi tulohermon, joten esimerkiksi W12 on paino kytkettäessä X2: sta Y1: een. Nyt voimme kirjoittaa yhtälöt Y1 ja Y2:

nyt tämä yhtälö voidaan ilmaista matriisin kertolaskun avulla.

visualisointi matriisin kertolasku alkaen http://matrixmultiplication.xyz/

jos olet uusi matriisi kertolasku ja lineaarinen algebra ja tämä tekee sinusta hämmentynyt suosittelen 3blue1brown lineaarinen algebra sarja.

nyt voidaan kirjoittaa ensimmäisen neuronin ulostulo Y1: ksi ja toisen neuronin ulostulo Y2: ksi. Tästä saadaan seuraava yhtälö:

koko kerros

tästä voimme abstrahoida kerroksen tuotoksen yleissäännön:

nyt tässä yhtälössä kaikki muuttujat ovat matriiseja ja kertolaskun merkki esittää matriisikertolaskua.

matriisin käyttö yhtälössä mahdollistaa sen kirjoittamisen yksinkertaisessa muodossa ja tekee siitä totta mille tahansa tuloluvulle ja neuroneille ulostulossa.

neuroverkkojen ohjelmoinnissa käytetään myös matriisikertolaskua, koska näin voidaan tehdä laskentatavasta rinnakkainen ja käyttää siihen tehokasta laitteistoa, kuten näytönohjaimia.

nyt meillä on yhtälö yhden kerroksen, mutta mikään ei estä meitä ottamasta lähtö tämän kerroksen ja käyttää sitä syötteenä seuraavalle tasolle. Tästä saadaan yleinen yhtälö, joka kuvaa neuroverkon jokaisen kerroksen ulostuloa. Vielä yksi asia, meidän täytyy lisätä, on aktivointifunktio, selitän, miksi tarvitsemme aktivointifunktioita sarjan seuraavassa osassa, sillä nyt voit ajatella keinona skaalata tuotos, joten se ei tule liian suureksi tai liian merkityksettömäksi.

tällä yhtälöllä voimme levittää tietoa hermoverkon läpi niin monta kerrosta kuin haluamme. Mutta ilman oppimista, neuroverkko on vain joukko satunnaisia matriisikertoimia, jotka eivät merkitse mitään.

Joten miten opettaa neuroverkkoamme? Ensinnäkin meidän täytyy laskea neuroverkon virhe ja miettiä, miten siirtää tämä virhe kaikille kerroksille.

2: virhe — takaisin-eteneminen

virheen etenemisen algoritmin ymmärtämiseksi meidän on palattava esimerkkiin, jossa ensimmäisessä kerroksessa on 2 neuronia ja toisessa kerroksessa 1 neuroni.

oletetaan, että Y-kerros on verkon lähtökerros ja Y1-neuronin pitäisi palauttaa jokin arvo. Nyt tämä arvo voi poiketa odotusarvosta melkoisesti, joten Y1-neuronissa on jokin virhe. Voimme ajatella tätä virhettä erotuksena palautetun arvon ja odotusarvon välillä. Tiedämme virheen Y1, mutta meidän täytyy siirtää tämä virhe alempiin kerroksiin verkon, koska haluamme kaikki kerrokset oppia, ei vain Y kerros. Joten miten siirtää tämän virheen X1 ja X2? No, naiivi lähestymistapa olisi jakaa Y1 virhe tasaisesti, koska on 2 neuronien X kerros, voisimme sanoa sekä X1 ja X2 virhe on yhtä kuin Y1 virhe keksitty 2.

tässä lähestymistavassa on kuitenkin suuri ongelma — hermosoluilla on eri painot kytkettyinä niihin. Jos X1-hermosoluun liitetty paino on paljon suurempi kuin X2-hermosoluun liitetty paino, X1 vaikuttaa paljon enemmän Y1: n virheeseen, koska Y1 = ( X1 * W11 + X2 * X12). Joten jos W11 on suurempi kuin W12 meidän pitäisi siirtää enemmän Y1 virhe X1 neuroni, koska tämä on neuroni, joka edistää sitä.

nyt kun olemme havainneet sen, voimme päivittää algoritmimme niin, että virhe ei jaeta tasaisesti, vaan se jaetaan tuloneuronin painon mukaan kaikkiin lähtöneuroniin tuleviin painoihin.

Päivitä paino

nyt voimme mennä askeleen pidemmälle ja analysoida esimerkin, jossa ulostulokerroksessa on enemmän kuin yksi hermosolu.

tässä esimerkissä näemme, että esim. neuroni X1 ei vaikuta ainoastaan Y1: n virheeseen, vaan myös Y2: n virheeseen ja tämä virhe on edelleen verrannollinen sen painoihin. Niinpä X1: n virhettä kuvaavassa yhtälössä tarvitaan sekä Y1: n virhe kerrottuna painojen suhteella että Y2: n virhe kerrottuna Y2: een tulevien painojen suhteella.

tämä yhtälö voidaan kirjoittaa myös matriisikertolaskun muodossa.

nyt on vielä yksi temppu, jonka voimme tehdä tämän lainauksen yksinkertaisemmaksi menettämättä paljon olennaista tietoa. Painosuhteen nimittäjä toimii normalisoivana tekijänä, joten emme välitä siitä niin paljon, osittain koska lopullinen yhtälö meillä on muita keinoja säädellä neuroverkon oppimista.

tämä on vielä yksi havainto, jonka voimme tehdä. Voimme nähdä, että matriisi paino tässä yhtälössä on melko samanlainen matriisi muodossa syötteen eteenpäin algoritmi. Erona on rivien ja sarakkeiden vaihto. Vuonna algebra kutsumme tätä saattamista matriisi.

koska ei ole tarvetta käyttää 2 eri muuttujia, voimme vain käyttää samaa muuttujaa syötteen eteenpäin algoritmi. Tämä antaa meille yleisen yhtälön takaisin-etenemisen algoritmi

huomaa, että syötteen eteenpäin algoritmi olimme menossa muodostavat ensimmäisen kerroksen viimeiseen, mutta takaisin-eteneminen olemme menossa muodostavat viimeisen kerroksen verkon ensimmäiseen koska laskea virheen tietyn kerroksen tarvitsemme tietoa virhe seuraavan kerroksen.

Trending AI Articles:

1. Miten käytin koneoppimista fyysisten maalausten inspiraationa

2. MS tai Startup Job-mihin suuntaan mennä rakentamaan uraa Syväoppimisessa?

3. Top 100 tekoälyyn liittyvää medium-artikkelia

4. Tekoälykonferenssi

nyt kun osaamme siirtää tietoa eteenpäin ja siirtää virheen taaksepäin, Voimme käyttää virhettä jokaisessa kerroksessa painon päivittämiseen.

3: painojen päivittäminen

nyt kun tiedämme, mitä virheitä neuroverkko tekee jokaisessa kerroksessa, voimme vihdoin alkaa opettaa verkostoamme löytämään parhaan ratkaisun ongelmaan.

mutta mikä on paras ratkaisu?

virhe kertoo meille, kuinka väärässä ratkaisumme ovat, joten luonnollisesti paras ratkaisu olisi se, jossa virhefunktio on minimaalinen.

Virhefunktio riippuu verkon painoista, joten haluamme löytää sellaiset painot, jotka johtavat virhefunktiossa yleiseen minimiin. Huomaa, että tämä kuva on vain visualisointitarkoituksessa. Tosielämän sovelluksissa meillä on yli 1 paino, joten virhefunktio on suuriulotteinen funktio.

mutta miten löydämme tämän funktion minimin? Yksinkertainen idea tässä on aloittaa satunnaispainoilla, laskea virhefunktio näille painoille ja sitten tarkistaa tämän funktion kaltevuus mennä alamäkeen.

mutta miten saamme tietää funktion kaltevuuden?

Voimme käyttää lineaarialgebraa jälleen ja hyödyntää sitä, että funktion derivaatta tietyssä pisteessä on yhtä suuri kuin funktion kulmakerroin tässä pisteessä. Voimme kirjoittaa tämän derivaatta seuraavalla tavalla:

jossa E on meidän virhefunktio ja W edustaa painoja. Tämä merkintä kertoo meille, että haluamme löytää virhefunktion derivaatan painon suhteen. Käytämme N+1 kanssa virhe, koska meidän notaatio ulostulo neuroverkko jälkeen painot Wn on+1.

voimme sitten käyttää tätä johdannaista painon päivittämiseen:

tämä edustaa ”menossa alaspäin” jokainen oppiminen iteraatio (epoch) päivitämme painon mukaan kaltevuus derivaatan virhefunktio.

tarvitaan vielä yksi asia ennen lopullisen yhtälön esittämistä, ja se on oppimistahti. Oppimistahti säätelee, kuinka suuria askeleita otamme alamäkeen mentäessä.

kuten näette suuremmalla oppimistahdilla, otamme isompia askeleita. Tämä tarkoittaa, että voimme saada optimaalisen toiminnon nopeammin, mutta on myös raastin mahdollisuus emme sitä.

pienemmällä oppimistahdilla otamme pienempiä askelia, mikä johtaa siihen, että tarvitaan useampia aikakausia saavuttaaksemme tehtävän minimin, mutta on pienempi mahdollisuus, että menetämme sen.

siksi käytännössä käytämme usein oppimistahtia, joka on riippuvainen edellisistä vaiheista esim. jos on vahva suuntaus mennä yhteen suuntaan, voimme ottaa isompia askeleita (suurempi oppimistahti), mutta jos suunta muuttuu jatkuvasti, meidän pitäisi ottaa pienempiä askeleita (pienempi oppimistahti) etsiä minimiä parempi. Esimerkissämme aiomme kuitenkin ottaa yksinkertaisen lähestymistavan ja käyttää kiinteää oppimisnopeuden arvoa. Tämä antaa meille seuraavan yhtälön.

Learning rate (LR) on luku rage 0 — 1. Mitä pienempi se on, sitä pienempi muutos painoihin. Jos oppiminen on lähellä 1. käytämme koko arvon derivaatta päivittää painot ja jos se on lähellä 0, käytämme vain pieni osa siitä. Tämä tarkoittaa, että Oppimisnopeus, kuten nimestä voi päätellä, säätelee sitä, kuinka paljon verkko ”oppii” yhdessä iteraatiossa.

painojen päivittäminen oli viimeinen yhtälö, jota tarvitsimme neuroverkostossamme. Yhtälöt vastaavat verkon todellisesta oppimisesta ja sen opettamisesta antamaan mielekästä tulosta satunnaisarvojen sijaan.

Putting it all together

Syöttösyöttö

Selkäevästäminen

painojen päivittäminen

Vastaa

Sähköpostiosoitettasi ei julkaista.