Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Tot nu toe hebben we het gehad over het lineaire regressiemodel en de verschillende manieren om de parameters te schatten. We hebben ook gezien hoe het logistische regressiemodel een uitbreiding is voor binaire klassificatie, waarbij een sigmoïde (S-vormige) functie (de link functie) lineaire predicties vertaalt naar het interval [0,1][0, 1]. Het logistische regressiemodel is een specifiek geval van een generalized linear model.

In deze sectie introduceren we het perceptron, de bouwsteen van neurale netwerken. Een perceptron is conceptueel zeer verwant aan generalized linear models. Het belangrijkste verschil zit in de terminologie: wat we bij GLMs een link functie noemen, wordt in de context van neurale netwerken een activatiefunctie genoemd.

Een perceptron is in feite een kunstmatig neuron dat de werking van een biologisch neuron nabootst:

  • De inputs xix_i zijn vergelijkbaar met signalen van andere neuronen

  • De gewichten wiw_i bepalen de sterkte van elke verbinding

  • De activatiefunctie ϕ(z)\phi(z) bepaalt of het neuron “vuurt” (actief wordt)

Source

Anatomie

Een perceptron bestaat uit:

  1. Inputlaag (input layer): De feature waarden x1,x2,…,xnx_1, x_2, \ldots, x_n (net zoals bij regressie)

  2. Gewichten (weights): De parameters w1,w2,…,wnw_1, w_2, \ldots, w_n (analoog aan de coëfficiënten b1,b2,…,bnb_1, b_2, \ldots, b_n bij regressie)

  3. Bias: De parameter w1w_1 (analoog aan het intercept b1b_1 bij regressie), waarbij x1=1x_1=1

  4. Lineaire combinatie: z=∑i=1nwixi=xTwz = \sum_{i=1}^{n} w_i x_i = \pmb{x}^T\pmb{w}

  5. Activatiefunctie: ϕ(z)\phi(z) die de lineaire output niet-lineair transformeert

  6. Output: De uiteindelijke predictie y^B=O(ϕ(z))\hat{y}^B = O(\phi(z))

Source
<Figure size 1400x800 with 1 Axes>

Activatiefuncties

De activatiefunctie ϕ(z)\phi(z) is cruciaal voor de werking van een perceptron. Ze vertaalt de lineaire combinatie van inputs en gewichten naar een output via een niet-lineaire transformatie die bepaalt of en in welke mate het perceptron actief wordt. Er bestaan verschillende varianten met verschillende eigenschappen. Hieronder bekijken we de meest gebruikelijke:

1. Logistische

De logistische functie is een S-vormige functie die we al kennen van het logistische regressiemodel:

ϕ(z)=σ(z)=11+e−z\phi(z) = \sigma(z) = \frac{1}{1 + e^{-z}}
  • Bereik: (0,1)(0, 1)

  • De lineaire combinatie zz noemen we ook =logits in deze context

  • Gebruik: Binaire klassificatie (output kan als probabiliteit geïnterpreteerd worden)

2. Tanh (Hyperbolische tangens)

Dit is ook een S-vormige functie die tussen -1 en 1 schaalt:

ϕ(z)=tanh⁡(z)=ez−e−zez+e−z\phi(z) = \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}
  • Bereik: (−1,1)(-1, 1)

  • Voordeel: Zero-centered (gemiddelde output rond 0)

3. ReLU (Rectified Linear Unit)

ReLU is een piecewise linear functie en is de meest populaire activatiefunctie in moderne neurale netwerken:

ϕ(z)=max⁡(0,z)={zals z>00als z≤0\phi(z) = \max(0, z) = \begin{cases} z & \text{als } z > 0 \\ 0 & \text{als } z \leq 0 \end{cases}
  • Bereik: [0,+∞)[0, +\infty)

  • Voordelen: Computationeel efficiënt, helpt vanishing gradients reduceren (zie verder)

4. GeLU (Gaussian Error Linear Unit)

GeLU is een continue variant van ReLU die steeds populairder wordt, vooral in de transformer modellen:

ϕ(z)=z⋅Φ(z)≈0.5z(1+tanh⁡[2π(z+0.044715z3)])\phi(z) = z \cdot \Phi(z) \approx 0.5z\left(1 + \tanh\left[\sqrt{\frac{2}{\pi}}\left(z + 0.044715z^3\right)\right]\right)

waar Φ(z)\Phi(z) de cumulatieve distributie van de standaard normaalverdeling of Gauss verdeling is.

  • Bereik: (−∞,+∞)(-\infty, +\infty)

  • Voordelen: Continue differentieerbaar, niet-monotoon (kan negatieve waarden hebben)

4. Step function (Klassiek perceptron)

De originele activatiefunctie van het perceptron Rosenblatt (1958):

ϕ(z)={1als z>00als z≤0\phi(z) = \begin{cases} 1 & \text{als } z > 0 \\ 0 & \text{als } z \leq 0 \end{cases}
  • Bereik: {0,1}\{0, 1\}

  • Probleem: Niet differentieerbaar, dus niet bruikbaar met gradient descent

Source
<Figure size 1400x1000 with 4 Axes>

Analogie met logistische regressie

Als we bij een perceptron (a) voor de logistische activatiefunctie kiezen, en (b) de wiskundige notatie voor de volledige input X\pmb{X} data gebruiken, krijgen we enkel een verschil in benaming tussen de perceptron en logistische regressie formulering.

  • Logistische regressie:

y^=σ(Xb)=11+e−Xb\begin{align} \pmb{\hat{y}} &= \sigma(\pmb{X}\pmb{b}) \cr &= \frac{1}{1 + e^{-\pmb{X}\pmb{b}}} \end{align}
  • Perceptron

y^=ϕ(Xw)=11+e−Xw\begin{align} \pmb{\hat{y}} &= \phi(\pmb{X}\pmb{w}) \cr &= \frac{1}{1 + e^{-\pmb{X}\pmb{w}}} \end{align}

💡 We kunnen dus exact dezelfde gradient descent oplossing gebruiken!

Hieronder illustreren we dit, gebruikmakend van PyTorch en PyTorch’s automatische gradiëntberekening (autograd). We gebruiken dezelfde gesimuleerde data als in het logistische regressie voorbeeld.

Source
COFFEE SHOP TIPPING ANALYSIS (BINARY)
==================================================
Dataset size: 50 customers
Order range: $3.96 - $24.46
Tippers: 43 (86.0%)
Non-tippers: 7 (14.0%)

True model parameters:
  Intercept (b₀): -2.000
  Slope (b₁):     0.250
  P(tip) = σ(-2.00 + 0.25 × order_total)

We trainen een perceptron met logistische activatiefunctie via gradient descent, gebruikmakend van PyTorch’s ingebouwde functionaliteit:

  • torch.nn.Linear: Een lineaire laag die z=xTw+bz = \pmb{x}^T\pmb{w} + b berekent

  • torch.nn.Sigmoid: De logistische activatiefunctie σ(z)\sigma(z)

  • torch.nn.BCELoss: De binary cross-entropy loss functie

  • torch.optim.SGD: Stochastic gradient descent optimizer (met autograd!)

Deze aanpak is equivalent aan logistische regressie maar gebruikt de terminologie en tools van neurale netwerken.

Iteration 10000/50000, Loss: 0.2763
Iteration 20000/50000, Loss: 0.2740
Iteration 30000/50000, Loss: 0.2738
Iteration 40000/50000, Loss: 0.2738
Iteration 50000/50000, Loss: 0.2738

============================================================
RESULTS: PyTorch Perceptron (Logistic Activation)
============================================================
Learned parameters:
  Intercept (b₀): -1.908
  Slope (b₁):     0.336

True parameters:
  Intercept (b₀): -2.000
  Slope (b₁):     0.250

Final loss: 0.2738
============================================================

⚠️ Beperking

Een enkelvoudig perceptron kan alleen lineair scheidbare klassen leren. De beslissingsgrens is altijd een rechte lijn (in 2D), een vlak (in 3D), of een hyper surface (in 4+D). Het klassieke voorbeeld van een niet-lineair scheidbaar probleem is de XOR-functie (exclusive OR).

XOR Problem:
Perceptron accuracy: 50.00%

Predictions vs True labels:
  Input: [0. 0.] → True: 0, Predicted: 1 ✗
  Input: [0. 1.] → True: 1, Predicted: 1 ✓
  Input: [1. 0.] → True: 1, Predicted: 1 ✓
  Input: [1. 1.] → True: 0, Predicted: 1 ✗
Source
<Figure size 1000x800 with 2 Axes>

De oplossing voor het XOR-probleem (en andere niet-lineaire problemen) is om meerdere perceptrons te combineren.

References
  1. Rosenblatt, F. (1958). The perceptron: A probabilistic model for information storage and organization in the brain. Psychological Review, 65(6), 386–408. 10.1037/h0042519