Gradientenabstieg und Backpropagation

Gradientenabstieg und Backpropagation


Wenn wir im Maschinellen Lernen neuronale Netze trainieren oder aussagekräftige Dateneigenschaften erlernen, klingt das schon sehr biologisch. Doch wie funktioniert nun eigentlich dieses Lernen?

Für viele Probleme in der echten Welt gibt es keine exakte Lösung – oder es würde zu lange dauern, sie zu berechnen. Oft reicht uns eine ungefähre Lösung. Wenn ein automatisches Briefsortiersystem beim Lesen der Postleitzahl in einem von 10.000 Fällen einen Fehler macht, dann ist das schon okay.

Viele Probleme im Machine Learning lassen sich als Optimierungsprobleme betrachten: Es gibt Eingabedaten (z. B. Bilder vom Adressfeld des Briefes), gewünschte Ausgabedaten (die hoffentlich korrekte PLZ) und eine Funktion, die das eine in das andere überführt. Diese Funktion kann beispielsweise ein einfaches lineares Modell sein oder ein komplexeres Modell wie ein neuronales Netz. Letztlich ist es aber erst einmal egal, mit welcher Methode diese Abbildung modelliert wird. Wir können uns eine Blackbox vorstellen, die links die Eingaben entgegennimmt und rechts die Ausgaben ausspuckt. Wichtig ist, dass die Methode durch Parameter konfigurierbar ist. Man stellt sich am besten ein Mischpult mit vielen Drehknöpfen vor. Wir suchen nun genau die Drehknopfeinstellung, mit der das System die wenigsten Fehler macht. Nur, wie finden wir diese?


Parametersuche


Eine einfache Strategie wäre, alle möglichen Parameterkombinationen auszuprobieren und aufzuschreiben, wie viele falsche Postleitzahlen unsere Blackbox mit den jeweiligen Parametern falsch zuordnet. Die gesuchte optimale Drehknopfeinstellung ist nun genau jene, die zu den wenigsten Fehlern geführt hat.

Je mehr Stellschrauben die verwendete Methode hat, desto größer die Zahl der zu testenden Konfigurationen. Nehmen wir ein Bild mit 1000 x 1000 Pixeln. Ein einfacher linearer Klassifikator, das Perzeptron, würde ungefähr eine Million Parameter besitzen, die beliebige Werte haben könnten. Sagen wir, wir würden für jeden Parameter nur 10 verschiedene Werte zulassen, dann gäbe es schon 101000000 Kombinationen. Zum Vergleich: man schätzt die Anzahl der Atome im Universum auf 1085. Selbst wenn die Auswertung der Funktion rasend schnell ginge und wir die Zahl der Parameter drastisch reduzieren könnten: eine Auswertung an jeder Stelle im Parameterraum dauert einfach viel zu lang. Die gute Nachricht ist: es gibt viel schlauere Strategien als das „brute force“-Verfahren.

Eine populäre Strategie im Maschinellen Lernen ist die Funktionsoptimierung mittels Gradientenabstieg.


Gradientenabstieg

Schauen wir uns zunächst die mathematischen Grundlagen an. Funktionsgraphen helfen uns bei der Visualisierung der Berechnungen. Stellen wir uns erst einmal eine sehr einfache Blackbox vor:

Beispiel Blackbox
Die Funktion der Blackbox kann natürlich im Allgemeinen eine sehr komplexe Funktion sein, hier soll etwas Einfaches genügen: Daten und Parameter (x und w) werden in die Blackbox gespeist und dort per Multiplikation verschaltet. Stellen wir uns weiter vor, dass wir die Ausgabe der Black Box minimieren wollen und zwar in Abhängigkeit zum Parameter w.

Im Gradientenabstieg tasten wir uns schrittweise an das Funktionsminimum – in einer Variante des Algorithmus, dem Gradientenaufstieg, gehen wir in genau die andere Richtung, um das Maximum zu finden. Der Name verrät auch schon welche Größe wir für jeden Schritt nutzen: den Gradienten. Im einfachen Beispiel oben ist der Gradient einfach die Ableitung do/dw, die angibt, wie sich die Ausgabe o verändert, wenn wir an w drehen. Da do/dw = x, können wir uns für ein gegebenes x (z. B. x = 1) berechnen, dass die Änderung der Ausgabe z immer gleich 1 ist, egal, wie der Parameter y gewählt ist. Das heißt, dass die Ausgabe der Black Box um den Wert 1 steigt, wenn y um 1 erhöht wird, was man leicht auf einem Bierdeckel nachprüfen kann.

In diesem trivialen Beispiel steckt aber Potenzial: wir können nun mit dem Gradienten do/dw für jede Parametereinstellung w ausrechnen, in welche Richtung wir uns bewegen müssen, um die Ausgabe kleiner zu machen. Der Gradient do/dw war im Beispiel positiv, also müssen wir w in die andere Richtung drehen, also in die negative Richtung, um die Ausgabe kleiner zu machen. Wir bewegen uns in die negative Gradientenrichtung.

Die künstlichen Neuronen in Neuronalen Netzwerken sind ganz ähnlich aufgebaut, wie die Box in unserem Beispiel:

Beispiel Blackbox 02

Die Eingabe x wird nun allerdings mit dem Parameter w (das sogenannte Kantengewicht) multipliziert und erst dann in das Neuron gespeist, wo die Aktivierungsfunktion f die Ausgabe erzeugt. Um die Ableitung dz/dw zu berechnen, müssen wir die bekannte Kettenregel („innere mal äußere Ableitung“) anwenden, also do/dw = f’ * x. Für die populäre Sigmoid-Aktivierung wäre f’(x*w) = s(x*w)(1-s(x*w)), wobei s wieder die Sigmoide selbst ist.

Neuronale Netze besitzen aber üblicherweise mehr als nur ein Neuron. Was passiert dann mit der Ableitung? Schauen wir uns wieder ein einfaches Beispiel an:

Bespiel Blackbox 3

Unsere graue Blackbox besteht jetzt aus der Verkettung zweier Aktivierungsfunktionen und die Gesamtausgabe o2 hängt jetzt von zwei Parametern w1 und w2 ab. Auch die Ableitung der Ausgabe o2 muss in diesen zwei Dimensionen berechnet werden. Der Gradient wird zu einer vektoriellen Größe, G = ( do2/dw1, do2/dw2).

Schauen wir uns zunächst die Ableitung des Outputs nach w2 an. Unabhängig davon, wie viele Neurone vorgeschaltet sind, die Ableitung ist wie im vorigen Beispiel das Produkt der inneren und der äußeren Ableitung von g: do2/dw2 = g’ *o1. Die Ableitung der Blackbox nach w1 ist etwas komplexer, aber mit der Anwendung der Kettenregel leicht zu meistern: wir suchen die Ableitung von g(f(x*w1)*w2). Gehen wir von außen nach innen:

do2/dw1 = g’ * q’, wobei wir mit q’ die Ableitung des gesamten Ausdrucks f(x*w1)*w2 zusammenfassen. Diese Ableitung muss wieder über die Kettenregel erfolgen: q’ = w2 * f’ * x.

Damit haben wir die gesuchte Ableitung der Netzfunktion nach w1: do2/dw1 = g’ * w2 * f’ * x.

Bei komplexeren Funktionen wird die analytische Bestimmung des Gradienten umfangreich und ein Bierdeckel reicht meist nicht mehr aus, um den Ausdruck aufzuschreiben. Es gibt glücklicherweise eine einfache Methode, um die Kettenregel mit Hilfe des Schaubilds anzuwenden und ganz einfach durch Traversieren des Funktionengraphs die Ableitung zusammenzubauen. Der Algorithmus, unter dem Namen Backpropagation bekannt, funktioniert ganz einfach: Für ein Datum x wird im „forward pass“ die Netzausgabe berechnet, aber auch die Ableitungen der Aktivierungsfunktionen zwischengespeichert. Nun wird im „backward pass“ der Graph von von hinten nach vorne durchwandert.

Wir stecken rechts eine "1" in den Graphen, sammeln multiplikativ jedes Kantengewicht und jede gespeicherte Neuronenableitung mit ein. Kommen wir an ein Gewicht, dessen Einfluss auf die Netzausgabe wir berechnen wollen, multiplizieren wir das eingesammelte Produkt mit der Eingabe, die vor dem betrachteten Kantengewicht steht (x für w1 oder o1 für w2). Das Ergebnis ergibt die partielle Ableitung, die im letzten Schritt vom jeweilgen Kantengewicht abgezogen wird. Dies funktioniert auch mit mehreren Eingängen in ein Neuron: die aufgesammelte Ableitung bis zum Neuron wird dann eben mit einem anderen xi multipliziert.

Dieses einfache Verfahren verringert drastisch die Rechenzeit, die wir zum Finden der optimalen Parameter benötigen. Im obigen Beispiel müssen wir die Werte der beiden Parameter w1 und w2 finden, die die Netzfunktion minimieren. Man kann sich vorstellen, man stünde auf einem Berg und soll ins Tal finden. Man könnte zwar Schrittweise eine Reihe von benachbarten Parameterkombinationen testen und jeweils das Netzwerk mit den neuen Parametern ausführen. Mit Backpropagation brauchen wir aber nur einmal die Netzfunktion auswerten und schon wissen wir, in welche Richtung es am steilsten bergab (oder bergauf) geht. Die Änderung der Gewichte ist ein Schritt in die lokal optimale Richtung. Ob man aber wirklich in das globale Optimum kommt, ist ungewiss, es kann Plateaus geben (hier weiß man einfach nicht, in welche Richtung es ins Tal geht) oder lokale Minima. In der Praxis aber zeigt sich, dass das Verfahren schnell Unmengen von Trainingsdaten prozessieren und riesige Modelle optimieren kann.

Beispiel Blackbox 4

Moderne neuronale Netze haben mehrere Millionen Parameter. Google hat vor kurzem sogar eine Architektur mit 137 Milliarden Parametern vorgestellt (Quelle: OpenReview.net). Dank des Backpropagation-Algorithmus können auch diese hochkomplexen Modelle mit dem Gradientenverfahren optimiert werden. In der Praxis erlauben moderne Softwarebibliotheken wie TensorFlow und Torch es Anwendern, diese Architekturen auf einem hohen Abstraktionsniveau zu beschreiben. Das Aufbauen und Optimieren der Funktionsgraphen und die Bestimmung der Gradienten werden von den Bibliotheken dann automatisch erledigt.

Die vielseitige Einsetzbarkeit des Gradientenverfahrens führt im Deep Learning dazu, dass heutzutage immer mehr komplexe Systeme „End-to-End“ trainiert werden können. Ein Beispiel: Moderne Bildklassifizierungssysteme sind heutzutage in der Regel Convolutional Neural Networks und in Sprachverarbeitungssystemen kommen immer häufiger rekurrente neuronale Netzwerke zum Einsatz. Beide Systeme können mit dem Backpropagation-Algorithmus trainiert werden, daher können sie auch gemeinsam mit dem gleichen Algorithmus trainiert werden. So können z. B. hochkomplexe Image Captioning Systeme gebaut werden, die als Eingabe ein Bild bekommen und eine passende schriftliche Beschreibung des Bildes ausgeben.

An letzter Stelle sei hier noch angemerkt, dass es zahlreiche Ansätze zur Verbesserung des Gradientenverfahrens gibt, die in diesem Artikel nicht vorgestellt wurden. So kann die Geschwindigkeit des Optimierungsprozesses oft durch Impulsverfahren oder Methoden, welche zusätzlich die zweite Ableitung verwenden, verbessert werden.

Regularisierungstechniken wie Weight Decay werden oft verwendet, um zu verhindern, dass die Modelle die Trainingsdaten einfach auswendig lernen können. Und zu guter Letzt gibt es natürlich auch eine Vielzahl von anderen Optimierungsmethoden wie Reinforcement Learning, Bayesian Black-Box Optimization oder Evolutionäre Algorithmen, die in der Regel auch dann noch funktionieren, wenn sich die Gradienten des Modells nicht bestimmen lassen.

Kommentare
Einen Kommentar schreiben
Entschuldigung

Ihr Browser ist leider nicht aktuell genug.
Um diese Webseite zu benutzen, benötigen Sie einen aktuellen Browser
Wir empfehlen einen der folgenden Browser in der aktuellsten Version zu installieren.

Auf iOS Geräten sollte mindestens die Betriebssystem Version iOS 9 installiert sein.

Mozilla Firefox Google Chrome Microsoft Edge Internet Explorer