paint-brush
Pourquoi les fonctions de coût quadratiques sont inefficaces dans la formation sur les réseaux neuronauxpar@varunnakra1
2,631 lectures
2,631 lectures

Pourquoi les fonctions de coût quadratiques sont inefficaces dans la formation sur les réseaux neuronaux

par Varun Nakra6m2024/06/03
Read on Terminal Reader

Trop long; Pour lire

L'une des questions les plus fréquemment posées lors des entretiens sur les connaissances en apprentissage profond est la suivante : « Pourquoi ne pouvons-nous pas utiliser une fonction de coût quadratique pour former un réseau neuronal ?** » Nous approfondirons la réponse à cette question. Il y aura beaucoup de mathématiques impliquées mais rien de fou ! et je garderai les choses simples mais précises.
featured image - Pourquoi les fonctions de coût quadratiques sont inefficaces dans la formation sur les réseaux neuronaux
Varun Nakra HackerNoon profile picture
0-item

L'une des questions les plus fréquemment posées lors des entretiens sur les connaissances en apprentissage profond est la suivante : « Pourquoi ne pouvons-nous pas utiliser une fonction de coût quadratique pour former un réseau neuronal ? » ». Dans cet article, nous discuterons de la réponse à cette question. Il y aura beaucoup de mathématiques impliquées mais rien de fou ! Je garderai les choses simples et précises.


Commençons par contempler l'architecture générale d'un réseau de neurones


L'architecture générale d'un réseau de neurones

Architecture de réseau neuronal pour la classification binaire


Nous avons une série d'entrées formant une « couche d'entrée », une série de neurones dans la « couche cachée » et un neurone formant une « couche de sortie » pour un problème de classification binaire. Pour cette question, nous supposerons que nous avons affaire à un classificateur binaire, nous n'avons donc qu'une seule valeur de sortie hors du réseau.


Maintenant, regardez la figure suivante où nous avons mis en évidence la couche d'entrée en vert, le neurone de sortie en rouge et un neurone de la couche cachée en orange. De tous les verts à l’orange, nous voyons que toutes les entrées sont connectées au neurone orange. En d’autres termes, « l’activation » du neurone orange se produit grâce à « l’agrégation » de tous les neurones verts de la couche d’entrée. Ce processus est répliqué sur tous les neurones et sur toutes les couches jusqu'à ce que nous atteignions le neurone de sortie rouge final.



Et si nous remplacions le neurone orange par le neurone rouge, c'est-à-dire que nous supprimions la couche cachée et connections directement le neurone rouge aux neurones verts ?



Nous obtiendrons ce qui suit :

Pour cette question, nous supposerons « l'architecture simpliste » susmentionnée et le résultat peut également être généralisé à l'architecture complète.


Présentons maintenant quelques mathématiques étape par étape.


Ce que nous voyons ci-dessus est l'équation de base de « mise à jour du poids » pour un réseau neuronal. J'ai supprimé les hyperparamètres supplémentaires tels que le facteur d'apprentissage et le sous-échantillonnage (min-batch), etc. w_k est le vecteur de poids et les poids sont les « paramètres » de notre modèle de réseau neuronal. w_k comprend des poids individuels rassemblés dans un vecteur colonne. Ces poids sont associés aux entrées du modèle (c'est-à-dire les neurones verts de notre architecture). Nous avons une fonction de coût C_i où i = 1 à n sont le nombre d'instances de données dans notre échantillon. La fonction de coût C est « l'erreur » entre la sortie réelle y et la sortie du réseau neuronal (neurone rouge). Chaque instance de données produira une sortie prévue par rapport à une sortie réelle. Il y aura donc un coût ou une erreur pour chaque instance de données. L'objectif du modèle est de minimiser cette fonction de coût en moyenne sur l'ensemble de l'ensemble de données. Et comme nous le savons, l’étape de minimisation consiste à prendre une dérivée par rapport aux paramètres du modèle (poids). Nous faisons cela en utilisant la dérivée partielle du vecteur w_k. Tout cela signifie que le coût C sera une expression/agrégation de poids w_1 à w_q et nous différencierons chaque poids w et le collecterons dans un vecteur. C’est ce qu’on appelle le « vecteur gradient » négatif. Il est utilisé pour mettre à jour le vecteur de poids de la k-ème itération à la (k+1)ème itération. La méthodologie est la descente de gradient stochastique, mais nous la laisserons de côté pour cet article.


En un mot, le réseau de neurones apprend par une mise à jour des poids via le vecteur gradient négatif moyenné sur tous les échantillons et calculé pour w_k. Cela nous aide à passer à la minimisation de la fonction de coût et aide le réseau à apprendre et à améliorer sa précision. Il est évident que si les mises à jour des poids n’ont pas lieu, parce que le gradient négatif se rapproche de zéro, l’apprentissage s’arrête. Cela ne veut pas nécessairement dire que nous avons atteint le minimum ! Parce que notre fonction de coût est très compliquée et que nous devons trouver un minimum dans un espace multidimensionnel. Par conséquent, il pourrait y avoir de nombreux minima locaux où le gradient est nul et où le réseau cesse d’apprendre. Quoi qu'il en soit, nous n'avons pas à nous en soucier pour ce problème.


Regardons l'expression suivante :


Cette expression définit z_i comme une somme pondérée des entrées x_ji. Notez que ces entrées sont les neurones verts de notre architecture. Comme nous n'avons pas de couche cachée, nous combinons les entrées x_ji et les poids w_j et ajoutons un terme de biais pour obtenir z_i qui est ce qui est représenté par les flèches de connexion des neurones verts au neurone rouge dans notre architecture. Puisque nous avons q entrées, nous avons x_j et w_j où j = 1 à q

Mais nous ne transmettons pas z_i au neurone rouge. Nous lui appliquons une « fonction d’activation ». Cette fonction d'activation peut être différente pour différents réseaux de neurones. Pour les besoins de ce problème, nous supposons que la fonction d'activation est « Sigmoïde » ou « logistique ». Je supposerai ici que le lecteur est conscient de cette fonction et j'irai plus loin.


Vient ensuite notre principal énoncé du problème : comment définissons-nous la fonction de coût (C) ? Il est bien connu que pour la classification binaire, la fonction de coût est « l'entropie croisée », mais la question ici est de savoir pourquoi elle ne peut pas être « quadratique ».


Définissons les expressions des deux fonctions de coût :


Fonction de coût quadratique – Fonction de coût d’entropie croisée –


Bien que la fonction de coût quadratique soit simple (pensez à la minimisation des moindres carrés entre la sortie réelle y_i et la sortie prédite a_i), nous pouvons offrir quelques explications sur la fonction de coût d'entropie croisée. Cela s’apparente à une log-vraisemblance négative dans nos modèles de régression. Notez qu'il y a un signe négatif en dehors des parenthèses, qui est utilisé pour garder le coût positif (car a_i sera compris entre 0 et 1 - une sortie du sigmoïde, donc le terme entre parenthèses sera toujours négatif). Notez également que lorsque a_i se rapproche vraiment de y_i, le coût devient très proche de zéro. En effet, lorsque y_i = 1 et a_i ~ 1, ln(a_i) sera d'environ 0. De même, lorsque y_i= 0 et a_i ~ 0, ln(1-a_i) sera d'environ 0. Ainsi, cette fonction conserve le coût positif et minime lorsque le modèle prédit bien. Cependant, on peut en dire autant de la fonction de coût quadratique. Mais nous ne l'utilisons pas. Pourquoi? Voici l'explication


Nous revenons à l’équation de base de mise à jour du poids que nous avons vue plus tôt et y saisissons la fonction de coût quadratique. Nous obtenons ce qui suit

Maintenant, pour simplifier les choses, nous ne considérerons qu'un seul point de données, c'est-à-dire i=1 et n=1. Et on différencie partiellement pour chaque poids w_j. Nous obtenons ce qui suit :

Rappelons que puisque i = 1, on a

En substituant la valeur de z, on obtient

C'est-à-dire que notre vecteur gradient qui est responsable de la mise à jour des poids du réseau aura une dérivée de la fonction sigmoïde lorsque nous utiliserons une fonction de coût quadratique.


Regardons maintenant le comportement de la dérivée de la fonction sigmoïde :


D'après le graphique ci-dessus, il est clair que la dérivée, représentant la pente de la fonction sigmoïde, se rapproche de 0 dès que l'entrée z devient grande ! Qu'est-ce que cela signifie? Cela signifie que le vecteur gradient sera nul lorsque l'entrée d'activation z est grande. Par conséquent, le réseau cessera d’apprendre car les poids ne seront pas mis à jour. Rappelons que cela ne veut pas dire que nous avons atteint un minimum. Cela signifie que nous sommes coincés à un point indésirable et dans l'espace des fonctions qui pourrait être loin de la valeur minimale. C’est ce qu’on appelle le « ralentissement de l’apprentissage ». Cependant, cela ne se produit PAS avec une fonction de coût d’entropie croisée.


Nous effectuons la même substitution en utilisant la fonction de coût d'entropie croisée et obtenons ce qui suit :

Il est intéressant de noter que le terme :

se produit également dans le gradient du coût quadratique. Il existe cependant une astuce que nous allons utiliser pour le simplifier. Le gradient de la fonction sigmoïde peut être exprimé comme suit

Nous substituons cela dans notre expression originale et obtenons ce qui suit :

C'est-à-dire que notre vecteur gradient qui est responsable de la mise à jour des poids du réseau n'a pas de dérivée de la fonction sigmoïde lorsque nous utilisons une fonction de coût d'entropie croisée. Il n’y a donc aucun ralentissement de l’apprentissage avec cette fonction de coût.


On juxtapose à nouveau les dégradés pour un meilleur rendu :

Cela répond à notre question initiale : nous n'utilisons pas la fonction de coût quadratique car elle entraîne un ralentissement de l'apprentissage.


Notez que l'analyse ci-dessus a été effectuée uniquement sur la couche de sortie (d'un neurone), cependant, elle peut également être généralisée à un réseau neuronal général !