Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Bakåtriktad Propagiering | Neuronnätverk Från Grunden
Introduktion till neurala nätverk

bookBakåtriktad Propagiering

Bakåtriktad propagiering (backprop) är processen där man beräknar hur förlustfunktionen förändras med avseende på varje parameter i nätverket. Målet är att uppdatera parametrarna i den riktning som minskar förlusten.

För att uppnå detta används algoritmen gradientnedstigning och man beräknar derivatorna av förlusten med avseende på varje lags pre-aktiveringsvärden (råa utgångsvärden innan aktiveringsfunktionen appliceras) och propagerar dessa bakåt.

Varje lager bidrar till den slutliga prediktionen, så gradienterna måste beräknas på ett strukturerat sätt:

  1. Utför framåtriktad propagiering;
  2. Beräkna derivatan av förlusten med avseende på utgångens pre-aktivering;
  3. Propagera denna derivata bakåt genom lagren med hjälp av kedjeregeln;
  4. Beräkna gradienter för vikter och biaser för att uppdatera dem.
Note
Notering

Gradienter representerar ändringshastigheten för en funktion med avseende på dess indata, vilket innebär att de är dess derivator. De visar hur mycket en liten förändring i vikter, biaser eller aktiveringar påverkar förlustfunktionen, och vägleder modellens inlärningsprocess genom gradientnedstigning.

Notation

För att göra förklaringen tydligare används följande notation:

  • WlW^l är viktmatrisen för lager ll;
  • blb^l är vektorn av biaser för lager ll;
  • zlz^l är vektorn av pre-aktiveringar för lager ll;
  • ala^l är vektorn av aktiveringar för lager ll;

Genom att sätta a0a^0 till xx (indatan), kan framåtriktad propagiering i en perceptron med n lager beskrivas som följande sekvens av operationer:

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}

För att beskriva backpropagation matematiskt introduceras följande notationer:

  • dalda^l: derivatan av förlusten med avseende på aktiveringar i lager ll;
  • dzldz^l: derivatan av förlusten med avseende på pre-aktiveringar i lager ll (innan aktiveringsfunktionen appliceras);
  • dWldW^l: derivatan av förlusten med avseende på vikter i lager ll;
  • dbldb^l: derivatan av förlusten med avseende på bias i lager ll.

Beräkning av gradienter för utgångslagret

I det sista lagret nn beräknas först gradienten av förlusten med avseende på aktiveringarna i utgångslagret, danda^n. Därefter, med hjälp av kedjeregeln, beräknas gradienten av förlusten med avseende på utgångslagrets pre-aktiveringar:

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

Symbolen \odot representerar elementvis multiplikation. Eftersom vi arbetar med vektorer och matriser representerar den vanliga multiplikationssymbolen \cdot istället skalärprodukt. fnf'^n är derivatan av aktiveringsfunktionen i utgångslagret.

Denna kvantitet representerar hur känslig förlustfunktionen är för förändringar i utgångslagrets pre-aktivering.

När vi har dzn\text d z^n beräknar vi gradienterna för vikterna och biaserna:

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

där (an1)T(a^{n-1})^T är den transponerade vektorn av aktiveringen från föregående lager. Givet att den ursprungliga vektorn är en nneurons×1n_{neurons} \times 1 vektor, är den transponerade vektorn 1×nneurons1 \times n_{neurons}.

För att föra detta bakåt beräknar vi derivatan av förlusten med avseende på aktiveringen i föregående lager:

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

Propagering av gradienter till de dolda lagren

För varje dolt lager ll är proceduren densamma. Givet dalda^l:

  1. Beräkna derivatan av förlusten med avseende på pre-aktiveringarna;
  2. Beräkna gradienterna för vikterna och biaserna;
  3. Beräkna dal1da^{l-1} för att föra derivatan bakåt.
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}

Detta steg upprepas tills vi når inmatningslagret.

Uppdatering av vikter och bias

När vi har beräknat gradienterna för alla lager uppdaterar vi vikterna och bias med hjälp av gradientnedstigning:

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

där α\alpha är inlärningshastigheten, som styr hur mycket vi justerar parametrarna.

question mark

Under backpropagation, hur uppdaterar ett neuralt nätverk sina vikter och biaser för att minimera förlustfunktionen?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 4

bookBakåtriktad Propagiering

Svep för att visa menyn

Bakåtriktad propagiering (backprop) är processen där man beräknar hur förlustfunktionen förändras med avseende på varje parameter i nätverket. Målet är att uppdatera parametrarna i den riktning som minskar förlusten.

För att uppnå detta används algoritmen gradientnedstigning och man beräknar derivatorna av förlusten med avseende på varje lags pre-aktiveringsvärden (råa utgångsvärden innan aktiveringsfunktionen appliceras) och propagerar dessa bakåt.

Varje lager bidrar till den slutliga prediktionen, så gradienterna måste beräknas på ett strukturerat sätt:

  1. Utför framåtriktad propagiering;
  2. Beräkna derivatan av förlusten med avseende på utgångens pre-aktivering;
  3. Propagera denna derivata bakåt genom lagren med hjälp av kedjeregeln;
  4. Beräkna gradienter för vikter och biaser för att uppdatera dem.
Note
Notering

Gradienter representerar ändringshastigheten för en funktion med avseende på dess indata, vilket innebär att de är dess derivator. De visar hur mycket en liten förändring i vikter, biaser eller aktiveringar påverkar förlustfunktionen, och vägleder modellens inlärningsprocess genom gradientnedstigning.

Notation

För att göra förklaringen tydligare används följande notation:

  • WlW^l är viktmatrisen för lager ll;
  • blb^l är vektorn av biaser för lager ll;
  • zlz^l är vektorn av pre-aktiveringar för lager ll;
  • ala^l är vektorn av aktiveringar för lager ll;

Genom att sätta a0a^0 till xx (indatan), kan framåtriktad propagiering i en perceptron med n lager beskrivas som följande sekvens av operationer:

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}

För att beskriva backpropagation matematiskt introduceras följande notationer:

  • dalda^l: derivatan av förlusten med avseende på aktiveringar i lager ll;
  • dzldz^l: derivatan av förlusten med avseende på pre-aktiveringar i lager ll (innan aktiveringsfunktionen appliceras);
  • dWldW^l: derivatan av förlusten med avseende på vikter i lager ll;
  • dbldb^l: derivatan av förlusten med avseende på bias i lager ll.

Beräkning av gradienter för utgångslagret

I det sista lagret nn beräknas först gradienten av förlusten med avseende på aktiveringarna i utgångslagret, danda^n. Därefter, med hjälp av kedjeregeln, beräknas gradienten av förlusten med avseende på utgångslagrets pre-aktiveringar:

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

Symbolen \odot representerar elementvis multiplikation. Eftersom vi arbetar med vektorer och matriser representerar den vanliga multiplikationssymbolen \cdot istället skalärprodukt. fnf'^n är derivatan av aktiveringsfunktionen i utgångslagret.

Denna kvantitet representerar hur känslig förlustfunktionen är för förändringar i utgångslagrets pre-aktivering.

När vi har dzn\text d z^n beräknar vi gradienterna för vikterna och biaserna:

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

där (an1)T(a^{n-1})^T är den transponerade vektorn av aktiveringen från föregående lager. Givet att den ursprungliga vektorn är en nneurons×1n_{neurons} \times 1 vektor, är den transponerade vektorn 1×nneurons1 \times n_{neurons}.

För att föra detta bakåt beräknar vi derivatan av förlusten med avseende på aktiveringen i föregående lager:

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

Propagering av gradienter till de dolda lagren

För varje dolt lager ll är proceduren densamma. Givet dalda^l:

  1. Beräkna derivatan av förlusten med avseende på pre-aktiveringarna;
  2. Beräkna gradienterna för vikterna och biaserna;
  3. Beräkna dal1da^{l-1} för att föra derivatan bakåt.
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}

Detta steg upprepas tills vi når inmatningslagret.

Uppdatering av vikter och bias

När vi har beräknat gradienterna för alla lager uppdaterar vi vikterna och bias med hjälp av gradientnedstigning:

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

där α\alpha är inlärningshastigheten, som styr hur mycket vi justerar parametrarna.

question mark

Under backpropagation, hur uppdaterar ett neuralt nätverk sina vikter och biaser för att minimera förlustfunktionen?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 7
some-alt