In de vorige les heb je beslisbomen, KNN en lineaire regressie leren kennen. Ze zijn krachtig โ maar ze worstelen met echt complexe taken zoals gezichtsherkenning of taalverwerking.
Daarvoor hebben we neurale netwerken nodig โ algoritmen die losjes geรฏnspireerd zijn op hoe je brein werkt.
Je brein heeft ongeveer 86 miljard neuronen. Elk neuron:
Een kunstmatig neuron doet hetzelfde, maar met getallen:
Invoer Gewichten Som Activatie Uitvoer
โโโโโโ โโโโโโโโ โโโ โโโโโโโโโ โโโโโโ
xโ = 0.5 โโโ wโ = 0.8 โโ
โโโโ 1.25 โโโ f(1.25) โโโ 0.78
xโ = 0.3 โโโ wโ = 1.5 โโ
Som = (0.5 ร 0.8) + (0.3 ร 1.5) = 0.40 + 0.85 = 1.25
Denk aan gewichten als volumeknoppen op een mengpaneel. Elke invoer is een ander instrument. De gewichten bepalen hoe hard elk instrument klinkt. Het neuron mengt ze samen, en de activatiefunctie beslist of het gecombineerde geluid hard genoeg is om door te gaan.
Eรฉn neuron kan niet veel โ net als รฉรฉn hersencel niet kan denken. De kracht komt van het organiseren in lagen.
1. Invoerlaag โ De ogen en oren ๐
2. Verborgen laag/lagen โ Het denkende brein ๐ง
3. Uitvoerlaag โ Het antwoord ๐ก
INVOERLAAG VERBORGEN LAAG 1 VERBORGEN LAAG 2 UITVOERLAAG
(3 kenmerken) (4 neuronen) (4 neuronen) (2 klassen)
[xโ] โโโโโโโ [hโ] โโโโโโโ [hโ
] โโโโโโโ [Kat: 0.92]
[xโ] โโโโโโโ [hโ] โโโโโโโ [hโ] โโโโโโโ [Hond: 0.08]
[xโ] โโโโโโโ [hโ] โโโโโโโ [hโ]
[hโ] โโโโโโโ [hโ]
De term "deep learning" betekent simpelweg een neuraal netwerk met veel verborgen lagen โ meer dan 2. GPT-4 heeft meer dan 100 lagen! Meer lagen laten het netwerk steeds abstractere patronen leren: randen โ vormen โ objecten โ scรจnes.
Na het optellen moet een neuron beslissen: moet ik activeren of niet?
Stel je een waterpijp met een klep voor:
ReLU โ De simpele poort
def relu(x):
return max(0, x)
print(relu(3.5)) # 3.5 (positief โ gaat door)
print(relu(-2.0)) # 0.0 (negatief โ geblokkeerd)
Sigmoid โ De zachte samenpresser
import math
def sigmoid(x):
return 1 / (1 + math.exp(-x))
print(sigmoid(5.0)) # 0.993 (zeer zeker "ja")
print(sigmoid(0.0)) # 0.500 (helemaal onzeker)
print(sigmoid(-5.0)) # 0.007 (zeer zeker "nee")
Softmax โ De stemmenteller
Ruwe uitvoer: [2.0, 1.0, 0.5]
Na softmax: [0.59, 0.24, 0.17] โ Kat (59%), Hond (24%), Vogel (17%)
Waarom activatiefuncties? Zonder hen zou een neuraal netwerk โ ongeacht het aantal lagen โ slechts lineaire regressie zijn. Activatiefuncties introduceren niet-lineariteit, waardoor het netwerk curves en complexe patronen kan leren.
Denk aan een estafetteloop:
Laten we classificeren of een vrucht een appel of sinaasappel is:
Invoer: gewicht = 150g, kleur = 0.8 (oranje-achtig)
Stap 1 โ Invoerlaag stuurt waarden door:
xโ = 150 (gewicht), xโ = 0.8 (kleur)
Stap 2 โ Verborgen neuron 1:
som = (150 ร 0.01) + (0.8 ร 2.0) + bias(0.1) = 3.2
uitvoer = ReLU(3.2) = 3.2
Stap 3 โ Verborgen neuron 2:
som = (150 ร -0.005) + (0.8 ร 1.5) + bias(0.3) = 0.75
uitvoer = ReLU(0.75) = 0.75
Stap 4 โ Uitvoerlaag:
appel_score = (3.2 ร -0.5) + (0.75 ร 0.8) = -1.0
sinaasappel_score = (3.2 ร 0.7) + (0.75 ร 0.3) = 2.465
Stap 5 โ Softmax:
Appel: 18%
Sinaasappel: 82% โ Voorspelling: Sinaasappel! ๐
Forward propagation geeft een voorspelling. Maar wat als het fout is? Daar komt backpropagation โ het proces waarmee een neuraal netwerk leert.
Forward propagation: Data โ Netwerk โ Voorspelling
โ
Vergelijken: Voorspelling vs Werkelijk antwoord = Fout
โ
Backpropagation: Fout stroomt TERUG door het netwerk
โ
Updaten: Gewichten aanpassen om de fout te verkleinen
โ
Herhalen: Dit duizenden keren doen!
Stel je een fabriek voor die defecte producten maakt. Om het probleem op te lossen, traceer je terug vanaf het eindproduct door elk station: "Was de verpakking fout? De verf? Het ruwe materiaal?" Elk station past zijn proces aan. Dat is backpropagation.
Laten we data door een klein netwerk traceren dat spam-e-mails classificeert.
Kenmerken:
import math
# Invoer
x1, x2 = 5, 1
# Verborgen neuron 1
z1 = (x1 * 0.6) + (x2 * 0.9) + 0.1 # = 4.0
h1 = max(0, z1) # ReLU โ 4.0
# Verborgen neuron 2
z2 = (x1 * 0.3) + (x2 * 0.4) + 0.2 # = 2.1
h2 = max(0, z2) # ReLU โ 2.1
# Uitvoerneuron
z_out = (h1 * 0.7) + (h2 * 0.5) - 0.5 # = 3.35
output = 1 / (1 + math.exp(-z_out)) # Sigmoid โ 0.966
print(f"Verborgen laag: h1={h1}, h2={h2}")
print(f"Ruwe uitvoer: {z_out:.2f}")
print(f"Spam-kans: {output:.1%}") # 96,6% โ SPAM! ๐ซ
Data (Les 1) โ Algoritme (Les 2) โ Neuraal Netwerk (Les 3)
๐ ๐งฎ ๐ง
Neurale netwerken drijven aan:
Het basisidee van neurale netwerken werd voorgesteld in 1943 โ meer dan 80 jaar geleden! Maar ze werden pas praktisch in de jaren 2010, toen we genoeg data en snelle computers (GPU's) hadden om grote netwerken te trainen.
Gefeliciteerd โ je begrijpt nu de drie pijlers van AI: data, algoritmen en neurale netwerken! In komende lessen verkennen we AI-tools en verantwoorde AI ๐ฑ