Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Taaksepäin Suuntautuva Eteneminen | Osio
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Neuroverkkojen Perusteet

bookTaaksepäin Suuntautuva Eteneminen

Pyyhkäise näyttääksesi valikon

Takaisinlevitys eli backpropagation on prosessi, jossa määritetään, miten häviöfunktio muuttuu suhteessa jokaiseen neuroverkon parametriin. Tavoitteena on säätää näitä parametreja siten, että kokonaishäviö pienenee.

Tämä prosessi perustuu gradienttien laskentaan käyttäen gradienttimenetelmää (gradient descent), jossa hyödynnetään häviön derivaattoja suhteessa jokaisen kerroksen pre-aktivaatioarvoihin (raaka-arvot ennen aktivointifunktion soveltamista) ja propagoi ne taaksepäin verkossa.

Koska jokainen kerros vaikuttaa lopulliseen ennusteeseen, gradientit lasketaan vaiheittain:

  1. Suoritetaan eteenpäinlevitys (forward propagation) tulosten saamiseksi;
  2. Lasketaan häviön derivaatta suhteessa ulostulon pre-aktivaatioon;
  3. Propagoidaan tämä derivaatta taaksepäin kerrosten läpi käyttäen ketjusääntöä;
  4. Lasketaan ja käytetään gradientteja painojen ja biasien päivittämiseen koulutuksen aikana.
Note
Huomio

Gradientit kuvaavat funktion muutosnopeutta suhteessa sen syötteisiin, eli ne ovat derivaattoja. Ne osoittavat, kuinka paljon pienet muutokset painoissa, biaseissa tai aktivaatioissa vaikuttavat häviöfunktioon, ohjaten mallin oppimisprosessia gradienttimenetelmän avulla.

Notaatio

Selkeyden vuoksi käytetään seuraavaa notaatiota:

  • WlW^l on kerroksen ll painomatriisi;
  • blb^l on kerroksen ll bias-vektori;
  • zlz^l on kerroksen ll pre-aktivaatioiden vektori;
  • ala^l on kerroksen ll aktivaatioiden vektori;

Kun asetetaan a0a^0 arvoon xx (syötteet), eteenpäinlevitys perceptronissa, jossa on n kerrosta, voidaan kuvata seuraavalla operaatioketjulla:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Takaisinkytkennän matemaattista kuvausta varten otetaan käyttöön seuraavat merkinnät:

  • dalda^l: tappion derivaatta suhteessa kerroksen ll aktivaatioihin;
  • dzldz^l: tappion derivaatta suhteessa kerroksen ll pre-aktivaatioihin (ennen aktivointifunktion soveltamista);
  • dWldW^l: tappion derivaatta suhteessa kerroksen ll painoihin;
  • dbldb^l: tappion derivaatta suhteessa kerroksen ll bias-termeihin.

Gradienttien laskeminen ulostulokerrokselle

Viimeisessä kerroksessa nn ensimmäinen vaihe on laskea tappion gradientti suhteessa ulostulokerroksen aktivaatioihin, merkittynä danda^n.

Tämän jälkeen, käyttäen ketjusääntöä, tappion gradientti suhteessa ulostulokerroksen pre-aktivaatioihin lasketaan seuraavasti:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)

Tässä fn(zn)f'^n(z^n) tarkoittaa kerroksen nn aktivointifunktion derivaattaa, ja symboli \odot tarkoittaa alkiokohtaista kertolaskua.

Note
Huomio

Symboli \odot tarkoittaa alkiokohtaista kertolaskua, eli jokainen yhden vektorin alkio kerrotaan toisen vektorin vastaavalla alkiolla. Sen sijaan symboli \cdot edustaa pistetuloa, jota käytetään tavanomaisessa matriisi- tai vektorikertolaskussa. Termi fnf'^n viittaa aktivointifunktion derivaattaan ulostulokerroksessa.

Tämä arvo ilmaisee, kuinka herkkä häviöfunktio on ulostulokerroksen esiaktivointiarvojen muutoksille.

Kun dzndz^n on laskettu, seuraava vaihe on laskea gradientit painoille ja siirtotermeille:

dWn=dzn(an1)T,dbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T,\\ db^n &= dz^n \end{aligned}

Nämä gradientit kuvaavat, kuinka paljon kutakin painoa ja siirtotermiä ulostulokerroksessa tulisi säätää häviön pienentämiseksi.

Tässä (an1)T(a^{n-1})^T on edellisen kerroksen transponoitu aktivointivektori. Jos alkuperäisen vektorin muoto on nneurons×1n_{\text{neurons}} \times 1, sen transpoosiolla on muoto 1×nneurons1 \times n_{\text{neurons}}.

Takaisinlevityksen jatkamiseksi lasketaan derivaatta häviöstä suhteessa edellisen kerroksen aktivointeihin seuraavasti:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Tämä lauseke mahdollistaa virhesignaalin siirtämisen taaksepäin verkossa, mikä mahdollistaa aiempien kerrosten säätämisen koulutuksen aikana.

Gradienttien levittäminen piilokerroksiin

Jokaiselle piilokerrokselle ll menettely on sama. Kun dalda^l on annettu:

  1. Laske derivaatta häviöstä suhteessa esiaktivointeihin;
  2. Laske gradientit painoille ja siirtotermeille;
  3. Laske dal1da^{l-1} derivaatan levittämiseksi taaksepäin.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Tätä prosessia toistetaan jokaiselle edeltävälle kerrokselle vaihe vaiheelta, kunnes saavutetaan syötekerros.

Painojen ja biasien päivittäminen

Kun gradientit on laskettu kaikille kerroksille, painot ja biasit päivitetään käyttämällä gradienttivähenemä-algoritmia:

Wl=WlαdWl,bl=blαdbl.\begin{aligned} W^l &= W^l - \alpha \cdot dW^l,\\ b^l &= b^l - \alpha \cdot db^l. \end{aligned}

Tässä α\alpha tarkoittaa oppimisnopeutta, joka määrittää, kuinka paljon parametreja säädetään jokaisella koulutusaskeleella.

Tässä α\alpha on oppimisnopeus, hyperparametri, joka määrittää painoihin ja biaseihin päivitysvaiheessa sovellettavan muutoksen suuruuden.

question mark

Takaisinkytkennän aikana, miten neuroverkko päivittää painonsa ja bias-arvonsa minimoidakseen tappiofunktion?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 14

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 14
some-alt