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 Neuron und das Perzeptron

Das McCulloch-Pitts-Neuron

Das Modell von 1943 ist von der Biologie inspiriert: Ein Neuron bekommt über Dendriten Signale x1,…,xnx_1, \dots, x_n von anderen Neuronen, summiert sie gewichtet auf und „feuert“, wenn die Summe eine Schwelle überschreitet. Als Formel: Mit Gewichten w1,…,wn∈Rw_1, \dots, w_n \in \mathbb{R} ist die Aktivierung

ζ=∑j=1nwjxj=w⋅x\zeta = \sum_{j=1}^n w_j x_j = w \cdot x

und die Ausgabe

y=τ(ζ)y = \tau(\zeta)

für eine nichtlineare Aktivierungsfunktion τ ⁣:R→R\tau \colon \mathbb{R} \to \mathbb{R}. Bei McCulloch und Pitts ist τ\tau eine Schwellenwertfunktion, die 0 oder 1 ausgibt; später wird τ\tau die logistische Sigmoidfunktion σ\sigma sein oder ReLU. Diese Rollenverteilung gilt im ganzen Buch: τ\tau ist eine beliebige Aktivierungsfunktion, σ\sigma immer die logistische Sigmoidfunktion. Die Struktur „Skalarprodukt, gefolgt von einer nichtlinearen Funktion“ ist das Kochrezept, das uns durch die gesamte Vorlesung begleiten wird.

Das McCulloch-Pitts-Neuron: gewichtete Summe der Eingaben, dann eine nichtlineare Aktivierungsfunktion.

Das McCulloch-Pitts-Neuron: gewichtete Summe der Eingaben, dann eine nichtlineare Aktivierungsfunktion.

Das Perzeptron

Rosenblatts Beitrag war weniger das Neuron als der Lernalgorithmus dafür. Das Perzeptron ist ein Modell zur binären Klassifikation: Input sind Stichproben von (X,Y)(X, Y) mit X∈RnX \in \mathbb{R}^n und Y∈{0,1}Y \in \{0, 1\}. Die Parameter des Modells sind ein Gewichtsvektor w∈Rnw \in \mathbb{R}^n und ein Biasterm b∈Rb \in \mathbb{R}. Die Inferenz ist

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

wobei [⋅][\cdot] die Iverson-Klammer ist: [A]=1[A] = 1, wenn die Aussage AA wahr ist, sonst 0. Das Perzeptron ist also ein McCulloch-Pitts-Neuron mit der Schwellenwertfunktion τ(ζ)=[ζ+b>0]\tau(\zeta) = [\zeta + b > 0]. Man beachte: ff ist eine nichtlineare Funktion, obwohl im Inneren nur ein Skalarprodukt steht.

Den Bias kann man loswerden, indem man ihn als nulltes Gewicht auffasst: Mit w0:=bw_0 := b und x0:=1x_0 := 1 ist w⋅x+b=∑j=0nwjxjw \cdot x + b = \sum_{j=0}^n w_j x_j. Das ist ein Trick, den wir noch öfter sehen werden. Umgekehrt heißt das: Ein Perzeptron ohne Bias kann nur Hyperebenen durch den Ursprung lernen – zwei Klassen, die sich nur mit einer verschobenen Geraden trennen lassen, bleiben ihm verschlossen.

Geometrisch beschreibt die Gleichung w⋅x+b=0w \cdot x + b = 0 eine Hyperebene HH in Rn\mathbb{R}^n (in R2\mathbb{R}^2: eine Gerade), und ff gibt an, auf welcher Seite von HH der Punkt xx liegt. Der Vektor ww steht senkrecht auf HH: Für zwei Punkte x,x′∈Hx, x' \in H ist

w⋅(x−x′)=(w⋅x+b)−(w⋅x′+b)=0−0=0,w \cdot (x - x') = (w \cdot x + b) - (w \cdot x' + b) = 0 - 0 = 0,

also ist ww orthogonal zu jeder Richtung innerhalb von HH.

Mehr noch: Die Aktivierung w⋅x+bw \cdot x + b misst, wie weit xx von HH entfernt ist. Sei w~=w/∥w∥\tilde{w} = w / \|w\| der normierte Normalenvektor. Jeder Punkt lässt sich zerlegen als x=xH+d w~x = x_H + d\,\tilde{w} mit einem Punkt xH∈Hx_H \in H (dem Lotfußpunkt) und einer Zahl d∈Rd \in \mathbb{R}. Dann ist

w⋅x+b=(w⋅xH+b)+d (w⋅w~)=0+d ∥w∥,alsod=w⋅x+b∥w∥.w \cdot x + b = (w \cdot x_H + b) + d\,(w \cdot \tilde{w}) = 0 + d\,\|w\|, \qquad\text{also}\qquad d = \frac{w \cdot x + b}{\|w\|}.

Das ist der vorzeichenbehaftete Abstand von xx zur Hyperebene: positiv auf der Seite, in die ww zeigt, negativ auf der anderen, null auf HH. Die Aktivierung eines Neurons ist nichts anderes als dieser Abstand, multipliziert mit ∥w∥\|w\|.

Daraus folgt eine Beobachtung, die uns bei der logistischen Regression wieder begegnen wird. Multipliziert man ww und bb mit derselben Zahl c>0c > 0, so ändert sich weder HH noch die Entscheidung [w⋅x+b>0][w \cdot x + b > 0], aber die Aktivierung wird um den Faktor cc skaliert. Die Richtung von ww legt fest, was klassifiziert wird; die Länge von ww legt fest, wie schnell die Aktivierung mit dem Abstand wächst. Für das Perzeptron ist die Länge egal. Sobald wir statt der Sprungfunktion eine glatte Aktivierungsfunktion verwenden, ist sie es nicht mehr: Für die logistische Sigmoidfunktion σ\sigma ist σ(c⋅20)\sigma(c \cdot 20) bei c=10c = 10 praktisch 1, bei c=0,01c = 0{,}01 nur knapp über 12\tfrac12. Dieselbe Trenngerade, ganz andere „Sicherheit“.

Ein Perzeptron kann also genau die Klassifikationsprobleme lösen, bei denen die beiden Klassen linear trennbar sind – nicht mehr. Das berühmte Gegenbeispiel ist XOR: Die Punkte (0,0)(0,0) und (1,1)(1,1) lassen sich nicht durch eine Gerade von (0,1)(0,1) und (1,0)(1,0) trennen. Das ist die mathematische Substanz hinter dem AI Winter – und der Grund, warum wir mehrere Neuronen hintereinander schalten werden.

Wie das Perzeptron trainiert wird, also wie ww und bb aus den Daten bestimmt werden, ist Thema des nächsten Kapitels; auf einem Übungsblatt implementieren Sie es dann selbst.

Was ist ein neuronales Netz?

Ein Multilayer Perceptron (MLP) entsteht, indem die Ausgaben von mehreren (verallgemeinerten) Perzeptrons als Eingabe für ein weiteres Perzeptron verwendet werden, welches also eine Schicht (Layer) weiter hinten ist.

Ein Multilayer Perceptron mit 3 Eingaben, einer versteckten Schicht aus 4 Neuronen und einem Ausgabeneuron. Jeder Pfeil ist ein Gewicht.

Ein Multilayer Perceptron mit 3 Eingaben, einer versteckten Schicht aus 4 Neuronen und einem Ausgabeneuron. Jeder Pfeil ist ein Gewicht.

Formal: Eine Schicht mit mm Neuronen, die alle dieselben nn Eingaben bekommen, hat eine Gewichtsmatrix W∈Rm×nW \in \mathbb{R}^{m \times n} und einen Biasvektor b∈Rmb \in \mathbb{R}^m und berechnet

h=τ(Wx+b),h = \tau(W x + b),

wobei τ\tau komponentenweise angewendet wird.

Wie liest man WxWx? Die ii-te Komponente von WxWx ist das Skalarprodukt der ii-ten Zeile von WW mit xx. Die Zeilen von WW (in NumPy W[i, :]) sind also die Gewichtsvektoren der mm Neuronen, und Wx+bWx + b berechnet mm Aktivierungen auf einmal, mit dem vorigen Abschnitt: mm skalierte Abstände zu mm Hyperebenen. Als Bild in R2\mathbb{R}^2: Jedes Neuron der ersten Schicht zeichnet eine Gerade in die Eingabeebene, und der Vektor hh sagt für jede dieser Geraden, auf welcher Seite xx liegt und wie weit weg. Das XOR-Beispiel unten ist genau das: zwei Geraden, dann eine Entscheidung im Raum der beiden Seiten-Informationen.

In PyTorch speichert nn.Linear(n, m) die Matrix als weight mit Shape (m, n), eine Zeile pro Neuron, und bias mit Shape (m,).

Ein Netz mit LL Schichten berechnet dann

h(0)=x,h(k)=τ(k) ⁣(W(k)h(k−1)+b(k))(k=1,…,L),f(x)=h(L).h^{(0)} = x, \qquad h^{(k)} = \tau^{(k)}\!\left(W^{(k)} h^{(k-1)} + b^{(k)}\right) \quad (k = 1, \dots, L), \qquad f(x) = h^{(L)}.

Dabei können die Schichten verschieden groß sein, manche Einträge von W(k)W^{(k)} können 0 sein (fehlende Pfeile), es kann Pfeile rückwärts geben (rekurrente Netze), und es können viele verschiedene nichtlineare Funktionen vorkommen (ReLU, Convolution, Softmax, …). Die Gesamtheit der Einträge aller W(k)W^{(k)} und b(k)b^{(k)} sind die Parameter oder Gewichte des Netzes; bei modernen Modellen sind das Milliarden von Zahlen. „Deep“ heißt: LL ist groß.

Warum das Hintereinanderschalten hilft, sehen wir am XOR-Problem: Mit zwei Perzeptrons in der ersten Schicht, die „x1∨x2x_1 \lor x_2“ und „¬(x1∧x2)\lnot(x_1 \land x_2)“ berechnen, und einem dritten Perzeptron, das deren Ausgaben mit UND verknüpft, ist XOR plötzlich linear trennbar – im Raum der Ausgaben der ersten Schicht.

Übung

Sei w=(34)w = \binom{3}{4} und b=−5b = -5, also das Perzeptron x↦[w⋅x+b>0]x \mapsto [w \cdot x + b > 0].

  1. Berechnen Sie für x1=(42)x_1 = \binom{4}{2}, x2=(−10)x_2 = \binom{-1}{0} und x3=(3−1)x_3 = \binom{3}{-1} jeweils die Aktivierung w⋅x+bw \cdot x + b und den vorzeichenbehafteten Abstand zur Geraden. Tipp: Der Abstand ist die Aktivierung geteilt durch ∥w∥\|w\|, und ∥w∥=5\|w\| = 5.

  2. Ersetzen Sie ww durch 10w10w und bb durch 10b10b. Was ändert sich an der Geraden, was an den Aktivierungen, was an den Abständen?

Antwortprobe: Genau eine der drei Größen ändert sich.