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.

Das Perzeptron trainieren

Im letzten Kapitel haben wir das Perzeptron als Modell kennengelernt: ein Gewichtsvektor w∈Rnw \in \mathbb{R}^n, ein Bias b∈Rb \in \mathbb{R}, und die Inferenz f(x)=[ w⋅x+b>0 ]f(x) = [\, w \cdot x + b > 0 \,]. Was fehlt, ist das Lernen. Bevor wir ein Modell implementieren, sollten wir uns ein paar Fragen stellen, die für jedes Modell in dieser Vorlesung wieder auftauchen werden:

Für das Perzeptron beantworten wir sie so.

Daten und Aufgabe. Das Perzeptron ist ein Modell zur binären Klassifikation, also Supervised Learning. Input sind Stichproben von (X,Y)(X, Y), wobei XX Werte in Rn\mathbb{R}^n hat und Y∈{0,1}Y \in \{0, 1\} die Klasse ist. Die Dimensionalität nn der Eingabedaten ist ein Hyperparameter – einer, den wir in der Regel nicht optimieren wollen, weil er von den Daten vorgegeben ist. Ziel ist die Berechnung einer Funktion ff mit Y=f(X)+εY = f(X) + \varepsilon für einen möglichst kleinen Fehler ε\varepsilon.

Parameter und Inferenz. Die Parameter sind nn Gewichte wjw_j, zusammengefasst zu w∈Rnw \in \mathbb{R}^n, und der Bias bb. Die Inferenz ist

f(x)=[ w⋅x+b>0 ],f(x) = [\, w \cdot x + b > 0 \,],

also f(x)=1f(x) = 1 genau dann, wenn ∑jwjxj+b>0\sum_j w_j x_j + b > 0. Mit dem Trick w0:=bw_0 := b, x0:=1x_0 := 1 aus dem letzten Kapitel schreiben wir im Folgenden einfach f(x)=[ w⋅x>0 ]f(x) = [\, w \cdot x > 0 \,] und denken uns den Bias als nulltes Gewicht.

Training: die Perzeptronregel. Gegeben die bisherigen Gewichte ww und ein einzelnes Sample (x,y)(x, y), setze

wneu:=w+ρ⋅(y−f(x)) x.w_{\text{neu}} := w + \rho \cdot (y - f(x)) \, x .

Dabei ist ρ>0\rho > 0 ein Hyperparameter, die Lernrate. Was macht diese Regel?

Warum funktioniert das nicht nur für einen Schritt, sondern irgendwann sicher? Für ein festes Sample (x,y)(x, y) mit y=1y = 1, das nach kk Updates immer noch falsch klassifiziert ist, gilt wegen der Bilinearität des Skalarprodukts

w(k)⋅x=w(0)⋅x+k ρ ∥x∥2,w^{(k)} \cdot x = w^{(0)} \cdot x + k\, \rho\, \|x\|^2 ,

und dieser Wert wird für großes kk irgendwann positiv, egal wie schlecht w(0)w^{(0)} war. Geometrisch: Jedes Update addiert ein Vielfaches von xx zu ww, dreht ww also Schritt für Schritt in Richtung xx (bei y=0y = 0 von xx weg), und die Entscheidungsgrenze, die senkrecht auf ww steht, dreht sich mit, bis xx auf der richtigen Seite liegt. Das ist die eine Rechnung, die man zu diesem Kapitel einmal selbst auf Papier gemacht haben sollte. Natürlich kann ein Update für xx ein anderes Sample x′x' auf die falsche Seite schieben; dass sich das nicht endlos wiederholt, ist die Aussage des Konvergenzsatzes.

Die Regel schiebt also die Trennhyperebene bei jedem Fehler ein Stück in Richtung des falsch klassifizierten Punkts. Falls die Daten linear trennbar sind, findet sie nach endlich vielen Fehlern eine trennende Hyperebene; falls nicht, terminiert das Verfahren nie von selbst.

Zielgröße. Wir messen den Erfolg als Anteil falsch klassifizierter Samples (Fehlerrate), bzw. als Anteil korrekt klassifizierter Samples (Accuracy) auf einem Testset.

Initialisierung. Irgendwo muss ww anfangen; wir initialisieren ww z.B. auf den Vektor (1,1,…,1)(1, 1, \dots, 1). Auch das ist eine Entscheidung mit Konsequenzen, wie wir später sehen werden.

Die Perzeptronregel bei der Arbeit: Trenngerade w \cdot x + b = 0 nach 0, 1, 2 und 3 Epochen über 60 Datenpunkte, Lernrate \rho = 0{,}05.

Die Perzeptronregel bei der Arbeit: Trenngerade w⋅x+b=0w \cdot x + b = 0 nach 0, 1, 2 und 3 Epochen über 60 Datenpunkte, Lernrate ρ=0,05\rho = 0{,}05.

Zurück in die Theorie: Wozu das olle Perzeptron?

Moderne neuronale Netze verwenden meist keine Perzeptrons mehr. Beliebter ist die multiple lineare oder die logistische Regression, die ebenfalls gleich strukturierte Eingabedaten annimmt und sehr ähnlich verarbeitet: Skalarprodukt, gefolgt von einer nichtlinearen Funktion. Dieses Kochrezept – die gemeinsame Verallgemeinerung – heißt manchmal auch einfach „Perzeptron“.

Die Wahl von τ\tau bestimmt, welches bekannte Modell wir vor uns haben – und wie man es trainiert:

Modellτ(a)\tau(a)Training
Lineare Regressionτ(a)=a\tau(a) = akleinste Quadrate
Perzeptronτ(a)=[a>0]\tau(a) = [a > 0]Perzeptronregel wneu:=w+ρ(y−f(x))xw_{\text{neu}} := w + \rho (y - f(x)) x
„stetiges Perzeptron“τ(a)=tanh⁡(a)\tau(a) = \tanh(a)?
Logistische Regressionτ(a)=σ(a)=11+e−a\tau(a) = \sigma(a) = \frac{1}{1 + e^{-a}}?

Die letzten beiden Zeilen sind stetige, sogar differenzierbare Versionen der Sprungfunktion [a>0][a > 0]: tanh⁡\tanh bildet nach (−1,1)(-1, 1) ab, die logistische Sigmoidfunktion σ\sigma nach (0,1)(0, 1). Die offene Frage ist die Update-Regel: Wie trainiert man ein verallgemeinertes Perzeptron mit beliebigem τ\tau? Die Antwort – Gradientenabstieg auf einer Loss-Funktion – werden wir in den nächsten Kapiteln eingehend studieren; die Perzeptronregel wird sich dabei als Spezialfall erweisen.

Mehrere Schichten

Warum die Perzeptronregel nicht reicht

Angenommen, x∈R2x \in \mathbb{R}^2 und v,w∈R2v, w \in \mathbb{R}^2 sind die Gewichte von zwei Perzeptrons,

g(x)=[ v⋅x>0 ],f(x)=[ w⋅x>0 ],g(x) = [\, v \cdot x > 0 \,], \qquad f(x) = [\, w \cdot x > 0 \,],

und z:=(g(x),f(x))∈{0,1}2z := (g(x), f(x)) \in \{0,1\}^2 ist der Ergebnisvektor der ersten Schicht. Ein drittes Perzeptron mit Gewichten u∈R2u \in \mathbb{R}^2 berechnet daraus

h(x)=[ u⋅z>0 ].h(x) = [\, u \cdot z > 0 \,].

Das ist ein Multilayer Perceptron mit einer versteckten Schicht. Die Perzeptronregel sagt uns, wie wir uu anpassen, wenn h(x)h(x) falsch liegt – aber sie sagt nichts darüber, wie vv und ww angepasst werden sollten. Welches der beiden Perzeptrons in der ersten Schicht war „schuld“? Die Antwort auf diese Frage heißt Backpropagation, und sie braucht ein τ\tau, das sich ableiten lässt. Die Sprungfunktion des Perzeptrons tut das nicht; ReLU dagegen wird überall benutzt, obwohl sie bei 0 einen Knick hat (siehe Kapitel „Aktivierungsfunktionen“). Das machen wir noch.

Warum lineare Regression keine Schichten braucht

Man könnte auf die Idee kommen, statt Perzeptrons einfach lineare Regressionen zu stapeln, die haben ja ein bekanntes Trainingsverfahren. Seien also g(x)=v⋅xg(x) = v \cdot x und f(x)=w⋅xf(x) = w \cdot x zwei lineare Regressionen, z:=(v⋅x,w⋅x)z := (v \cdot x, w \cdot x), und h(x)=u⋅zh(x) = u \cdot z. Dann ist

h(x)=u1(v⋅x)+u2(w⋅x)=u1v1x1+u1v2x2+u2w1x1+u2w2x2=(u1v+u2w)⋅x.h(x) = u_1 (v \cdot x) + u_2 (w \cdot x) = u_1 v_1 x_1 + u_1 v_2 x_2 + u_2 w_1 x_1 + u_2 w_2 x_2 = (u_1 v + u_2 w) \cdot x .

Das ist äquivalent zu einer einzigen linearen Regression mit Gewichtsvektor u1v+u2wu_1 v + u_2 w. Allgemein: Ein Produkt von Matrizen ist wieder eine Matrix, mehrere lineare Schichten hintereinander sind wieder eine lineare Schicht. Ohne die Nichtlinearität τ\tau zwischen den Schichten bringt Tiefe gar nichts. Genau deshalb heißt τ\tau auch Aktivierungsfunktion und nicht Dekoration.

Übung

Gegeben ein Datenpunkt x=(21)x = \binom{2}{1} mit Label y=1y = 1 und ein Perzeptron mit w(0)=(−31)w^{(0)} = \binom{-3}{1}, also w(0)⋅x=−5<0w^{(0)} \cdot x = -5 < 0: Das Perzeptron sagt 0, richtig wäre 1.

  1. Führen Sie einen Schritt der Perzeptronregel w(1)=w(0)+ρ (y−f(x)) xw^{(1)} = w^{(0)} + \rho\,(y - f(x))\,x mit ρ=0,5\rho = 0{,}5 aus.

  2. Berechnen Sie w(1)⋅xw^{(1)} \cdot x. Um wie viel hat sich die Aktivierung geändert? Tipp: Rechnen Sie die Differenz einmal allgemein mit der Bilinearität des Skalarprodukts aus – Sie bekommen ρ ∥x∥2\rho\,\|x\|^2, unabhängig von w(0)w^{(0)}.

  3. Wie viele solche Schritte braucht es mindestens, bis die Aktivierung positiv wird?

Antwortprobe: eine ganze Zahl, ohne Iteration ausrechenbar. Machen Sie die Gegenprobe mit einem Schritt weniger – dort muss die Aktivierung noch ≤0\le 0 sein, denn in [ w⋅x>0 ][\,w \cdot x > 0\,] steht ein echtes Größerzeichen.