Я пытаюсь реализовать функцию потери SVM и ее градиент. Я нашел несколько примеров проектов, которые реализуют эти два, но я не мог понять, как они могут использовать функцию потерь при вычислении градиента.
Я не понимаю, как я могу использовать результат функции потерь при вычислении градиента?
Пример проекта вычисляет градиент следующим образом:
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 - для результата градиента. И X - это массив данных обучения. Но я не понял, как производная от функции потерь приводит к этому коду.