Werkplaats / De werkplaats
In jouw eigen tempo
← Wiskunde-fundament
MODULE 03 · LES 09

Geef een verandering door

Volg gevoeligheid door een keten van bewerkingen en tel bijdragen van vertakkingen op.

45 min3 checkpoints
DIT GA JE ONTDEKKEN
  • Je past de kettingregel toe op een samenstelling van functies.
  • Je telt bijdragen op wanneer een variabele meerdere paden beïnvloedt.

Een voorspelling, zoals een woningprijs, ontstaat vaak via meerdere rekenstappen. Je past eerst een invoer aan en gebruikt het resultaat daarna in een volgende bewerking. Om de gevoeligheid van de hele berekening te kennen, volg je die stappen één voor één.

Stel de eerste stap verdubbelt de invoer en telt er 1 bij op; de tweede kwadrateert dat resultaat. Bij invoer 1 wordt de tussenwaarde 3 en de einduitkomst 9. Een kleine verandering in de invoer wordt eerst tweemaal doorgegeven en daarna, rond tussenwaarde 3, nog eens zesmaal.

1. Gevoeligheden langs één pad vermenigvuldigen

Een invoertoename van ongeveer 0.01 maakt de tussenwaarde 0.02 groter. Kwadrateren heeft bij 3 helling 6, dus de einduitkomst groeit ongeveer 6 × 0.02 = 0.12. Per eenheid invoer is de lokale gevoeligheid daarom 2 × 6 = 12.

VOORUIT REKENEN · TERUG AFLEIDENGevoeligheid stroomt door de keten

Volg eerst x → z → y. Vermenigvuldig daarna de lokale afgeleiden terug naar x.

INVOER x1.00gegeven waarde
z = ax + b3.00dz/dx = 2.00
y = z²9.00dy/dz = 6.00

dy/dx = 6.00 × 2.00 = 12.00

Gebruik de beginwaarden x = 1, a = 2, b = 1. Lees eerst de drie kaarten van links naar rechts; lees daarna de twee lokale hellingen. Zet x vervolgens op −1: de einduitkomst blijft positief, maar de totale helling wordt negatief.

We noemen de invoer x, de tussenwaarde z en de einduitkomst y. a is de vermenigvuldigingsfactor, b de vaste verschuiving. Zo schrijven we de twee stappen:

z=ax+by=z2

De notatie dz/dx betekent “de afgeleide van z naar x”: hoe z lokaal reageert op een verandering in x. Dat is hier a, omdat de vaste b niet mee verandert. De tweede helling, dy/dz, is 2z volgens de machtsregel.

dydx=dydz·dzdx=2za

Dit is de kettingregel (chain rule). De d's benoemen afgeleiden; het zijn geen losse getallen die je hoeft in te vullen. We vermenigvuldigen gevoeligheden omdat de eerste verandering via de tweede bewerking wordt doorgegeven.

x = 1
a = 2
b = 1
z = a * x + b
binnenste_helling = a
buitenste_helling = 2 * z
print(z ** 2)   # 9
print(buitenste_helling * binnenste_helling)
# 12

Maak d_kwadraat_affien(x, a, b) voor de afgeleide van deze keten. “Affien” benoemt de eerste stap, vermenigvuldigen plus een vaste verschuiving. a kan ook nul zijn: dan verandert de tussenwaarde niet mee met x en is de totale gevoeligheid nul.

01
CHECKPOINTVermenigvuldig lokale gevoeligheden

2. De buitenste functie ziet de tussenwaarde

Vervang nu de eerste stap door g(x) = 3x + 1; de buitenste functie f blijft kwadrateren. Bij x = 2 is de tussenwaarde 7. De buitenste helling is daar 14, en de binnenste is 3: samen 42.

h(x)=f(g(x))h′(x)=f′(g(x))·g′(x)

h is hier de naam van de samengestelde functie, geen stapgrootte zoals in de eerste les. De accenttekens benoemen weer afgeleiden. In Python schrijven we f′ als df en g′ als dg:

def g(x):
    return 3 * x + 1

def dg(x):
    return 3

def df(z):
    return 2 * z

x = 2
tussen = g(x)
print(df(tussen) * dg(x))   # 42
print(df(x) * dg(x))   # 12: verkeerde plek

Veelgemaakte fout: de buitenste helling op x evalueren. De buitenste functie ontvangt hier 7, niet 2; daarom is 12 de verkeerde afgeleide. Maak ketting(df, g, dg, x); de oorspronkelijke f hoef je niet te ontvangen, want haar afgeleide is al beschikbaar.

Dit verschilt van de productregel: bij een product worden twee uitkomsten naast elkaar vermenigvuldigd, bij een keten wordt één uitkomst doorgegeven als nieuwe invoer. Kies de regel die past bij die rekenstructuur.

02
CHECKPOINTDe buitenste afgeleide op de juiste plek

3. Bij twee routes tellen bijdragen op

Bekijk nu een berekening die x tweemaal gebruikt: eerst in het product x maal y, daarna nog als losse optelling. Bij x = 2 en y = 3 is de uitkomst 2 × 3 + 2 = 8. Houd y op 3 en verhoog x met 0.1: je krijgt 2.1 × 3 + 2.1 = 8.4.

De groei 0.4 komt uit twee routes: 0.3 via het product en 0.1 via de optelling. De helling naar x is dus 3 + 1 = 4. Houd juist x op 2 en verhoog y met 0.1: de uitkomst groeit 0.2, dus de helling naar y is 2.

z=xy+x∂z∂x=y+1∂z∂y=x

Het gekrulde teken ∂ benoemt een partiële afgeleide (partial derivative): verander één invoer en houd de andere vast. z is hier opnieuw een uitvoernaam, voor deze nieuwe berekening. De twee hellingen kun je als tuple bewaren:

x = 2
y = 3
naar_x = y + 1
naar_y = x
print((naar_x, naar_y))   # (4, 2)

Maak grad_vertakking(x, y) en geef de hellingen in deze volgorde terug. Vergeet bij x de losse optelling niet: één route overslaan geeft een te kleine afgeleide.

03
CHECKPOINTMeerdere paden tellen op

Wat neem je mee?

  • Langs een keten vermenigvuldig je lokale hellingen.
  • Evalueer de buitenste helling op de tussenwaarde die zij werkelijk ontvangt.
  • Meerdere routes vanuit dezelfde invoer leveren bijdragen die je optelt.

In de volgende les verzamel je de hellingen voor alle instellingen in één vector: de gradiënt.

Verder lezen & bronnen

Inhoud gecontroleerd op 2026-10-27.
DE VOLGENDE STAPEen helling voor elk gewicht
JOUW EXPERIMENT

Probeer het zelf

Python
main.py

Python start zodra jij code uitvoert.

UITVOER

Je uitvoer verschijnt hier.
Alles rekent in je eigen browser.

Jouw checkpoints0 / 3
01
Vermenigvuldig lokale gevoeligheden

Maak d_kwadraat_affien(x, a, b) voor de afgeleide naar x van (a*x+b)**2.

Een hint

Bereken z=a*x+b; vermenigvuldig daarna de buitenste helling 2*z met de binnenste helling a.

02
De buitenste afgeleide op de juiste plek

Maak ketting(df, g, dg, x) voor de afgeleide van f(g(x)).

Een hint

Bewaar g(x) als tussenwaarde. Vermenigvuldig df(tussen) met dg(x).

03
Meerdere paden tellen op

Maak grad_vertakking(x, y) voor z=x*y+x en geef (helling naar x, helling naar y) als tuple terug.

Een hint

Voor x telt het product y mee plus 1 van de optelling. Voor y telt alleen x mee.

Vastgelopen? Bekijk de voorbeeldoplossing
def d_kwadraat_affien(x, a, b):
    z = a * x + b
    return 2 * z * a


def ketting(df, g, dg, x):
    tussen = g(x)
    return df(tussen) * dg(x)


def grad_vertakking(x, y):
    naar_x = y + 1
    naar_y = x
    return (naar_x, naar_y)

Voer de code uit en verklaar voor jezelf waarom elke stap werkt.