Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Taaksepäin Suuntautuva Eteneminen | Neuroverkon Rakentaminen Alusta Alkaen
Quizzes & Challenges
Quizzes
Challenges
/
Johdatus Neuroverkkoihin Pythonilla

bookTaaksepäin Suuntautuva Eteneminen

Takaisinlevitys eli backpropagation on prosessi, jossa selvitetää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 (raakalähtöihin ennen aktivointifunktion soveltamista) ja viedään nämä arvot taaksepäin verkossa.

Koska jokainen kerros vaikuttaa lopulliseen ennusteeseen, gradientit lasketaan vaiheittain:

  1. Suoritetaan eteenpäinlevitys tulosten saamiseksi;
  2. Lasketaan häviön derivaatta suhteessa ulostulon pre-aktivaatioon;
  3. Levitetään 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 sen derivaattoja. Ne osoittavat, kuinka paljon pieni muutos painoissa, biaseissa tai aktivaatioissa vaikuttaa häviöfunktioon, ohjaten mallin oppimisprosessia gradienttimenetelmän avulla.

Notaatiot

Selkeyden vuoksi käytetään seuraavia merkintöjä:

  • 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 arvoksi 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}

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

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

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 aktivointifunktion derivaattaa kerroksessa nn, ja symboli \odot tarkoittaa alkiokohtaista kertolaskua.

Note
Huomio

Symboli \odot tarkoittaa alkiokohtaista kertolaskua, eli jokainen vektorin alkio kerrotaan vastaavan toisen vektorin alkion kanssa. 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 muutoksille ulostulokerroksen pre-aktivaatioarvoissa.

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 aktivaatio vektori. 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 häviön derivaatta edellisen kerroksen aktivaatioiden suhteen seuraavasti:

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

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

Gradienttien levittäminen piilokerroksiin

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

  1. Laske häviön derivaatta pre-aktivaatioiden suhteen;
  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ää painojen ja biasien säätöjen suuruuden jokaisella päivitysvaiheella.

question mark

Takaisinlevityksen aikana, miten neuroverkko päivittää painonsa ja bias-arvonsa minimoidakseen häviöfunktion?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Suggested prompts:

Can you explain how the chain rule is applied in backpropagation?

What is the difference between pre-activations and activations in a neural network?

Can you provide an example of calculating gradients for a simple neural network?

bookTaaksepäin Suuntautuva Eteneminen

Pyyhkäise näyttääksesi valikon

Takaisinlevitys eli backpropagation on prosessi, jossa selvitetää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 (raakalähtöihin ennen aktivointifunktion soveltamista) ja viedään nämä arvot taaksepäin verkossa.

Koska jokainen kerros vaikuttaa lopulliseen ennusteeseen, gradientit lasketaan vaiheittain:

  1. Suoritetaan eteenpäinlevitys tulosten saamiseksi;
  2. Lasketaan häviön derivaatta suhteessa ulostulon pre-aktivaatioon;
  3. Levitetään 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 sen derivaattoja. Ne osoittavat, kuinka paljon pieni muutos painoissa, biaseissa tai aktivaatioissa vaikuttaa häviöfunktioon, ohjaten mallin oppimisprosessia gradienttimenetelmän avulla.

Notaatiot

Selkeyden vuoksi käytetään seuraavia merkintöjä:

  • 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 arvoksi 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}

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

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

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 aktivointifunktion derivaattaa kerroksessa nn, ja symboli \odot tarkoittaa alkiokohtaista kertolaskua.

Note
Huomio

Symboli \odot tarkoittaa alkiokohtaista kertolaskua, eli jokainen vektorin alkio kerrotaan vastaavan toisen vektorin alkion kanssa. 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 muutoksille ulostulokerroksen pre-aktivaatioarvoissa.

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 aktivaatio vektori. 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 häviön derivaatta edellisen kerroksen aktivaatioiden suhteen seuraavasti:

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

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

Gradienttien levittäminen piilokerroksiin

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

  1. Laske häviön derivaatta pre-aktivaatioiden suhteen;
  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ää painojen ja biasien säätöjen suuruuden jokaisella päivitysvaiheella.

question mark

Takaisinlevityksen aikana, miten neuroverkko päivittää painonsa ja bias-arvonsa minimoidakseen häviöfunktion?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 7
some-alt