Ich versuche, die Ableitung der Aktivierungsfunktion für Softmax zu berechnen. Ich fand das: https://math.stackexchange.com/questions/945871/derivative-of-softmax-loss-function niemand scheint die richtige Ableitung dafür zu geben, wie wir die Antworten für i = j und i erhalten würden! = J. Könnte jemand bitte das erklären! Ich bin verwirrt mit den Ableitungen, wenn eine Summation wie im Nenner für die Softmax-Aktivierungsfunktion beteiligt ist.Ableitung einer softmax Funktion Erklärung
Antwort
Die Ableitung einer Summe ist die Summe der Derivate, das heißt:
d_i(p_j) = d_i(exp(o_j)/Sum_k(exp(o_k)))
ich beschlossen:
d(f1 + f2 + f3 + f4)/dx = df1/dx + df2/dx + df3/dx + df4/dx
Um die Derivate von p_j
in Bezug auf o_i
wir beginnen mit herleiten d_i
für das Derivat in Bezug auf o_i
, um dies leichter zu lesen. die Produktregel verwenden, erhalten wir:
d_i(exp(o_j))/Sum_k(exp(o_k)) + exp(o_j) * d_i(1/Sum_k(exp(o_k)))
in dem ersten Ausdruck der Suche, wird das Derivat 0
wenn i != j
sein, kann dies mit einem delta function dargestellt werden, die ich D_ij nennen. Dies gibt (zum ersten Term):
= D_ij * exp(o_j)/Sum_k(exp(o_k))
, die gerade unsere ursprüngliche Funktion von D_ij
= D_ij * p_j
Für den zweiten Term multipliziert wird, wenn wir jedes Element der Summe einzeln ableiten, die einzige nicht -Nullsignal Begriff sein wird, wenn , dies gibt uns (nicht die Macht der Regel vergessen, weil die Summe im Nenner)
= -exp(o_j) * Sum_k(d_i(exp(o_k))/Sum_k(exp(o_k))^2
= -exp(o_j) * exp(o_i)/Sum_k(exp(o_k))^2
= -(exp(o_j)/Sum_k(exp(o_k))) * (exp(o_j)/Sum_k(exp(o_k)))
= -p_j * p_i
Inbetriebnahme der beiden t emeinsam wir die überraschend einfache Formel erhalten:
D_ij * p_j - p_j * p_i
Wenn Sie wirklich wollen, können wir es in i = j
und i != j
Fälle aufgeteilt:
i = j: D_ii * p_i - p_i * p_i = p_i - p_i * p_i = p_i * (1 - p_i)
i != j: D_ij * p_i - p_i * p_j = -p_i * p_j
Welche ist unsere Antwort.
Für was es wert ist, hier ist meine Ableitung basierend auf SirGuy Antwort: (Fühlen Sie sich frei, Fehler zu zeigen, wenn Sie irgendwelche finden).
vielen Dank dafür! Ich habe nur einen Zweifel: Warum wird 'Σ_k ((d e^{o_k})/do_i) zu 'e^{o_i}' aus Schritt 4 bis 5 ausgewertet? Ich wäre sehr dankbar für alle Einsichten, die Sie zu dieser Frage anbieten können. – duhaime
@duhaime Gute Frage. Denke über all die Bedingungen dieser Summe nach und schau, was mit jedem Begriff passiert. Sie sehen, dass Sie zwei Fälle haben: Wenn i = k, ist der Ausdruck "d/do_i e^o_i" was "e^o_i" ist. Wenn i! = K, erhalten Sie eine Reihe von Nullen. –
Super, vielen Dank! – duhaime
- 1. Softmax Ableitung in NumPy Ansätze 0 (Implementierung)
- 2. Erklärung Funktion einen Zeiger einer anderen Funktion
- 3. Wie implementiert man das Softmax-Derivat unabhängig von einer Verlustfunktion?
- 4. Logistische Regressionsverlust-Funktion in Softmax umwandeln
- 5. Wie finden Sie Ableitung einer Funktion mit c
- 6. Finden der Ableitung einer 2D-Funktion mit FFT-Eigenschaften
- 7. Implementierung einer Softmax-Aktivierungsfunktion für neuronale Netze
- 8. Funktion Konstruktor vs Funktion Erklärung
- 9. Wie bekomme ich die Ableitung der Funktion?
- 10. Erste Ableitung in Matlab
- 11. C Funktion Erklärung
- 12. Erklärung bindbind() Funktion
- 13. Javascript Funktion Erklärung - Knockout.js
- 14. Vorwärts Erklärung Funktion LLVM
- 15. Aktionsauswahl mit Softmax?
- 16. Was ist der Unterschied zwischen regulärem Softmax und abgetastetem Softmax?
- 17. Erklärung von dFdx
- 18. implizite Erklärung der Funktion usleep
- 19. Probe scala höherwertige Funktion Erklärung
- 20. implizite Erklärung der Funktion 'sched_setaffinity'
- 21. Java: Ableitung aus einer generischen Liste/Sammlung
- 22. Benötigen Erklärung einer Abfrage
- 23. Ableitung von Free Monad
- 24. Ableitung Instanzen mit TypeFamilies
- 25. virtuelle Ableitung & Konvertierung mehrdeutig
- 26. Natürliche Ableitung für Prädikatenlogik
- 27. Matlab - Die zweite Ableitung
- 28. Compute komplexe Mathematik (Integration, Ableitung, ...)
- 29. Pro Pixel softmax für vollkonvolutionelles Netzwerk
- 30. Unklare Formulierung über Erklärung in template-Erklärung
vielen Dank! Das ist so klar. Ich hätte keine bessere Erklärung verlangen können! :) Ich bin froh, dass ich die Ableitung jetzt vollständig verstehe. Ich werde das auf den unbeantworteten auf math.stack exchange beziehen! – Roshini
@SirGuy sollte nicht dein dritter Ausdruck sein 'd_i (exp (o_j))/Summe_k (exp (o_k)) + exp (o_j) * d_i (1/Summe_k (exp (o_k)))'? Missing exp vor dem letzten 'o_k' –
@BenjaminCrouzier Danke, fixed – SirGuy