15  Theoretische Grundlagen neuronaler Netze

15.1 Lernsteuerung

15.1.1 Lernziele

Nach Abschluss dieses Kapitels …

  • können Sie die theoretischen Grundlagen eines einfachen neuronalen Netzwerks erklären.

15.1.2 Überblick

Dieses Kapitel führt in die Grundlagen (einfacher) neuronaler Netze ein. Die Darstellung orientiert sich an James u. a. (). Viele der gezeigten Abbildungen stammen aus James u. a. ().

15.1.3 Benötigte R-Pakete

15.2 Netzwerke mit einer einzelnen Zwischenschicht

Ein neuronales Netzwerk besteht auf

  • einem Input-Vektor mit p Variablen X=(X1,X2,,Xp)
  • einer nicht-linearen Funktion f(X)
  • sagt einen Output-Vektor Y vorher.

zeigt ein einfaches sog. Feed-Forward-Neuronales-Netzwerk, um eine quantitative Output-Variable Y vorherzusagen anhand von 4 Prädiktoren. Das Netzwerk besteht aus drei “Schichten”, der Eingabeschicht (Input Layer), der Zwischenschicht (Hidden Layer) und der Ausgabeschicht (Output Layer). Jeder Kreis symbolisiert ein “Neuron”. In der Zwischenschicht in gibt es K=5 Neuronen in der Zwischenschicht.

Künstliche Neurone

Die Idee der “Neurone” war namensgebend für Neuronale Netze. Ein biologisches Neuron gibt die Erregung (“feuert”) nur dann, wenn es über eine Schwelle erregt (aktiviert) wird. Analog sind “künstliche Neurone” in einem Neuronalen Netzwerk konzipiert. Sicherlich tun wir der gewaltigen Komplexität biologischer Neurone Unrecht, wenn wir die gedanklichen bescheidenen Einheiten künstlicher Neuronalen Netze auch als Neurone bezeichnen. Die (ursprüngliche ausschließlich vernendete) Logistische Funktion (mit sigmoiden Verlauf) setzt den “An-Aus-Mechanismen” biologischer Neurone um: Diese feuern nur oberhalb einer gewissen Aktivierung (und dann mit konstanter Stärke unabhängig von der Aktivierung).

Abbildung 15.1: Ein neuronales Netzwerk mit einer Zwischenschicht
Hinweis

Einfach gesprochen besteht ein neuronales Netzwerk aus einem System linearen Gleichungen, die aber jedes Mal noch durch eine einfache nicht-lineare Funktion gejagt werden.

Eine häufige Wahl für g ist die ReLU-Funktion (rectified linear unit), die ähnlich zum sigmoiden Verlauf des logististischen Funktion ist, s. .

Abbildung 15.2: ReLU und sigmoide Funktion

Dieses Netzwerk (als Ganzes) hat folgende Struktur, s. .

(15.1)f(X)=β0+k=1Kβkhk(X)=β0+k=1Kβkg(wk0+j=1pwkjXj)

Jedes Neuron der Zwischenschicht erfährt eine Aktivierung (##eq-nn1-akt):

(15.2)Ak=hk(X)=g(wk0+j=1pwkjXj)

Die Aktivierung eines Neurons ähnelt einer multiplen Regression, nur dass “zum Schluss” noch die nicht-lineare Sahnehaube drauf kommt.

Wichtig ist, dass g eine nicht-lineare Funktion ist, denn sonst würde das ganze Netzwerk “nur” ein lineares Gleichungssystem sein. Die nicht-lineare Funktion erlaubt aber ein viel flexibleres Verhalten, als es einer linearen Funktion möglich wäre.

“Fitten” eines neuronalen Netzwerk bedeutet, genau wie bei allen anderen Methoden des Maschinenlernens, die Parameter zu schätzen (berechnen). Wie bei jeder Methode des (überwachten) Maschinenlernen braucht es eine Fehlerfunktion, die minimiert wird. Für quantitative Y-Variablen wird zumeist die quadratische Fehlerfunktion verwendet, s. .

(15.3)i=1n(yif(xi))

15.3 Multilayer-Netzwerke

Netzwerke mit mehreren Zwischenschichten bezeichnet man als Multi-Layer-Netzwerke. Theoretisch könnte ein Netzwerk mit nur einer Zwischenschicht, aber einer großen Zahl an Neuronen, fast alle denkbaren (oder zumindest sehr viele) Funktionen simulieren. Aber in der Praxis ist es einfacher, mehrere Schichten mit mittlerer Neuronen-Anzahl zu implementieren.

zeigt ein Multilayer-Netzwerk, um die MNIST-Ziffern vorherzusagen. Im Gegensatz zu

  • besitzt es zwei Zwischenschichten, L1 (256 Neurone) und L2 (128 Neurone).
  • hat es 10 Ausgabe-Neurone in der Output-Layer, die den 10 Ziffern (0-9) entsprechen sollen.
Abbildung 15.3: Multilayer-Netzwerk, um die MNIST-Ziffern vorherzusagen

Die Aktivierung A der k(1) Neurone in der ersten Zwischenschicht gleicht dem einfachen Netzwerk oben (vgl. und ), s. :

(15.4)Ak(1)=hk(1)(X)=g(wk0(1)+j=1pwkj(1)Xj)

für alle k1,k2,,K1 Neurone der ersten Zwischenschicht. Für die zweite Zwischenschicht, L2 gilt das analog: Die Aktivierung der Neurone der vorherigen Schicht werden als Input verwendet und auf dieser Basis wird die Aktivierung des jeweiligen Neurons der aktuellen Schicht berechnet, s. :

(15.5)Al(2)=hl(2)(X)=g(wl0(2)+j=2pwlj(1)Xj)

für alle l=1,2,,K2 Neurone der zweiten Zwischenschicht.

Da sammeln sich schnell eine große Zahl an Parametern.

W1 in repräsentiert die Matrix mit allen (“Regressions”-)Gewichten (und “Intercepts”) on der Input-Layer zur ersten Zwischenschicht. Diese Matrix umfasst 785×256=200960 Koeffizienten (785=784 “Regressions-”Gewichte plus 1 Intercept-Term, auch “Bias” genannt).

Entsprechend weist jedes Neuron der zweiten Zwischenschicht ein Gewicht zu jedem Neuron der ersten Zwischenschicht auf. Daher hat W2 die Dimensionen 257×128=32896.

Jetzt gelangen wir zur Output-Layer; dort gibt es 10 Ausgabe-Neuronen. Hier sind zwei Schritte nötig. Schritt 1 besteht darin für jedes der 10 Neurone ein lineares Modell zu berechnen, basierend auf den Gewichten der vorherigen Zwischenschicht:

(15.6)Zm=βm0+l=1K2βmlhl(2)(X)=βm0+l=1K2βmlAl(2)

mit m=0,1,,9. Diese 129×10=1290 Koeffizienten sind in der Matrix B gespeichert.

Schritt 2 fehlt noch. Wir möchten ja, dass die Ausgabe für jede Ziffer in einer Wahrscheinlichkeit besteht, das kann man mit der Softmax-Aktivierung erreichen ():

(15.7)fm(X)=Pr(Y=m|X)=eZml=09eZl,

mit m=0,1,,9.

Die zu minimierende Funktion (“Loss Function”) ist im Falle qualitativer Variablen keine metrische Quadratfunktion, sondern man miniert die Kreuzentropie, vgl. .

Das Netzwerk hat insgesamt über 200k Parameter! Und das bei gerade mal 60k Bildern. Wenn da das Modell keine Overfitting-Party macht, weiß ich auch nicht.

Gegenmaßnahmen zum Overfitting sind also dringend nötig, besonders bei neuronalen Netzwerken.

15.4 Mathematik neuronaler Netzwerke

Neuronale Netzwerke basierend auf zwei Konzepte: Lineare Algebra und Ableiten (Infinitesimalrechnung).

15.4.1 Punktprodukt

Im YouTube-Kanal von 3b1b gibt es eine exzellente Einführung in die lineare Algebra.

Die zentrale Operation ist das Dot Product (Skalar- oder Punktprodukt), s. .

Im einfachen Fall (der euklidischen Ebene) gilt:

ab=(a1a2)(b1b2)=a1b1+a2b2.

Beispiel 15.1 (Einfaches Punktprodukt) Gegeben seien zwei Vektoren x=(1,2,3) und y=(1,2,3). Das Punktprodukt von x und y ist die Summe der Produkte der jeweilige Paare, s. .

xy=11+22+33=1+3+9=13.

(a) Schema des Punktprodukts
(b) Mehrfaches Punktprodukt: Matrixmultiplikation
Abbildung 15.4

Geometrisch gesprochen entspricht das Punktprodukt dem Ausmaß, in dem zwei Vektoren in die gleiche Richtung zeigen:

Die Vektoren zeigen in die gleiche Richtung: Maximales Punktprodukt (gleich dem Produkt der Vektorlängen)

Minimales Punktprodukt (Null), da die Vektoren orthogonal zueinander stehen

Mittleres Punktprodukt, proportional zur Größe des Winkels ϕ und dem Produkt der Vektorlängen

Bildquelle: Martin Thoma, Wikipedia, CC-BY 3.0

Hinweis

Eine (etwas ausführlichere) geometrische Erklärung findet sich z.B. bei Math is Fun. Für Einsteiger interessant ist auch die Erklärung von Kalid Azad. Eine 3D-Darstellung von Vektoren findet sich hier.

In R kann man das Punktprodukt mit dem %*%-Operator berechnen

x <- c(1,2,3)
y <- c(1,2,3)

dot_xy <- x %*% y
dot_xy
##      [,1]
## [1,]   14

Im Paket geometry gibt es alternativ eine entsprechende Funktion, dot:

geometry::dot(x, y)
## [1] 14

Definition 15.1 (Punktprodukt) Das Produkt zweier Vektoren a und b ist so definiert, . (15.8)ab=i=1naibi=a1b1+a2b2++anbn

15.4.2 Matrixmultiplikation

Multiplizert man zwei Matrizen, so kann man das als mehrfaches Punktprodukt auffassen, s. .

Abbildung 15.5: Berechnung des Punktprodukts
Tipp

Probieren Sie diesen Matrizenrechner aus zur Berechnung des Punktprodukts bzw. der Matrizenmultiplikation.

15.4.3 Regression als Matrixmultiplikation

Die (einfache oder multiple) Regression kann man als Matrixmultiplikation auffassen. Schauen wir uns dazu ein einfaches Beispiel an.

Der Datensatz d besteht auf einer Outcome-Variable, y sowie einem Prädiktor, x; drei Beobachtungen umfasst die Tabelle, s. . Eine Regression mit einem Prädiktor hat zwei Koeffizienten, β0,β1.

d <-
  data.frame(
    x = c(1, 2, 3),
    y = c(1.1, 2.2, 2.9),
    b0 = c(1,1,1)
  )

lm1 <- lm(y ~ x, data = d)
Tabelle 15.1: Datensatz d
x y b0
1 1.1 1
2 2.2 1
3 2.9 1

Speichern wir uns die Modellkoeffizienten, β0,β1 in einem Objekt β ab:

lm1_coefs <- lm1$coefficients
lm1_coefs
## (Intercept)           x 
##   0.2666667   0.9000000

Die vorhergesagten Werte des Modells, Y^

predict(lm1)
##        1        2        3 
## 1.166667 2.066667 2.966667

Jetzt bauen wir das Modell mit Matrixmultiplikation nach.

Dabei müssen wir für den Intercept eine Spalte mit nur 1 ergänzen und erhalten die Matrix für die X-Werte (pro Beobachtung), X:

x_matrix <- d |> 
  select(b0, x) |> 
  as.matrix() 

x_matrix
##      b0 x
## [1,]  1 1
## [2,]  1 2
## [3,]  1 3

Dann multiplizieren wir die Matrix mit den X-Werten mit der Matrix (Vektor) mit den Modellkoeffizienten. So erhalten wir die vorhergesagten Y-Werte, $:

y_pred <- x_matrix %*% lm1_coefs
y_pred 
##          [,1]
## [1,] 1.166667
## [2,] 2.066667
## [3,] 2.966667

In Mathe-Sprech sieht das so aus:

y=β01+β1x1.

In Matrixschreibweise sieht das dann so aus:

Y^=Xβ

Ausgeschrieben als Gleichungssystem:

y_hat
1.17
2.07
2.97

=

b0 x
1 1
1 2
1 3

beta
0.27
0.90

15.5 3b1b

Im YouTube-Kanal von Grant Sanderson 3blue1brown gibt es eine exzellente Einführung (bestehend aus 4 Videos zu je ca. 15 Min.) in die Theorie der neuronalen Netze.

15.5.1 Video 1

15.5.2 Video 2

15.5.3 Video 3

15.5.4 Video 4

Anspruchsvoller; mathematische Grundlagen von Backpropagation (parzielle Ableitung)

15.6 Vertiefung

Francois Chollet hat eine nützliche, zugängliche und (zum Einstieg) umfassende Anleitung zum Thema neuronale Netze mit R bzw. mit Python geschrieben (; ).

Es finden sich viele weitere Lehrbücher für Einsteiger und Fortgeschrittene, z.B. Kulkarni und Shivananda (), Gallatin und Albon (). Bekannt ist auch Géron (). Der Großteil der entsprechenden Werke nutzt Python, nicht R.

Eine einsteigerfreundliche Anleitung zur Matrixmultiplikation findet sich bei Kalid Azad, betterexplained.com. Auf Wikipedia finden sich einige einsteigerfreundliche Illustrationen.

Die Videos von vcubingx zum Thema Neuronale Netze sind empfehlenswert.

Sehr einsteigerfreundlich sind auch die Videos im YouTube-Kanal StatQuest. Der Autor Josh Starmer bieten einen großen Umfang an Themen aus dem Bereich Maschinenlernen.