head-side-gearLernen

Der Unterschied zwischen maschinellem Lernen und anderer Informatik besteht darin, dass du keine expliziten Anweisungen fĂŒr die AusfĂŒhrung einer bestimmten Aufgabe schreibst. In diesem Fall schreibst du nie einen Algorithmus zur Erkennung von Ziffern. Stattdessen schreibst du einen Algorithmus, der eine Reihe von Beispielbildern mit handgeschriebenen Ziffern und deren Beschriftung aufnimmt und die 13'002 Gewichtungen und Bias' des Netzwerks so anpasst, dass es bei diesen Beispielen besser funktioniert.

Die beschrifteten Bilder, die wir einspeisen, werden als "Trainingsdaten" bezeichnet.

Es ist zu hoffen, dass die schichtweise Struktur dazu fĂŒhrt, dass das Gelernte auch auf Bilder ausserhalb der Trainingsdaten ĂŒbertragen werden kann. Um dies zu testen, können wir dem Netzwerk nach dem Training weitere beschriftete Daten zeigen, die es noch nie gesehen hat, und sehen, wie genau es diese klassifiziert.

Dieser Prozess erfordert eine Menge Daten.

Die Kostenfunktion

FĂŒr den Anfang setzt du alle Gewichte und Bias' als Zufallszahlen ein. Dieses Netzwerk wird bei dem gegebenen Trainingsbeispiel schlecht abschneiden, da es einfach etwas ZufĂ€lliges tut.

Wenn du zum Beispiel das Bild einer 3 eingibst, sieht die Ausgabeschicht aus wie ein Durcheinander:

Wie kannst du also programmatisch feststellen, dass der Computer schlechte Arbeit leistet, und ihm dann helfen, sich zu verbessern?

Du definierst eine Kostenfunktion, mit der du dem Computer sagst: "Nein, böser Computer, diese Ausgabeschicht sollte Aktivierungen haben, die fĂŒr die meisten Neuronen 0 sind, aber eine 1 fĂŒr das dritte Neuron. Was du mir gegeben hast, ist absoluter MĂŒll!"

Um das etwas mathematischer auszudrĂŒcken, addiere die Quadrate der Differenzen zwischen den Aktivierungswerten der einzelnen MĂŒll-AusgĂ€nge und den Werten, die du haben willst. Wir nennen das die "Kosten" fĂŒr ein einziges Trainingsbeispiel.

Kosten ĂŒber viele Beispiele

Aber wir sind nicht nur daran interessiert, wie das Netzwerk bei einem einzelnen Bild abschneidet. Um seine Leistung wirklich zu messen, mĂŒssen wir die durchschnittlichen Kosten ĂŒber alle zehntausende von Trainingsbeispielen hinweg betrachten. Dieser Durchschnitt ist unser Massstab dafĂŒr, wie schlecht das Netzwerk ist.

Das ist eine komplizierte Funktion. Erinnerst du dich daran, dass das Netzwerk selbst eine Funktion ist? Es hat 784 Inputs (die Pixelwerte), 10 Outputs und 13'002 Parameter.

Die Kostenfunktion ist eine weitere KomplexitĂ€tsebene darĂŒber. Die Eingaben der Kostenfunktion sind diese 13'002 Gewichtungen und Bias', und sie gibt eine einzige Zahl aus, die beschreibt, wie schlecht diese Gewichtungen und Bias' sind. Sie wird anhand des Verhaltens des Netzwerks bei all den Zehntausenden von Trainingsdaten definiert, die mit einem Label versehen sind. Mit anderen Worten: Diese Trainingsdaten sind ein riesiger Satz von Parametern fĂŒr die Kostenfunktion.

Minimieren der Kostenfunktion

Dem Computer nur zu sagen, wie schlecht er arbeitet, ist nicht sehr hilfreich. Du musst ihm sagen, wie er die 13'002 Gewichtungen und Verzerrungen Àndern soll, um sich zu verbessern.

Um es einfacher zu machen, anstatt sich diese Kostenfunktion mit 13'002 Inputs vorzustellen, stellen wir uns eine einfache Funktion mit einer Zahl als Eingabe und einer Zahl als Ausgabe vor.

Wie kannst du eine Eingabe finden, die den Wert dieser Kostenfunktion minimiert?

Man kann das Minimum manchmal explizit herausfinden, indem man die Steigung auf Null setzt. Bei wirklich komplizierten Funktionen ist das jedoch nicht immer möglich, und bei unserer Funktion mit 13'002 Inputs, die durch eine unglaubliche Anzahl von Parametern definiert ist, wird das sicher nicht möglich sein.

Eine flexiblere Taktik ist es, bei einer zufÀlligen Eingabe zu beginnen und herauszufinden, in welche Richtung du gehen musst, um die Ausgabe zu senken. Finde insbesondere die Steigung der Funktion, an der du dich befindest. Wenn die Steigung negativ ist, verschiebe sie nach rechts. Wenn die Steigung positiv ist, verschiebe sie nach links.

Wenn du die neue Steigung an jedem Punkt prĂŒfst und dies wiederholt tust, nĂ€herst du dich einem lokalen Minimum der Funktion.

circle-info

Beachte, dass es selbst fĂŒr diese vereinfachte Kostenfunktion mit nur einer Eingabe viele mögliche TĂ€ler gibt, in denen du landen kannst. Es hĂ€ngt davon ab, mit welcher zufĂ€lligen Eingabe du beginnst, und es gibt keine Garantie, dass das lokale Minimum, in dem du landest, der kleinstmögliche Wert fĂŒr die Kostenfunktion ist.

Gradienter Abstieg

Um die KomplexitĂ€t ein wenig zu erhöhen, stell dir eine Funktion mit zwei EingĂ€ngen und einem Ausgang vor. Du könntest dir den Eingaberaum als xy-Ebene vorstellen, ĂŒber der die Kostenfunktion als FlĂ€che aufgetragen ist.

Anstatt nach der Steigung der Funktion zu fragen, fragst du, in welche Richtung du in diesem Input-Raum gehen solltest, um die Ausgabe der Funktion am schnellsten zu verringern.

In diesem höherdimensionalen Raum macht es keinen Sinn, von der "Steigung" als einer einzelnen Zahl zu sprechen. Stattdessen mĂŒssen wir einen Vektor verwenden, um die Richtung des steilsten Anstiegs darzustellen.

Dieser Vektor wird "Gradient" genannt und sagt dir, in welche Richtung du gehen musst, um die Funktion am schnellsten zu steigern.

Wenn du das Negativ dieses Vektors nimmst, erhĂ€ltst du natĂŒrlich die Richtung, in der die Funktion am schnellsten abnimmt. Ausserdem ist die LĂ€nge des Steigungsvektors ein Hinweis darauf, wie steil der steilste Anstieg ist.

Alles, was im Moment zÀhlt, ist, dass es im Prinzip eine Möglichkeit gibt, diesen Vektor zu berechnen, der dir sagt, in welche Richtung es bergab geht und wie steil es ist.

Der Algorithmus zur Minimierung dieser Funktion besteht also darin, diese Steigungsrichtung zu berechnen, einen Schritt bergab zu machen und dies immer wieder zu wiederholen. Dieser Prozess wird "Gradientenabstieg" genannt.

In der Praxis wird jeder Schritt wie folgt aussehen -η ∇ C wobei die Konstante η als Lernrate bezeichnet wird. Je grösser sie ist, desto grösser sind deine Schritte. Das bedeutet, dass du dich vielleicht schneller dem Minimum nĂ€herst, aber es besteht das Risiko, dass du ĂŒber das Minimum hinausschiesst und viel um es herum schwankst.

Das ist die gleiche Grundidee fĂŒr eine Funktion mit 13'002 Inputs anstelle von zwei Inputs.

Zuletzt aktualisiert