Perceptronen
Kunna träna en perceptron och förklara varför den inte kan lära XOR.
Förkunskaper
Intuition
Perceptronen (1958) är den enklaste möjliga «neuronen»:
- Räkna ut z = w·x + b.
- Svara 1 om z > 0, annars 0.
Inlärningsregeln är lika enkel: för varje exempel, om svaret blev fel, justera vikterna mot rätt håll:
w ← w + η(y − ŷ)x, b ← b + η(y − ŷ)
Gissade den 0 men rätt var 1? Öka vikterna där x var stort. Gissade den 1 men rätt var 0? Minska.
Perceptronkonvergenssatsen: om datan går att separera med en rät linje hittar algoritmen garanterat en sådan linje på ändligt många steg.
Kod
import numpy as np
def perceptron(X, y, eta=0.1, epoker=20):
w, b = np.zeros(X.shape[1]), 0.0
for _ in range(epoker):
fel = 0
for xi, yi in zip(X, y):
pred = 1 if xi @ w + b > 0 else 0
if pred != yi:
w += eta * (yi - pred) * xi
b += eta * (yi - pred)
fel += 1
if fel == 0:
break
return w, b, fel
X = np.array([[0,0],[0,1],[1,0],[1,1]])
print(perceptron(X, np.array([0,0,0,1]))[2]) # AND → 0 fel, löst
print(perceptron(X, np.array([0,1,1,1]))[2]) # OR → 0 fel, löst
print(perceptron(X, np.array([0,1,1,0]))[2]) # XOR → fel kvarstår, aldrig löst
Varför XOR inte går: rita punkterna. (0,0) och (1,1) ska ge 0; (0,1) och (1,0) ska ge 1. De ligger diagonalt — ingen rät linje kan skilja dem åt.
Minsky och Papert visade detta 1969, och intresset för neuronnät kollapsade i över ett decennium. Lösningen — ett dolt lager — gör att nätet kan böja beslutsgränsen. Med två neuroner i ett dolt lager och en icke-linjär aktivering löses XOR direkt. Det är hela motivet för «deep» i deep learning.
Behärskning innebär
- Beskriver perceptronens beslutsregel och uppdatering
- Förklarar varför XOR inte går att lära
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Dive into Deep Learning (CC BY-SA 4.0) — CC BY-SA 4.0
- Wikipedia — Perceptron (CC BY-SA 4.0) — CC BY-SA 4.0