Ich habe einige Zeit gebraucht, um zu versuchen, die Berechnungen und Mechanismen der Algorithmen für maschinelles Lernen zu verstehen, die ich in meinem täglichen Leben verwende.
Wenn ich die Backpropagation-Literatur zum CS231n-Kurs studiere, möchte ich sicherstellen, dass ich die Kettenregel richtig verstanden habe, bevor ich mein Studium fortsetze.
Angenommen, ich habe die Sigmoid-Funktion:
in diesem Fall ist
Wir können diese Funktion als Berechnungsgraph schreiben (die Farbwerte werden vorerst ignoriert):
Wir können die modularisierten Knoten zur Berechnung des Gradienten des Sigmoid seiner Eingabe in einer einzigen Ableitung :
Zuerst führen wir eine Vorwärtspropogation durch, um die Ausgänge an jeder Einheit zu erhalten:
w = [2,-3,-3]
x = [-1, -2]
# Compute the forward pass
product = [w[0]*x[0]+w[1]*x[1]+w[2]]
activation = 1 / 1 + math.exp(-product)
Um den Gradienten der Aktivierung zu berechnen, können wir die obige Formel verwenden:
grad_product = (1 - activation) * activation
Wenn ich das Gefühl habe, verwirrt zu sein oder zumindest weniger intuitiv zu sein, berechnet ich den Gradienten für x
und w
:
grad_x = [w[0] * activation + w[2] * activation]
grad_w = [x[0] * activation + x[1] * activation + 1 * activation]
Genauer bin ich verwirrt darüber, warum wir 1 * activation
bei der Berechnung des Gradienten w .
Es kann dem Leser helfen, meine theoretischen Schwierigkeiten zu erkennen, wenn ich versuche, die Berechnungen der Gradienten von x und w zu begründen ...
Der Gradient jedes wird durch das entsprechende unter der Multiplikationsregel gegeben: Wenn dann ist . Dann multiplizieren wir diese lokalen Gradienten unter Verwendung der Kettenregel mit dem Gradienten des aufeinanderfolgenden Knotens (für jeden Pfad von ), um seinen Gradienten für die Funktionsausgabe zu erhalten. Dies erklärt die Berechnung für die Berechnung von .
Der Gradient von wird genau so (invers) angegeben, wie oben mit dem Zusatz erläutert . Ich glaube, dieser zusätzliche Ausdruck kommt von ? Der lokale Gradient einer Additionseinheit ist für alle Eingaben immer 1, und die Multiplikation mit ergibt sich aus der Verkettung des Gradienten mit dem Ausgang der Funktion?1 * activation
activation
Ich bin teilweise zuversichtlich mit meinem derzeitigen Verständnis, würde mich aber freuen, wenn jemand meine derzeitige Intuition in Bezug auf die Berechnungen zur Berechnung von Gradienten klären könnte.