Calcular o gradiente da função de perda SVM
Estou tentando implementar a função de perda SVM e seu gradiente. Encontrei alguns exemplos de projetos que implementam esses dois, mas não consegui descobrir como eles podem usar a função de perda ao calcular o gradiente.
Aqui está a fórmula da função de perda:
O que não consigo entender é que como posso usar o resultado da função de perda ao calcular o gradiente?
O projeto de exemplo calcula o gradiente da seguinte maneira:
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 é para resultado gradiente. E X é a matriz de dados de treinamento. Mas não entendi como a derivada da função de perda resulta nesse código.