Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Wie ein kleines neuronales Netz lernt

Nach dieser Lektion: Ich kann erklären, wie ein kleines neuronales Netz lernt.

Lektion, 55 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Eine Regel, die niemand geschrieben hat

Eine Buchungs-App sagt dem Verleih, dass der Samstag voll wird. Niemand hat dort „wenn warm und trocken am Wochenende“ programmiert. Die App begann mit Zahlen ohne Bedeutung und korrigierte sie, einen vergangenen Tag nach dem anderen.

Dieses Korrigieren ist bei einem neuronalen Netz mit „Lernen“ gemeint. Es ist Rechnen, das Sie von Hand nachvollziehen können.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie ein kleines neuronales Netz lernt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Neuronaddiert seine gewichteten Eingaben und einen Bias, dann entscheidet es
Gewichtwie stark eine Eingabe zählt
Biaseine addierte Zahl, die die Entscheidung verschiebt
Lernratewie groß jede Korrektur ist0.1
Epocheein Durchlauf über alle Trainingszeilen
Versteckte SchichtNeuronen zwischen den Eingaben und der Antwort

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Perzeptron addiert und entscheidet dann

Ein Perzeptron ist ein einzelnes Neuron. Es multipliziert jede Eingabe mit ihrem Gewicht, addiert alles und addiert den Bias.

Liegt die Summe über 0, antwortet es mit 1, hier „voll“. Sonst antwortet es mit 0, „ruhig“. Ein großes positives Gewicht schiebt in Richtung voll, ein negatives in Richtung ruhig.

Beispiel: zwei Tage durch ein Neuron

TagEingaben: Temperatur, Regen, WochenendeGewichte 0,5, -0,9, 0,6, Bias -1SummeAntwort
Warmer Samstag2,0, 0,0, 11,0 + 0 + 0,6 - 10,61, voll
Kalter, nasser Mittwoch0,7, 1,1, 00,35 - 0,99 + 0 - 1-1,640, ruhig

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Korrektur von Hand

Code: python
# Ein voller Tag: Temperatur in Zehnergrad, Regen in cm, Wochenende.
tag = [2.0, 0.0, 1]
ziel = 1
gewichte = [0.0, 0.0, 0.0]
bias = 0.0
rate = 0.1

summe = bias
for n in range(3):
    summe = summe + gewichte[n] * tag[n]
schaetzung = 0
if summe > 0:
    schaetzung = 1
fehler = ziel - schaetzung
for n in range(3):
    gewichte[n] = round(gewichte[n] + rate * fehler * tag[n], 2)
bias = round(bias + rate * fehler, 2)
print("Schätzung:", schaetzung, "Fehler:", fehler)
print("Gewichte:", gewichte, "Bias:", bias)
# Tragen Sie die neuen Gewichte und den Bias in Zeile 4 und 5 ein.
# Starten Sie erneut. Ist der Fehler jetzt 0?

Lernen heißt Gewichte korrigieren

Das Training beginnt mit Gewichten von 0. Für jede Zeile schätzt das Perzeptron. Der Fehler ist die wahre Antwort minus die Schätzung: 1, 0 oder -1.

Jedes Gewicht verschiebt sich dann um Lernrate mal Fehler mal seine Eingabe. Ein Durchlauf über alle Zeilen ist eine Epoche. Das Training endet nach einer festen Zahl von Epochen oder wenn eine Epoche fast nichts mehr ändert.

Ein Perzeptron am Jahr trainieren

Befehl
docker exec jupyter python3 steps/perceptron.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine gerade Grenze reicht nicht immer

Ein Perzeptron trennt seine Eingaben mit einer einzigen geraden Grenze. Manche Muster lassen sich so nicht trennen.

Das bekannteste ist XOR: Die Antwort ist 1, wenn genau eine von zwei Eingaben 1 ist. Keine gerade Linie bringt die beiden Einsen auf eine Seite und die beiden Nullen auf die andere. Der Notebook-Block unten probiert es aus.

Beispiel: ODER und XOR nebeneinander

Erste EingabeZweite EingabeODERXOR
0000
0111
1011
1110

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Im Notebook eingeben: ODER und XOR

Code: python
from sklearn.linear_model import Perceptron
from sklearn.neural_network import MLPClassifier

X = [[0, 0], [0, 1], [1, 0], [1, 1]]
oder = [0, 1, 1, 1]
xor = [0, 1, 1, 0]
print(Perceptron(random_state=0).fit(X, oder).score(X, oder))
print(Perceptron(random_state=0).fit(X, xor).score(X, xor))
# Eine versteckte Schicht aus 4 Neuronen.
netz = MLPClassifier(hidden_layer_sizes=(4,), solver="lbfgs", max_iter=1000, random_state=1).fit(X, xor)
print(netz.score(X, xor))

Schichten und viele kleine Korrekturen

Eine versteckte Schicht ist eine Reihe von Neuronen zwischen den Eingaben und der Antwort. Jedes zieht seine eigene Grenze, das letzte Neuron verbindet sie. So wird XOR gelöst.

Netze entscheiden weich statt mit einer harten Stufe. So lässt sich jedes Gewicht ein wenig in die Richtung schieben, die den Fehler senkt. Der Fehler wird von der Antwort rückwärts durch jede Schicht gereicht. Das heißt Backpropagation.

Drei Netzgrößen am Jahr

Befehl
docker exec jupyter python3 steps/network.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, ein größeres Netz sei immer ein besseres. Hier erreichten 2, 8 und 32 versteckte Einheiten alle 0,87, weil das Muster in drei Eingaben einfach ist. Zusätzliche Neuronen kosten Zeit und können den Zufall lernen. Beginnen Sie klein und wachsen Sie nur, wenn eine Testmenge es rechtfertigt.

Weiterführend: drei Lernraten

Trainieren Sie in Ihrem Notebook das Perzeptron aus perceptron.py mit drei Lernraten: eta0=0.01, eta0=1 und eta0=10. Notieren Sie jedes Mal die Durchläufe und die Genauigkeit.

Erklären Sie in zwei Sätzen, warum die Lernrate bei manchen Modellen mehr zählt als bei anderen. Hinweis: Was geschieht mit der Entscheidung, wenn alle Gewichte und der Bias mit derselben Zahl malgenommen werden?

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.