Articles

Comprendre les réseaux de neurones 2: Les mathématiques des réseaux de neurones en 3 équations

Dans la première partie de cette série, nous avons discuté du concept de réseau de neurones, ainsi que des mathématiques décrivant un seul neurone. Il y a cependant beaucoup de neurones dans une seule couche et beaucoup de couches dans l’ensemble du réseau, nous devons donc trouver une équation générale décrivant un réseau de neurones.

Neurone unique

La première chose que notre réseau doit faire est de transmettre des informations à travers les couches. Nous savons déjà comment faire cela pour un seul neurone:

La sortie du neurone est la fonction d’activation d’une somme pondérée de l’entrée du neurone

2 neurones

Maintenant, nous pouvons appliquer la même logique lorsque nous avons 2 neurones dans la deuxième couche.

Dans cet example, chaque neurone de la première couche est connecté à chaque neurone de la deuxième couche, ce type de réseau est appelé réseau entièrement connecté. Le neurone Y1 est connecté aux neurones X1 et X2 avec les poids W11 et W12 et le neurone Y2 est connecté aux neurones X1 et X2 avec les poids W21 et W22. Dans cette notation, le premier indice du poids indique le neurone de sortie et le deuxième indice indique le neurone d’entrée, donc par exemple W12 est le poids sur la connexion de X2 à Y1. Maintenant, nous pouvons écrire les équations pour Y1 et Y2:

Maintenant, cette équation peut être exprimée en utilisant la multiplication matricielle.

visualisation de la multiplication matricielle à partir de http://matrixmultiplication.xyz/

Si vous êtes nouveau dans la multiplication matricielle et l’algèbre linéaire et que cela vous rend confus, je recommande vivement les séries d’algèbre linéaire 3blue1brown.

Maintenant, nous pouvons écrire la sortie du premier neurone comme Y1 et la sortie du deuxième neurone comme Y2. Cela nous donne l’équation suivante:

Calque entier

À partir de cela, nous pouvons abstraire la règle générale pour la sortie du calque:

Maintenant, dans cette équation, toutes les variables sont des matrices et le signe de multiplication représente la multiplication de la matrice.

L’utilisation de la matrice dans l’équation nous permet de l’écrire sous une forme simple et la rend vraie pour n’importe quel nombre d’entrées et de neurones dans la sortie.

Dans la programmation des réseaux de neurones, nous utilisons également la multiplication matricielle car cela nous permet de rendre le calcul parallèle et d’utiliser du matériel efficace, comme des cartes graphiques.

Maintenant, nous avons une équation pour une seule couche mais rien ne nous empêche de prendre la sortie de cette couche et de l’utiliser comme entrée à la couche suivante. Cela nous donne l’équation générique décrivant la sortie de chaque couche de réseau neuronal. Une autre chose, nous devons ajouter, est la fonction d’activation, je vais vous expliquer pourquoi nous avons besoin de fonctions d’activation dans la prochaine partie de la série, pour l’instant, vous pouvez considérer comme un moyen de mettre à l’échelle la sortie, afin qu’elle ne devienne pas trop grande ou trop insignifiante.

Avec cette équation, nous pouvons propager l’information à travers autant de couches du réseau de neurones que nous le souhaitons. Mais sans aucun apprentissage, le réseau de neurones n’est qu’un ensemble de multiplications matricielles aléatoires qui ne signifient rien.

Alors, comment enseigner notre réseau de neurones? Tout d’abord, nous devons calculer l’erreur du réseau de neurones et réfléchir à la manière de transmettre cette erreur à toutes les couches.

2: Passer la propagation arrière d’erreur

Pour comprendre l’algorithme de propagation d’erreur, nous devons revenir à un exemple avec 2 neurones dans la première couche et 1 neurone dans la deuxième couche.

Supposons que la couche Y soit la couche de sortie du réseau et que le neurone Y1 devrait renvoyer une valeur. Maintenant, cette valeur peut être très différente de la valeur attendue, il y a donc une erreur sur le neurone Y1. Nous pouvons considérer cette erreur comme la différence entre la valeur renvoyée et la valeur attendue. Nous connaissons l’erreur sur Y1 mais nous devons transmettre cette erreur aux couches inférieures du réseau car nous voulons que toutes les couches apprennent, pas seulement la couche Y. Alors, comment passer cette erreur à X1 et X2? Eh bien, une approche naïve consisterait à diviser uniformément l’erreur Y1, puisqu’il y a 2 neurones dans la couche X, nous pourrions dire que l’erreur X1 et X2 est égale à l’erreur Y1 conçue par 2.

Il y a cependant un problème majeur avec cette approche: les neurones ont des poids différents qui leur sont connectés. Si le poids connecté au neurone X1 est beaucoup plus grand que le poids connecté au neurone X2, l’erreur sur Y1 est beaucoup plus influencée par X1 puisque Y1 = (X1 * W11 + X2 * X12). Donc, si W11 est plus grand que W12, nous devrions transmettre plus de l’erreur Y1 au neurone X1 car c’est le neurone qui y contribue.

Maintenant que nous l’avons observé, nous pouvons mettre à jour notre algorithme pour ne pas diviser l’erreur uniformément mais pour la diviser en fonction de la ration du poids du neurone d’entrée à tous les poids arrivant au neurone de sortie.

mettez à jour le poids

Maintenant, nous pouvons aller plus loin et analyser l’exemple où il y a plus d’un neurone dans la couche de sortie.

Dans cet exemple, nous voyons par exemple que le neurone X1 contribue non seulement à l’erreur de Y1 mais également à l’erreur de Y2 et cette erreur est toujours proportionnelle à ses poids. Donc, dans l’équation décrivant l’erreur de X1, nous avons besoinavoir à la fois l’erreur de Y1 multipliée par le rapport des poids et l’erreur de Y2 multipliée par le rapport des poids venant à Y2.

Cette équation peut également s’écrire sous forme de multiplication matricielle.

Maintenant, il y a une autre astuce que nous pouvons faire pour simplifier cette citation sans perdre beaucoup d’informations pertinentes. Le dénominateur du rapport pondéral, agit comme un facteur de normalisation, donc nous ne nous en soucions pas tant que ça, en partie parce que l’équation finale nous aura d’autres moyens de réguler l’apprentissage du réseau de neurones.

C’est aussi une observation de plus que nous pouvons faire. Nous pouvons voir que la matrice avec poids dans cette équation est assez similaire à la matrice de l’algorithme de feed forward. La différence est que les lignes et les colonnes sont commutées. En algèbre, nous appelons cette transposition de la matrice.

Comme il n’est pas nécessaire d’utiliser 2 variables différentes, nous pouvons simplement utiliser la même variable de l’algorithme feed forward. Cela nous donne l’équation générale de l’algorithme de rétropropagation

Notez que dans l’algorithme de feed-forward, nous allions former la première couche à la dernière mais dans la propagation arrière, nous allons former la dernière couche du réseau à la première car pour calculer l’erreur dans une couche donnée, nous avons besoin d’informations sur l’erreur dans la couche suivante.

Articles d’IA Tendance:

1. Comment j’ai utilisé l’apprentissage automatique comme source d’inspiration pour les peintures physiques

2. MS ou Emploi de démarrage — Quelle voie prendre pour construire une carrière dans le Deep Learning?

3. TOP 100 des principaux articles relatifs à l’intelligence artificielle

4. Conférence sur l’intelligence artificielle

Maintenant que nous savons comment transmettre les informations et transmettre l’erreur en arrière, nous pouvons utiliser l’erreur de chaque couche pour mettre à jour le poids.

3: Mise à jour des poids

Maintenant que nous savons quelles erreurs le réseau de neurones fait à chaque couche, nous pouvons enfin commencer à enseigner à notre réseau à trouver la meilleure solution au problème.

Mais quelle est la meilleure solution?

L’erreur nous informe de l’erreur de nos solutions, donc naturellement la meilleure solution serait celle où la fonction d’erreur est minimale.

La fonction d’erreur dépend des poids du réseau, nous voulons donc trouver de telles valeurs de poids qui aboutissent au minimum global dans la fonction d’erreur. Notez que cette image est juste à des fins de visualisation. Dans les applications de la vie réelle, nous avons plus de 1 poids, de sorte que la fonction d’erreur est une fonction de grande dimension.

Mais comment trouver le minimum de cette fonction? Une idée simple ici est de commencer par des poids aléatoires, de calculer la fonction d’erreur pour ces poids, puis de vérifier la pente de cette fonction pour descendre.

Mais comment pouvons-nous connaître la pente de la fonction?

Nous pouvons utiliser à nouveau l’algèbre linéaire et tirer parti du fait que la dérivée d’une fonction en un point donné est égale à la pente d’une fonction en ce point. Nous pouvons écrire cette dérivée de la manière suivante:

Où E est notre fonction d’erreur et W représente les poids. Cette notation nous informe que nous voulons trouver la dérivée de la fonction d’erreur par rapport au poids. Nous utilisons n + 1 avec l’erreur, car dans notre notation, la sortie du réseau de neurones après les poids Wn est sur + 1.

On peut alors utiliser cette dérivée pour mettre à jour le poids:

Cela représente la « descente » à chaque itération d’apprentissage (époque), nous mettons à jour le poids en fonction de la pente de la dérivée de la fonction d’erreur.

Il y a encore une chose dont nous avons besoin avant de présenter l’équation finale: le taux d’apprentissage. Le taux d’apprentissage régit les grandes étapes que nous franchissons lors de la descente.

Comme vous pouvez le voir avec un taux d’apprentissage plus élevé, nous prenons de plus grandes mesures. Cela signifie que nous pouvons atteindre l’optimum de la fonction plus rapidement, mais il y a aussi une grande chance que nous le manquions.

Avec le taux d’apprentissage plus faible, nous prenons des mesures plus petites, ce qui nécessite plus d’époques pour atteindre le minimum de la fonction, mais il y a moins de chances que nous le manquions.

C’est pourquoi, en pratique, nous utilisons souvent un taux d’apprentissage qui dépend des étapes précédentes, par exemple. s’il y a une forte tendance à aller dans une direction, nous pouvons prendre des mesures plus importantes (taux d’apprentissage plus élevé), mais si la direction continue de changer, nous devrions prendre des mesures plus petites (taux d’apprentissage plus faible) pour rechercher le minimum mieux. Dans notre exemple, cependant, nous allons adopter l’approche simple et utiliser une valeur de taux d’apprentissage fixe. Cela nous donne l’équation suivante.

Le taux d’apprentissage (Lr) est un nombre de rage 0 – 1. Plus il est petit, plus la variation des poids est faible. Si l’apprentissage est proche de 1. nous utilisons la pleine valeur de la dérivée pour mettre à jour les poids et si elle est proche de 0, nous n’en utilisons qu’une petite partie. Cela signifie que le taux d’apprentissage, comme son nom l’indique, régule combien le réseau « apprend » en une seule itération.

La mise à jour des poids était l’équation finale dont nous avions besoin dans notre réseau de neurones. Ce sont les équations qui sont responsables de l’apprentissage réel du réseau et de son enseignement pour donner une sortie significative au lieu de valeurs aléatoires.

Tout mettre ensemble

Feed-forward

Rétropropagation

Mise à jour des poids

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.