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

bookBakåtriktad Spridning

Bakåtpropagering, eller backpropagation, är processen att bestämma hur förlustfunktionen förändras med avseende på varje parameter i det neurala nätverket. Målet är att justera dessa parametrar på ett sätt som minskar den totala förlusten.

Denna process bygger på algoritmen gradientnedstigning, som använder derivatorna av förlusten med avseende på varje lags pre-aktiveringsvärden (de råa utgångarna innan aktiveringsfunktionen tillämpas) och propagerar dem bakåt genom nätverket.

Eftersom varje lager bidrar till den slutliga prediktionen beräknas gradienterna steg för steg:

  1. Utför framåtpropagering för att erhålla utgångarna;
  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 och använd gradienterna för vikter och biaser för att uppdatera dem under träningen.
Note
Notera

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åtpropagering 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 är det första steget att beräkna gradienten av förlusten med avseende på aktiveringar i utgångslagret, betecknat som danda^n.

Därefter, med hjälp av kedjeregeln, beräknas gradienten av förlusten med avseende på pre-aktiveringar i utgångslagret som:

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

Här representerar fn(zn)f'^n(z^n) derivatan av aktiveringsfunktionen i lager nn, och symbolen \odot betecknar elementvis multiplikation.

Note
Notering

Symbolen \odot betecknar elementvis multiplikation, vilket innebär att varje element i en vektor multipliceras med motsvarande element i en annan vektor. I kontrast representerar symbolen \cdot skalärprodukt, som används för vanlig matris- eller vektormultiplikation. Termen fnf'^n avser derivatan av aktiveringsfunktionen i utgångslagret.

Detta värde indikerar hur känslig förlustfunktionen är för förändringar i preaktiveringsvärdena i utgångslagret.

Efter att ha beräknat dzndz^n är nästa steg att räkna ut gradienterna för vikterna och biaserna:

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

Dessa gradienter beskriver hur mycket varje vikt och bias i utgångslagret bör justeras för att minska förlusten.

Här är (an1)T(a^{n-1})^T den transponerade aktiveringsvektorn från föregående lager. Om den ursprungliga vektorn har formen nneurons×1n_{\text{neurons}} \times 1, har dess transponat formen 1×nneurons1 \times n_{\text{neurons}}.

För att fortsätta bakåtspridningen beräknas derivatan av förlusten med avseende på aktiveringar i föregående lager som:

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

Detta uttryck möjliggör att felssignalen förs bakåt genom nätverket, vilket möjliggör justering av tidigare lager under träningen.

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å preaktiveringar;
  2. Beräkna gradienterna för vikter och biaser;
  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}

Denna process upprepas för varje föregående lager, steg för steg, tills inmatningslagret nås.

Uppdatering av vikter och bias

Efter att ha beräknat gradienterna för alla lager uppdateras vikterna och bias med hjälp av gradientnedstigning:

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}

Här representerar α\alpha inlärningshastigheten, som styr hur mycket parametrarna justeras vid varje träningssteg.

Här är α\alpha inlärningshastigheten, en hyperparameter som bestämmer storleken på justeringen som tillämpas på vikter och bias vid varje uppdateringssteg.

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

bookBakåtriktad Spridning

Svep för att visa menyn

Bakåtpropagering, eller backpropagation, är processen att bestämma hur förlustfunktionen förändras med avseende på varje parameter i det neurala nätverket. Målet är att justera dessa parametrar på ett sätt som minskar den totala förlusten.

Denna process bygger på algoritmen gradientnedstigning, som använder derivatorna av förlusten med avseende på varje lags pre-aktiveringsvärden (de råa utgångarna innan aktiveringsfunktionen tillämpas) och propagerar dem bakåt genom nätverket.

Eftersom varje lager bidrar till den slutliga prediktionen beräknas gradienterna steg för steg:

  1. Utför framåtpropagering för att erhålla utgångarna;
  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 och använd gradienterna för vikter och biaser för att uppdatera dem under träningen.
Note
Notera

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åtpropagering 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 är det första steget att beräkna gradienten av förlusten med avseende på aktiveringar i utgångslagret, betecknat som danda^n.

Därefter, med hjälp av kedjeregeln, beräknas gradienten av förlusten med avseende på pre-aktiveringar i utgångslagret som:

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

Här representerar fn(zn)f'^n(z^n) derivatan av aktiveringsfunktionen i lager nn, och symbolen \odot betecknar elementvis multiplikation.

Note
Notering

Symbolen \odot betecknar elementvis multiplikation, vilket innebär att varje element i en vektor multipliceras med motsvarande element i en annan vektor. I kontrast representerar symbolen \cdot skalärprodukt, som används för vanlig matris- eller vektormultiplikation. Termen fnf'^n avser derivatan av aktiveringsfunktionen i utgångslagret.

Detta värde indikerar hur känslig förlustfunktionen är för förändringar i preaktiveringsvärdena i utgångslagret.

Efter att ha beräknat dzndz^n är nästa steg att räkna ut gradienterna för vikterna och biaserna:

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

Dessa gradienter beskriver hur mycket varje vikt och bias i utgångslagret bör justeras för att minska förlusten.

Här är (an1)T(a^{n-1})^T den transponerade aktiveringsvektorn från föregående lager. Om den ursprungliga vektorn har formen nneurons×1n_{\text{neurons}} \times 1, har dess transponat formen 1×nneurons1 \times n_{\text{neurons}}.

För att fortsätta bakåtspridningen beräknas derivatan av förlusten med avseende på aktiveringar i föregående lager som:

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

Detta uttryck möjliggör att felssignalen förs bakåt genom nätverket, vilket möjliggör justering av tidigare lager under träningen.

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å preaktiveringar;
  2. Beräkna gradienterna för vikter och biaser;
  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}

Denna process upprepas för varje föregående lager, steg för steg, tills inmatningslagret nås.

Uppdatering av vikter och bias

Efter att ha beräknat gradienterna för alla lager uppdateras vikterna och bias med hjälp av gradientnedstigning:

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}

Här representerar α\alpha inlärningshastigheten, som styr hur mycket parametrarna justeras vid varje träningssteg.

Här är α\alpha inlärningshastigheten, en hyperparameter som bestämmer storleken på justeringen som tillämpas på vikter och bias vid varje uppdateringssteg.

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