Klärung der Intuition hinter Backpropagation


7

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:

σ(x)=11+e- -x

in diesem Fall istx=w0x0+w1x1+w2

Wir können diese Funktion als Berechnungsgraph schreiben (die Farbwerte werden vorerst ignoriert): Geben Sie hier die Bildbeschreibung ein

Wir können die modularisierten Knoten zur Berechnung des Gradienten des Sigmoid seiner Eingabe in einer einzigen Ableitung :w.r.t.

dσ(x)dx=(1- -σ(x))σ(x)

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 xund 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 * activationbei der Berechnung des Gradienten w .w.r.t.

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 .xichwichf(x,y)=f(xy)fx=yxx

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?wich1 * activationw2activation

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.

Antworten:


0

Was Sie berechnen möchten, ist

σ(x^)x=[σ(x^)x0,σ(x^)x1]]

und

σ(x^)w=[σ(x^)w0,σ(x^)w1,σ(x^)w2]]

wissend, dass x^ ist in der Tat eine Funktion dieser Variablen, wie x^=w0x0+w1x1+w2.

Sie können die Kettenregel verwenden, um dies wie folgt zu berechnen:

σ(x^)x0=σ(x^)x^x^x0

Du weißt es schon σ(x^)x^

wie es ist

σ(x^)x^=(1- -σ(x^))σ(x^)

und die zweite Ableitung ist trivial (es ist nur ein Polynom! x^x0=w0). Sie müssen jetzt nur noch die 5 partiellen Ableitungen berechnen. Zusamenfassend:

σ(x^)x=[σ(x^)x^w0,σ(x^)x^w1]]

σ(x^^)w=[σ(x^)x^x0,σ(x)x^x1,σ(x^)x^]]

2

Der beste Weg, die Backpropagation für einen Programmierer zu verstehen, ist die Kettenregel als Rekursion.

Hier ist die Kettenregel. Sie haben einen verschachtelten Funktionsausdrucky=f(G(x)). Zuerst betrachten Sie es als zwei verschiedene Funktionen:

f(x)G(x)
Wenn Sie die Weiterleitung durchführen, ist dies nichts anderes als dieser Psudo-Code:
t=G(x)y=f(t)

Wenn Sie nun ein Derivat verwenden möchten, wenden Sie eine Kettenregel an:

y'=f(G(x))'=f'G'
wo
f'=df(t)/.dt
und
G'=dG(x)/.dx
Dies ist im Grunde eine Rekursion für eine verschachtelte Struktur. WennG(x)=G(h(x))Dann wenden Sie einfach die Kettenregel erneut an und machen so lange weiter, bis Sie den unteren Rand erreichen, dh die Eingabeebene bei NN.

Hier ist ein Beispiel, ein Ein-Neuron:

ein=sichGmÖichd(W.x+b)
Sie haben hier zwei Funktionen: sichGmÖichd(x) und W.x+b.

Wenn Sie zwei Schichten von Neuronen haben, ist es nicht viel anders:

sichGmÖichd(W.1sichGmÖichd(W.x+b)+b1)
Also gehst du rückwärts:
z=W.x+bein1=sichGmÖichd(z)z1=W.1ein1+b1ein2=sichGmÖichd(z1)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.