Softmax et entropie croisée

Soit un classifieur linéaire multi-classes constitué d'une couche d'entrée et d'une couche de sortie. Ce réseau prend en entrée un vecteur , le multiplie avec une matrice de paramètres et ajoute un biais . Le résultat est un vecteur à C dimensions où C est le nombre de classes: C'est ce qu'on appelle le score du réseau. Ainsi, le score de la i-ème classe peut être représenté comme suit est la i-ème ligne de la matrice . Par la suite, le score de chaque classe passe par la fonction Softmax : qui retourne une valeur entre 0 et 1. La sortie peut être vue comme la probabilité conditionnelle de la i-ème classe car les sorties du Softmax somment à 1.

Supposons maintenant que est l'étiquette cible du vecteur ( est un entier entre 0 et ). On peut ainsi calculer la fonction de perte (ici l'entropie croisée) comme suit: est la t-ème sortie du Softmax c-à-d la probabilité prédite par le réseau pour la class cible : Si la probabilité prédite pour la classe cible est 1, alors la perte sera nulle : . À l'inverse, si la probabilité de la classe cible est 0, la perte sera infinie : . Mentionnons également qu'il est fréquent d'ajouter un terme de régularisation L2 sur les poids. Ce faisant, on obtient pour la paire la perte suivante contrôle la force de la régularisation et aide à réduire le sur-apprentissage. À noter que puisque le biais n'est pas inclue dans , on réécrira la perte comme

Au final, puisque l'ensemble d'entraînement contient données, la perte sera la moyenne du logarithme des probabilité prédites pour l'ensemble des cibles plus le terme de régularisation :

Gradient de l'entropie croisée

Afin d'opérer une descente de gradient, il faut calculer le gradient de la perte par rapport aux paramètres (et biais) et ce, à l'aide d'une opération de dérivée en chaîne du type . Pour ce faire, on peut réécrire la fonction de perte comme suit est l'entropie croisée et est la norme L2 des paramètres du réseau. Ainsi, nous obtenons les dérivées partielles que voici:

et

Pour la dérivée partielle nous utiliserons la règle en vertue de laquelle la dérivée par rapport à x d'une fonction égale à . Nous devons également considérer deux cas de figure soit et .

Pour on obtient:

Pour , on obtient:

En combinant le tout, au final on obtient:

De façon similaire, on peut calculer la dérivée de la perte par rapport au biais en changeant le dernier terme de la dérivée en chaîne.

Il est à noter que certaines implémentations délaissent le terme ne considérant pas le biais comme un paramètre comme les autres.

Et finalement, on peut "vectoriser" le gradient en calculant la dérivée de la perte par rapport à la matrice au complet et par rapport au vecteur au complet. Cela résulte en ceci: est un vecteur cible en format "one-hot".

Une fois les gradients calculés, on peut enfin lancer la descente de gradient :

Bonne programmation!