2016-03-15 8 views
13

Ich versuche, die SVM Verlustfunktion und ihre Steigung zu implementieren. Ich fand einige Beispielprojekte, die diese beiden implementieren, aber ich konnte nicht herausfinden, wie sie die Verlustfunktion verwenden können, wenn sie den Gradienten berechnen. HierBerechnen Sie die Steigung der SVM Verlustfunktion

ist die Formel der Verlustfunktion: enter image description here

Was kann ich nicht verstehen, ist, dass, wie kann ich das Ergebnis der Verlustfunktion während Gradienten Berechnung?

Das Beispiel Projekt berechnet den Gradienten wie folgt:

for i in xrange(num_train): 
    scores = X[i].dot(W) 
    correct_class_score = scores[y[i]] 
    for j in xrange(num_classes): 
     if j == y[i]: 
     continue 
     margin = scores[j] - correct_class_score + 1 # note delta = 1 
     if margin > 0: 
     loss += margin 
     dW[:,j] += X[i] 
     dW[:,y[i]] -= X[i] 

dW für gradient Ergebnis. Und X ist das Array von Trainingsdaten. Aber ich habe nicht verstanden, wie die Ableitung der Verlustfunktion in diesem Code resultiert.

+1

Welches Beispiel benutzen Sie? – Prophecies

Antwort

0

Wenn die Substraktion kleiner als Null ist der Verlust Null ist, so dass die Steigung der W ebenfalls Null. Wenn die Unterordnung größer als Null ist, dann ist der Gradient von W die partielle Ableitung des Verlustes.

0

Verfahren Gradienten in diesem Fall zu berechnen, ist Calculus (analytisch, numerisch nicht!). So unterscheiden wir Verlustfunktion in Bezug auf W (yi) wie folgt aus: enter image description here

und in Bezug auf W (j), wenn j = yi ist:

enter image description here

Die 1 nur Anzeige ist Funktion, so dass wir die mittlere Form ignorieren können, wenn die Bedingung wahr ist. Und wenn Sie in Code schreiben, ist das Beispiel, das Sie zur Verfügung gestellt haben, die Antwort.

Da Sie cs231n Beispiel verwenden, sollten Sie auf jeden Fall note und Videos überprüfen, wenn nötig.

Hoffe, das hilft!

+0

Wie haben sie diese Formeln aus dem grundlegenden SVM-Verlust entwickelt? Kannst du das bitte näher erläutern? Danke –

+1

@UriAbramson Hallo! Dies ist eigentlich Grundrechnung. Differenziere (w (j) .T * xi - w (yi) .T * xi + delta) in Bezug auf w (yi), wir erhalten -xi, und um in Bezug auf w (j) zu unterscheiden, erhalten wir xi (wenn die Indikatorfunktion für beide Fälle wahr ist). Nun, da die Website Equation-Rendering nicht unterstützt, ist es besser, [die Originalnote] zu überprüfen (http://cs231n.github.io/optimization-1/), und wenn Sie Probleme haben, das Kalkül zu verstehen, empfehle ich Ihnen beobachtete Khan-Akademie. Sie haben tolle Tutorial-Videos. Ich hoffe das hilft. –

+1

Ich verstehe es jetzt. Ich habe nicht herausgefunden, dass die 1 (....> 0) eine Bedingung ist. Danke für die Erklärung, können Sie bitte erklären, warum Sie 2 Ableitungen tun müssen - ein w.r.t Wj und der andere w.r.t Wyi? Wie funktioniert es..? –