2016-03-15 19 views
13

Próbuję zaimplementować funkcję utraty SVM i jej gradient. Znalazłem kilka przykładów projektów, które implementują te dwa, ale nie mogłem dowiedzieć się, jak mogą korzystać z funkcji utraty podczas obliczania gradientu.Oblicz gradient funkcji utraty SVM.

Oto wzór funkcji strat: enter image description here

Co nie mogę zrozumieć, że jak mogę wykorzystać wynik funkcji straty, podczas gdy obliczanie gradientu?

Przykład projekt oblicza nachylenie w następujący sposób:

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 na skutek gradientu. A X to zestaw danych treningowych. Ale nie rozumiem, w jaki sposób pochodna funkcji straty powoduje ten kod.

+1

Jakiego przykładu używasz? – Prophecies

Odpowiedz

0

Jeśli odejmowanie jest mniejsze od zera, strata wynosi zero, więc gradient W również wynosi zero. Jeśli podstawienie jest większe od zera, wówczas gradient W jest częściowym odchyleniem straty.

0

Metoda obliczania gradientu w tym przypadku to Rachunek (analitycznie, NIE numerycznie!). Więc odróżnić funkcję strat w odniesieniu do W (yi) tak: enter image description here

iw odniesieniu do W (j), gdy j = Yi:

enter image description here

1 jest wskaźnik tylko funkcja, dzięki czemu możemy zignorować środkową formę, gdy warunek jest prawdziwy. A kiedy piszesz w kodzie, podany przez Ciebie przykład jest odpowiedzią.

Ponieważ używasz przykładu cs231n, powinieneś zdecydowanie sprawdzić note i filmy w razie potrzeby.

Mam nadzieję, że to pomoże!

+0

W jaki sposób opracowali te formuły z podstawowej utraty SVM? Czy możesz wyjaśnić bardziej szczegółowo? Dzięki –

+1

@UriAbramson Hi! Jest to właściwie rachunek podstawowy. Rozróżnij (w (j) .T * xi - w (yi) .T * xi + delta) w odniesieniu do w (yi), otrzymujemy -xi, i rozróżniamy w odniesieniu do w (j), otrzymujemy xi (gdy funkcja wskaźnika jest prawdziwa w obu przypadkach). Ponieważ strona internetowa nie obsługuje renderowania równań, lepiej sprawdzić [oryginalną notatkę] (http://cs231n.github.io/optimization-1/), a jeśli masz problemy ze zrozumieniem rachunku różniczkowego, polecam obserwuję akademię khan. Mają świetne filmy instruktażowe. Mam nadzieję, że to pomoże. –

+1

Rozumiem to teraz. Nie zrozumiałem, że 1 (...> 0) jest warunkiem. Dziękuję za wyjaśnienie, czy możesz wyjaśnić, dlaczego musisz zrobić 2 pochodne - jeden w.r.t Wj i drugi w.r.t Wyi? Jak to działa..? –