Calcula el gradiente de la función de pérdida de SVM

Estoy tratando de implementar la función de pérdida de SVM y su gradiente. Encontré algunos proyectos de ejemplo que implementan estos dos, pero no pude averiguar cómo pueden usar la función de pérdida al calcular el gradiente.

Aquí está la fórmula de la función de pérdida: introduzca la descripción de la imagen aquí

Lo que no puedo entender es que ¿cómo puedo usar el resultado de la función de pérdida mientras computo el gradiente?

El proyecto de ejemplo calcula el gradiente de la siguiente manera:

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 es para el resultado del gradiente. Y X es el conjunto de datos de entrenamiento. Pero no entendí cómo la derivada de la función de pérdida resulta en este código.

Related of "Calcula el gradiente de la función de pérdida de SVM"

El método para calcular el gradiente en este caso es el cálculo (analíticamente, ¡NO numéricamente!). Así que diferenciamos la función de pérdida con respecto a W (yi) así: introduzca la descripción de la imagen aquí

y con respecto a W (j) cuando j! = yi es:

introduzca la descripción de la imagen aquí

El 1 es solo una función de indicador, por lo que podemos ignorar la forma del medio cuando la condición es verdadera. Y cuando escribes en código, el ejemplo que proporcionaste es la respuesta.

Ya que está utilizando el ejemplo de cs231n, definitivamente debería revisar la nota y los videos si es necesario.

¡Espero que esto ayude!

Si la sustracción es menor que cero, la pérdida es cero, por lo que el gradiente de W también es cero. Si la subestación es mayor que cero, entonces el gradiente de W es la desviación parcial de la pérdida.