Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Achterwaartse Propagatie | Neuraal Netwerk Vanaf Nul
Introductie tot Neurale Netwerken

bookAchterwaartse Propagatie

Achterwaartse propagatie (backprop) is het proces waarbij wordt berekend hoe de verliesfunctie verandert ten opzichte van elke parameter in het netwerk. Het doel is om de parameters bij te werken in de richting die het verlies vermindert.

Om dit te bereiken, gebruiken we het gradient descent algoritme en berekenen we de afgeleiden van het verlies ten opzichte van de pre-activatiewaarden van elke laag (ruwe uitvoerwaarden vóór het toepassen van de activatiefunctie) en propageren we deze achterwaarts.

Elke laag draagt bij aan de uiteindelijke voorspelling, dus de gradiënten moeten op een gestructureerde manier worden berekend:

  1. Voer voorwaartse propagatie uit;
  2. Bereken de afgeleide van het verlies ten opzichte van de output pre-activatie;
  3. Propageren deze afgeleide achterwaarts door de lagen met behulp van de kettingregel;
  4. Bereken gradiënten voor gewichten en biases om deze bij te werken.
Note
Opmerking

Gradiënten vertegenwoordigen de veranderingssnelheid van een functie ten opzichte van zijn invoer, wat betekent dat het de afgeleiden zijn. Ze geven aan hoeveel een kleine wijziging in gewichten, biases of activaties de verliesfunctie beïnvloedt, en sturen het leerproces van het model via gradient descent.

Notatie

Om de uitleg duidelijker te maken, gebruiken we de volgende notatie:

  • WlW^l is de gewichtenmatrix van laag ll;
  • blb^l is de vector van biases van laag ll;
  • zlz^l is de vector van pre-activaties van laag ll;
  • ala^l is de vector van activaties van laag ll;

Door a0a^0 gelijk te stellen aan xx (de invoer), kan voorwaartse propagatie in een perceptron met n lagen worden beschreven als de volgende reeks bewerkingen:

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}

Om backpropagation wiskundig te beschrijven, introduceren we de volgende notaties:

  • dalda^l: afgeleide van het verlies ten opzichte van de activaties in laag ll;
  • dzldz^l: afgeleide van het verlies ten opzichte van de pre-activaties in laag ll (voor het toepassen van de activatiefunctie);
  • dWldW^l: afgeleide van het verlies ten opzichte van de gewichten in laag ll;
  • dbldb^l: afgeleide van het verlies ten opzichte van de biases in laag ll.

Gradienten berekenen voor de outputlaag

Bij de laatste laag nn berekenen we eerst de gradiënt van het verlies ten opzichte van de activaties van de outputlaag, danda^n. Vervolgens gebruiken we de kettingregel om de gradiënt van het verlies ten opzichte van de pre-activaties van de outputlaag te berekenen:

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

Het symbool \odot staat voor elementgewijze vermenigvuldiging. Omdat we werken met vectoren en matrices, staat het gebruikelijke vermenigvuldigingsteken \cdot voor het dotproduct. fnf'^n is de afgeleide van de activatiefunctie van de outputlaag.

Deze grootheid geeft aan hoe gevoelig de verliesfunctie is voor veranderingen in de pre-activatie van de outputlaag.

Zodra we dzn\text d z^n hebben, berekenen we de gradiënten voor de gewichten en biases:

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

waarbij (an1)T(a^{n-1})^T de getransponeerde vector is van de activatie uit de vorige laag. Aangezien de oorspronkelijke vector een nneurons×1n_{neurons} \times 1 vector is, is de getransponeerde vector 1×nneurons1 \times n_{neurons}.

Om dit terug te propageren, berekenen we de afgeleide van het verlies ten opzichte van de activaties van de vorige laag:

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

Gradiënten Propageren naar de Verborgen Lagen

Voor elke verborgen laag ll is de procedure hetzelfde. Gegeven dalda^l:

  1. Bereken de afgeleide van het verlies ten opzichte van de pre-activaties;
  2. Bereken de gradiënten voor de gewichten en biases;
  3. Bereken dal1da^{l-1} om de afgeleide terug te propageren.
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}

Deze stap wordt herhaald totdat we de invoerlaag bereiken.

Bijwerken van gewichten en biases

Nadat de gradiënten voor alle lagen zijn berekend, worden de gewichten en biases bijgewerkt met behulp van gradient descent:

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}

waarbij α\alpha de leersnelheid is, die bepaalt hoeveel we de parameters aanpassen.

question mark

Hoe werkt het bij backpropagation dat een neuraal netwerk zijn gewichten en biases bijwerkt om de verliesfunctie te minimaliseren?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 4

bookAchterwaartse Propagatie

Veeg om het menu te tonen

Achterwaartse propagatie (backprop) is het proces waarbij wordt berekend hoe de verliesfunctie verandert ten opzichte van elke parameter in het netwerk. Het doel is om de parameters bij te werken in de richting die het verlies vermindert.

Om dit te bereiken, gebruiken we het gradient descent algoritme en berekenen we de afgeleiden van het verlies ten opzichte van de pre-activatiewaarden van elke laag (ruwe uitvoerwaarden vóór het toepassen van de activatiefunctie) en propageren we deze achterwaarts.

Elke laag draagt bij aan de uiteindelijke voorspelling, dus de gradiënten moeten op een gestructureerde manier worden berekend:

  1. Voer voorwaartse propagatie uit;
  2. Bereken de afgeleide van het verlies ten opzichte van de output pre-activatie;
  3. Propageren deze afgeleide achterwaarts door de lagen met behulp van de kettingregel;
  4. Bereken gradiënten voor gewichten en biases om deze bij te werken.
Note
Opmerking

Gradiënten vertegenwoordigen de veranderingssnelheid van een functie ten opzichte van zijn invoer, wat betekent dat het de afgeleiden zijn. Ze geven aan hoeveel een kleine wijziging in gewichten, biases of activaties de verliesfunctie beïnvloedt, en sturen het leerproces van het model via gradient descent.

Notatie

Om de uitleg duidelijker te maken, gebruiken we de volgende notatie:

  • WlW^l is de gewichtenmatrix van laag ll;
  • blb^l is de vector van biases van laag ll;
  • zlz^l is de vector van pre-activaties van laag ll;
  • ala^l is de vector van activaties van laag ll;

Door a0a^0 gelijk te stellen aan xx (de invoer), kan voorwaartse propagatie in een perceptron met n lagen worden beschreven als de volgende reeks bewerkingen:

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}

Om backpropagation wiskundig te beschrijven, introduceren we de volgende notaties:

  • dalda^l: afgeleide van het verlies ten opzichte van de activaties in laag ll;
  • dzldz^l: afgeleide van het verlies ten opzichte van de pre-activaties in laag ll (voor het toepassen van de activatiefunctie);
  • dWldW^l: afgeleide van het verlies ten opzichte van de gewichten in laag ll;
  • dbldb^l: afgeleide van het verlies ten opzichte van de biases in laag ll.

Gradienten berekenen voor de outputlaag

Bij de laatste laag nn berekenen we eerst de gradiënt van het verlies ten opzichte van de activaties van de outputlaag, danda^n. Vervolgens gebruiken we de kettingregel om de gradiënt van het verlies ten opzichte van de pre-activaties van de outputlaag te berekenen:

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

Het symbool \odot staat voor elementgewijze vermenigvuldiging. Omdat we werken met vectoren en matrices, staat het gebruikelijke vermenigvuldigingsteken \cdot voor het dotproduct. fnf'^n is de afgeleide van de activatiefunctie van de outputlaag.

Deze grootheid geeft aan hoe gevoelig de verliesfunctie is voor veranderingen in de pre-activatie van de outputlaag.

Zodra we dzn\text d z^n hebben, berekenen we de gradiënten voor de gewichten en biases:

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

waarbij (an1)T(a^{n-1})^T de getransponeerde vector is van de activatie uit de vorige laag. Aangezien de oorspronkelijke vector een nneurons×1n_{neurons} \times 1 vector is, is de getransponeerde vector 1×nneurons1 \times n_{neurons}.

Om dit terug te propageren, berekenen we de afgeleide van het verlies ten opzichte van de activaties van de vorige laag:

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

Gradiënten Propageren naar de Verborgen Lagen

Voor elke verborgen laag ll is de procedure hetzelfde. Gegeven dalda^l:

  1. Bereken de afgeleide van het verlies ten opzichte van de pre-activaties;
  2. Bereken de gradiënten voor de gewichten en biases;
  3. Bereken dal1da^{l-1} om de afgeleide terug te propageren.
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}

Deze stap wordt herhaald totdat we de invoerlaag bereiken.

Bijwerken van gewichten en biases

Nadat de gradiënten voor alle lagen zijn berekend, worden de gewichten en biases bijgewerkt met behulp van gradient descent:

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}

waarbij α\alpha de leersnelheid is, die bepaalt hoeveel we de parameters aanpassen.

question mark

Hoe werkt het bij backpropagation dat een neuraal netwerk zijn gewichten en biases bijwerkt om de verliesfunctie te minimaliseren?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 7
some-alt