4.5 Perceptron
Kurz gesagt: Perceptron = lineare Regression + Vorzeichen-Aktivierung 📄 04_linear_methods_ws26.pdf, Folie 30.
Grundidee
📄 04_linear_methods_ws26.pdf, Folie 31- Das Perceptron ist der einfachste Weg, mit einer linearen Maschine zu klassifizieren. Der andere Weg ist die logistische Regression (4.7).
- Es geht um binäre Klassifikation. Die Klassen werden der Bequemlichkeit halber mit kodiert (nicht mit 0/1). Das macht die Formeln unten kompakt.
- Es beruht auf dem geometrischen Konzept der Hyperebene: Die Klassen müssen durch eine Hyperebene (in 2D: eine Gerade) trennbar sein.
- Die Idee wird später zur Support Vector Machine erweitert (Kapitel 6).
Das Modell als Netz: Eingänge , Gewichte , eine Summe (net input function) und danach eine Sprungfunktion als Aktivierung:
Die Entscheidungsgrenze (decision boundary) ist die Hyperebene . Der Vektor steht senkrecht auf ihr und zeigt zur Seite der Klasse (Pfeil auf der Demo-Folie 📄 04_linear_methods_ws26.pdf, Folie 32). Die Demo verwendet übrigens die 0/1-Kodierung mit , das ist inhaltlich dasselbe.
Warum nicht einfach lineare Regression auf ? Auf Folie 31 ist die orange Linie die Entscheidungsgrenze einer linearen Regression auf die Klassenlabels, die blauen Linien sind Perceptron-Lösungen. Die Regression versucht, für jeden Punkt den Wert möglichst genau zu treffen. Punkte, die weit auf der richtigen Seite liegen, erzeugen dabei große Fehler und ziehen die Grenze zu sich, obwohl sie längst richtig klassifiziert sind. Das Perceptron kümmert sich nur um die falsch klassifizierten Punkte.
Die Verlustfunktion
📄 04_linear_methods_ws26.pdf, Folie 33ist (bis auf einen Faktor) der vorzeichenbehaftete Abstand (signed distance) von Punkt zur Hyperebene:
- Für Beispiele mit sollte positiv sein.
- Für Beispiele mit sollte negativ sein.
Beides zusammen: Richtig klassifiziert ⇔ . Dafür ist die -Kodierung so praktisch.
Die Verlustfunktion ist nicht eindeutig festgelegt. Sie sollte 0 sein, wenn alle Beispiele richtig liegen, und positiv sonst. Eine mögliche Wahl (Rosenblatt):
ist die Menge der falsch klassifizierten Beispiele (misclassified).
- Richtig klassifizierte Punkte tragen 0 bei.
- Falsch klassifizierte Punkte tragen bei, und zwar umso mehr, je weiter sie auf der falschen Seite liegen.
- Loss für eine trennende Ebene, für eine nicht trennende.
Die Grafik auf der Folie vergleicht drei Kandidaten als Funktion von :
| Verlust | Formel | Eigenschaft |
|---|---|---|
| 0-1-Verlust (Fehler zählen) | 1 falls kleiner als 0, sonst 0 | stückweise konstant, Gradient überall 0 oder undefiniert, für Gradientenabstieg unbrauchbar |
| quadratisch | glatt, bestraft große Fehler stärker | |
| Rosenblatt | stückweise linear, liefert einen konstanten Gradienten für falsche Punkte |
Warum nicht direkt die Anzahl der Fehler minimieren? Weil der 0-1-Verlust flach ist: Verschiebt man die Gerade ein wenig, ändert sich die Fehlerzahl meist gar nicht. Gradientenabstieg bekommt keine Information, in welche Richtung er gehen soll. Der Rosenblatt-Verlust dagegen sagt „dieser Punkt liegt um so viel auf der falschen Seite“.
Gradient
Für ein falsch klassifiziertes Beispiel ist . Ableiten nach und (die Folie nennt den Verlust hier ):
Die Lernregel
📄 04_linear_methods_ws26.pdf, Folie 34 Man geht die Punkte einzeln durch und macht für jeden falsch klassifizierten Punkt einen Gradientenschritt (also stochastischer Gradientenabstieg mit einem Punkt pro Schritt):
Im Code auf der Folie ist :
def update_params(X, y, w, b):
didUpdate = False
for ys, xs in zip(y, X):
if ys * (np.dot(xs, w) + b) < 0: # falsch klassifiziert
w = w + ys * xs # eta = 1
b = b + ys * 1
didUpdate = True
return w, b, didUpdate
Man ruft update_params so lange auf, bis didUpdate falsch ist, also ein ganzer Durchlauf ohne Fehler bleibt.
Intuition: Ist ein Punkt der Klasse falsch klassifiziert ( zu klein), addiert man zu . Beim nächsten Mal ist um größer, der Punkt rückt auf die richtige Seite. Für einen falschen Punkt der Klasse zieht man ab. Die Ebene dreht und verschiebt sich also jedes Mal in Richtung „diesen Punkt richtig machen“.
Konvergenz: Der Algorithmus konvergiert in endlich vielen Schritten, wenn das Problem linear trennbar ist (Perceptron-Konvergenzsatz). Sonst gibt es in jedem Durchlauf wieder Fehler, und die Gewichte springen endlos hin und her.
< 0Startet man mit , , ist für alle Punkte und damit . Mit der Bedingung < 0 aus dem Folien-Code passiert dann nie ein Update, und der Algorithmus meldet fälschlich Konvergenz. Entweder zufällig initialisieren oder auf <= 0 prüfen (ein Punkt genau auf der Grenze zählt als falsch).
Im Notebook-Ausschnitt auf Folie 34 steht als Gradient „“. Gemeint ist , wie die Formel auf Folie 33 und auch der Code (w + ys*xs) zeigen.
Durchgerechnetes Beispiel
Ergänzung, nicht auf den Folien: Drei Punkte, , Start , , Bedingung für ein Update: .
- ,
- ,
- ,
| Epoche | Punkt | Update? | neues | neues | ||
|---|---|---|---|---|---|---|
| 1 | 0 | 0 | ja, | 1 | ||
| 1 | ja, | 0 | ||||
| 1 | 0 | 0 | ja, | |||
| 2 | 0 | ja, | 0 | |||
| 2 | ja, | |||||
| 2 | 1 | nein | ||||
| 3 | 1 | nein | ||||
| 3 | 3 | nein | ||||
| 3 | 1 | nein |
In Epoche 3 gibt es kein Update mehr, fertig. Die Entscheidungsgrenze ist die Gerade . liegt darüber (Klasse ), und darunter.
Schwächen des Perceptrons
- Welche Trennlinie? Jede trennende Gerade hat Verlust 0. Welche man bekommt, hängt von Startwerten und Reihenfolge der Punkte ab (die zwei blauen Linien auf Folie 31). Oft liegt die Lösung knapp an einem Punkt (Folie 72, linkes Bild).
- Keine Sicherheit: Das Perceptron sagt nur , nicht „wie sicher“.
- Nicht trennbare Daten: keine Konvergenz.
Genau diese Fragen („Which of the separating lines? How sure is the classifier?“, 📄 04_linear_methods_ws26.pdf, Folie 38) motivieren die probabilistische Behandlung und die logistische Regression. Die Frage nach der „besten“ Trennlinie mit größtem Abstand beantwortet die SVM.
Geschichte
📄 04_linear_methods_ws26.pdf, Folie 35 Das Perceptron wurde 1957 von Frank Rosenblatt vorgestellt. Der Mark 1 Perceptron war ein Rechner, der als Perceptron fest verdrahtet war. Die Folie zeigt ihn neben dem Netzschema: Eingänge, Gewichte, Summe, Sprungfunktion. Das ist das Urbild des künstlichen Neurons.