web-dev-qa-db-fra.com

Calculer le gradient de la fonction de perte SVM

J'essaie d'implémenter la fonction de perte SVM et son gradient. J'ai trouvé quelques exemples de projets mettant en œuvre ces deux projets, mais je ne pouvais pas comprendre comment ils pouvaient utiliser cette fonction lors du calcul du gradient.

Voici la formule de la fonction de perte:  enter image description here

Ce que je ne comprends pas, c'est comment puis-je utiliser le résultat de la fonction de perte lors du calcul du gradient?

L'exemple de projet calcule le dégradé comme suit:

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 est pour le résultat du dégradé. Et X est le tableau de données d’entraînement. Mais je n’ai pas compris comment la dérivée de la fonction de perte entraîne ce code. 

14
Merve Bozo

La méthode pour calculer le gradient dans ce cas est le calcul (analytiquement, pas numériquement!). Nous distinguons donc la fonction de perte en fonction de W(yi) comme ceci:  enter image description here

et par rapport à W(j) quand j! = yi est:

 enter image description here

Le 1 est juste une fonction indicatrice afin que nous puissions ignorer la forme du milieu lorsque la condition est vraie. Et lorsque vous écrivez dans le code, l'exemple que vous avez fourni est la réponse.

Puisque vous utilisez par exemple cs231n, vous devez absolument vérifier remarque et vidéos si nécessaire. 

J'espère que cela t'aides!

2
Dex D. Hunter

Si la soustraction est inférieure à zéro, la perte est égale à zéro et le gradient de W est également égal à zéro. Si la soustraction est supérieure à zéro, alors le gradient de W est la dérivation partielle de la perte.

0
BoscoTsang