- 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.
Volg eerst x → z → y. Vermenigvuldig daarna de lokale afgeleiden terug naar x.
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:
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.
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.
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 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.
023. 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.
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.
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.