Exemple de rétropropagation d’erreur. Méthode de rétropropagation

Algorithme rétropropagation Les erreurs sont l'une des méthodes de formation des réseaux neuronaux à action directe multicouche, également appelés perceptrons multicouches. Les perceptrons multicouches ont été utilisés avec succès pour résoudre de nombreux problèmes complexes.

La formation avec l'algorithme de rétropropagation implique deux passages à travers toutes les couches du réseau : avant et arrière. Lors du passage aller, le vecteur d'entrée est transmis à la couche d'entrée du réseau neuronal, puis se propage à travers le réseau de couche en couche. En conséquence, un ensemble de signaux de sortie est généré, qui constitue la réponse réelle du réseau à une image d’entrée donnée. Lors du passage vers l'avant, tous les poids synaptiques du réseau sont fixes. Lors du passage en arrière, tous les poids synaptiques sont ajustés selon une règle de correction d'erreur, à savoir : la sortie réelle du réseau est soustraite de la sortie souhaitée, ce qui entraîne un signal d'erreur. Ce signal se propage ensuite dans tout le réseau dans le sens opposé au sens des connexions synaptiques. D'où le nom - algorithme de rétropropagation. Les poids synaptiques sont ajustés pour rapprocher le plus possible la sortie du réseau de celle souhaitée.

Examinons plus en détail le fonctionnement de l'algorithme. Supposons que vous deviez entraîner le réseau neuronal suivant à l'aide de l'algorithme de rétropropagation :

Les symboles suivants sont utilisés dans la figure :

Comme fonction d'activation dans les perceptrons multicouches, on utilise généralement une fonction d'activation sigmoïde, notamment logistique :

où est le paramètre de pente de la fonction sigmoïde. En modifiant ce paramètre, vous pouvez construire des fonctions avec différentes pentes. Réservons que pour tous les arguments ultérieurs nous utiliserons précisément la fonction d'activation logistique, représentée uniquement par la formule ci-dessus.

Le sigmoïde réduit la plage de variation de sorte que la valeur se situe entre zéro et un. Les réseaux de neurones multicouches ont un plus grand pouvoir de représentation que les réseaux de neurones monocouches uniquement en présence de non-linéarité. La fonction de compression fournit la non-linéarité requise. En réalité, de nombreuses fonctions pourraient être utilisées. L'algorithme de rétropropagation exige seulement que la fonction soit différentiable partout. Le sigmoïde satisfait à cette exigence. Il présente l’avantage supplémentaire d’un contrôle automatique du gain. Pour les signaux faibles (c'est-à-dire proches de zéro), la courbe entrée-sortie présente une forte pente, ce qui donne un gain important. À mesure que l’amplitude du signal augmente, le gain diminue. De cette manière, les gros signaux sont acceptés par le réseau sans saturation, et les petits signaux traversent le réseau sans atténuation excessive.

Le but de la formation en réseau L'algorithme de rétropropagation est un ajustement de ses poids de telle sorte que l'application d'un certain ensemble d'entrées conduit à l'ensemble de sorties requis. Par souci de concision, ces ensembles d’entrées et de sorties seront appelés vecteurs. Pendant la formation, on suppose que pour chaque vecteur d'entrée, il existe un vecteur cible associé, qui spécifie la sortie requise. Ensemble, ils forment un duo d'entraînement. Le réseau est formé sur de nombreuses paires.

Suivant:

  1. Initialisez les poids synaptiques avec de petites valeurs aléatoires.
  2. Sélectionnez la paire d'entraînement suivante dans l'ensemble d'entraînement ; soumettre le vecteur d’entrée à l’entrée réseau.
  3. Calculez la sortie du réseau.
  4. Calculez la différence entre la sortie du réseau et la sortie requise (vecteur cible de la paire de formation).
  5. Ajustez les pondérations du réseau pour minimiser les erreurs (comme voir ci-dessous).
  6. Répétez les étapes 2 à 5 pour chaque vecteur de l’ensemble d’apprentissage jusqu’à ce que l’erreur sur l’ensemble de l’ensemble atteigne un niveau acceptable.

Les opérations effectuées par les étapes 2 et 3 sont similaires à celles effectuées lorsque le réseau est déjà formé, c'est-à-dire un vecteur d'entrée est donné et la sortie résultante est calculée. Les calculs sont effectués couche par couche. Sur la fig. 1, les sorties des neurones de la couche sont d'abord calculées (la couche est l'entrée, ce qui signifie qu'aucun calcul n'y a lieu), puis elles sont utilisées comme entrées de la couche, les sorties des neurones de la couche sont calculées , qui forment le vecteur de sortie du réseau. Les étapes 2 et 3 forment ce que l'on appelle un « passage direct » lorsque le signal se propage à travers le réseau, de l'entrée à la sortie.

Les étapes 4 et 5 constituent un "backpass", où le signal d'erreur calculé est propagé à travers le réseau et utilisé pour ajuster les poids.

Examinons de plus près l'étape 5 : ajuster les pondérations du réseau. Deux cas décrits ci-dessous doivent être soulignés ici.

Cas 1. Ajustement des poids synaptiques de la couche de sortie

Par exemple, pour le modèle de réseau neuronal de la Fig. 1, il s'agira de poids portant les désignations suivantes : et . Décidons que l'indice désignera le neurone d'où sort le poids synaptique, et le neurone dans lequel il entre :

Introduisons la valeur , qui est égale à la différence entre les sorties requises et réelles, multipliée par la dérivée de la fonction d'activation logistique (voir la formule de la fonction d'activation logistique ci-dessus) :

Ensuite, les poids de la couche de sortie après correction seront égaux à :

Voici un exemple de calculs de poids synaptique :

Cas 2. Ajustement des poids synaptiques de la couche cachée

Pour le modèle de réseau neuronal de la Fig. 1, ce seront les poids correspondant aux couches et . Décidons que l'indice désignera le neurone d'où sort le poids synaptique, et le neurone dans lequel il entre (notons l'apparition d'une nouvelle variable).

Méthode de rétropropagation

La méthode de rétropropagation est une méthode de formation d'un perceptron multicouche, une des options d'apprentissage supervisé. La méthode a été décrite pour la première fois par Paul J. Verbos. Développé de manière significative en 1986 par David I. Rumelhart, J. E. Hinton et Ronald J. Williams. Il s'agit d'un algorithme de gradient itératif utilisé pour minimiser l'erreur de fonctionnement d'un perceptron multicouche et obtenir le résultat souhaité.

L'idée principale de cette méthode est de propager les signaux d'erreur depuis les sorties du réseau vers ses entrées, dans le sens opposé à la propagation directe des signaux en fonctionnement normal. Bartsev et Okhonin ont immédiatement proposé méthode générale(« principe de dualité »), applicable à une classe plus large de systèmes, y compris les systèmes retardés, les systèmes distribués, etc.

La méthode est une modification méthode classique descente de pente.

Algorithme de rétropropagation

Laissez-nous réseau multicouche propagation directe avec des coefficients de pondération aléatoires. Il existe un ensemble de formation composé de paires d'entrée réseau - sortie souhaitée. Nous désignons par Y la valeur réelle de sortie de notre réseau, qui au départ est quasiment aléatoire du fait du caractère aléatoire des coefficients de pondération.

La formation consiste à sélectionner des coefficients de pondération de manière à minimiser certaines fonctions objectifs. Comme fonction objectif Considérons la somme des carrés des erreurs de réseau à l'aide d'exemples de l'ensemble de formation.

où est la sortie réelle de la N-ème couche de sortie du réseau pour le p-ème neurone sur le j-ème exemple d'entraînement, la sortie souhaitée. Autrement dit, en minimisant cette fonctionnelle, nous obtenons une solution en utilisant la méthode moindres carrés.

Puisque les coefficients de pondération entrent dans la dépendance de manière non linéaire, nous utiliserons la méthode pour trouver le minimum descente la plus raide. C'est-à-dire qu'à chaque étape d'apprentissage nous modifierons les coefficients de pondération selon la formule

où est le coefficient de poids du j-ième neurone de la n-ième couche pour la communication avec i-ème neurone(n-1)ème couche.

Le paramètre est appelé paramètre de taux d’apprentissage.

Ainsi, il est nécessaire de déterminer les dérivées partielles de la fonction objectif E sur tous les coefficients de pondération du réseau. Selon les règles de différenciation fonction complexe

où est la sortie et est la somme pondérée des entrées du j-ième neurone de la n-ième couche. A noter que, connaissant la fonction d'activation, on peut calculer. Par exemple, pour un sigmoïde cette valeur sera égale à

Le troisième facteur / n'est rien de plus que la sortie du i-ième neurone de la (n-1)-ième couche, c'est-à-dire

Les dérivées partielles de la fonction objectif par rapport aux poids des neurones de la couche de sortie peuvent désormais être facilement calculées. En différenciant (1) par et en tenant compte de (3) et (5) nous aurons

Introduisons la notation

Puis pour les neurones de la couche de sortie

Pour les poids des neurones couches internes nous ne pouvons pas immédiatement écrire à quoi est égal le premier facteur de (4), mais il peut être représenté comme suit :

Notez que dans cette formule, les deux premiers facteurs ne sont rien de plus. Ainsi, en utilisant (9), il est possible d'exprimer les valeurs des neurones de la nième couche en termes de neurones de la (n+1)ième couche. Puisque pour la dernière couche il est facile de calculer par (8), il est possible d'utiliser la formule récursive

obtenez des valeurs pour tous les neurones de toutes les couches.

Enfin, la formule (2) de modification des coefficients de pondération peut s'écrire sous la forme

Ainsi, l'algorithme complet de formation d'un réseau neuronal à l'aide de l'algorithme de rétropropagation est construit comme suit.

Nous attribuons des coefficients de pondération aléatoires à tous les poids de réseau valeurs initiales. Dans ce cas, le réseau effectuera certaines transformation aléatoire les signaux d'entrée et les valeurs de la fonction objectif (1) seront grands.

Alimentez l’un des vecteurs d’entrée de l’ensemble d’entraînement vers l’entrée réseau. Calculez les valeurs de sortie du réseau, tout en mémorisant les valeurs de sortie de chacun des neurones.

Ajustez les pondérations du réseau :

Évaluation des performances du réseau

Dans les cas où il est possible d'évaluer les performances du réseau, la formation des réseaux de neurones peut être représentée comme un problème d'optimisation. Évaluer signifie indiquer quantitativement si le réseau résout bien ou mal les tâches qui lui sont assignées. A cet effet, une fonction d'évaluation est construite. En règle générale, cela dépend explicitement des signaux de sortie du réseau et implicitement (par le biais du fonctionnement) de tous ses paramètres. L'exemple d'évaluation le plus simple et le plus courant est la somme des carrés des distances entre les signaux de sortie du réseau et leurs valeurs requises :

où est la valeur requise du signal de sortie.

La méthode des moindres carrés n'est pas toujours meilleur choixévaluations. Une conception soignée de la fonction d'évaluation permet d'augmenter l'efficacité de la formation en réseau d'un ordre de grandeur, ainsi que d'obtenir Informations Complémentaires- « niveau de confiance » du réseau dans la réponse donnée.

Inconvénients de l'algorithme

Malgré de nombreux candidatures réussies la rétropropagation n’est pas une panacée. Ce qui pose le plus de problèmes, c'est le processus d'apprentissage indéfiniment long. DANS tâches complexes La formation du réseau peut prendre des jours, voire des semaines, ou il peut ne pas apprendre du tout. La raison peut être l’une de celles décrites ci-dessous.

Paralysie du réseau

Au cours du processus de formation du réseau, les valeurs de poids peuvent devenir très importantes à la suite d'une correction. grandes quantités. Cela peut entraîner le fonctionnement de tous ou de la plupart des neurones à un niveau très élevé. grandes valeurs OUT, dans la région où la dérivée de la fonction de compression est très petite. Puisque l’erreur renvoyée lors du processus d’apprentissage est proportionnelle à cette dérivée, le processus d’apprentissage peut pratiquement se figer. D'un point de vue théorique, ce problème est mal compris. Ceci est généralement évité en diminuant la taille du pas h, mais cela augmente le temps d'entraînement. Diverses heuristiques ont été utilisées pour prévenir ou guérir de la paralysie, mais pour l’instant elles ne peuvent être considérées que comme expérimentales.

Minimums locaux

La rétropropagation utilise une forme de descente de gradient, c'est-à-dire qu'elle descend le long de la surface d'erreur, ajustant continuellement les poids vers le minimum. La surface d'erreur d'un réseau complexe est très accidentée et se compose de collines, de vallées, de plis et de ravins dans un espace de grande dimension. Le réseau peut entrer dans minimum local(vallée peu profonde) alors qu'il y en a beaucoup plus à proximité profond et bas. À un point minimum local, toutes les directions pointent vers le haut et le réseau est incapable d’y échapper. La principale difficulté de la formation des réseaux de neurones réside précisément dans les méthodes de sortie des minima locaux : à chaque fois que l'on quitte un minimum local, le minimum local suivant est à nouveau recherché en utilisant la même méthode de rétropropagation d'erreur jusqu'à ce qu'il ne soit plus possible d'en sortir. .

Taille du pas

Un examen attentif de la preuve de convergence montre que les corrections de poids sont supposées infinitésimales. Il est clair que cela n’est pas réalisable en pratique, car cela conduit à un temps d’apprentissage interminable. La taille du pas doit être considérée comme finie. Si la taille du pas est fixe et très petite, alors la convergence est trop lente, mais si elle est fixe et trop grande, une paralysie ou une instabilité constante peut survenir. Augmentez efficacement le pas jusqu'à ce que le score cesse de s'améliorer dans ce sens anti-gradient et réduire si une telle amélioration ne se produit pas. P. D. Wasserman a décrit un algorithme de sélection adaptative des étapes qui ajuste automatiquement la taille des étapes pendant le processus d'apprentissage. Le livre de A. N. Gorban propose une technologie étendue pour optimiser l'apprentissage.

Il convient également de noter que le réseau peut être recyclé, ce qui est très probablement le résultat d'une conception erronée de sa topologie. Quand aussi grandes quantités neurones, la capacité du réseau à généraliser l’information est perdue. L'ensemble des images fournies pour la formation sera appris par le réseau, mais toute autre image, même très similaire, pourra être mal classée.

Environnement de développement et raisons de le choisir

L'application sera développée dans le langage de programmation C# avec le framework .NETFramework4.0 dans l'environnement de développement MicrosoftVisualStudio 2010. Les fragments de code nécessitant des calculs massifs sont développés en C++. MSVisualStudio 2010 inclut ensemble complet des fonctionnalités nouvelles et améliorées qui simplifient chaque étape du processus de développement, de la conception au déploiement.

MicrosoftVisualStudio 2010 Ultimate est un environnement d'outils intégré et une infrastructure de serveur qui simplifie le processus global de développement d'applications. Les applications métier sont créées à l’aide de processus efficaces, prévisibles et personnalisables. Des analyses détaillées augmentent la transparence et la traçabilité de tout cycle de vie candidatures. Tant lors de la création de nouvelles solutions que lors de la modification de solutions existantes, le développement utilisant des outils puissants le prototypage, la conception d'architecture et le développement qui permettent de développer des applications pour une variété de plates-formes et de technologies, telles que le cloud computing et le traitement parallèle. Capacités de coordination avancées activités conjointes ainsi que des outils de test et de débogage intégrés et innovants amélioreront la productivité des équipes et fourniront des solutions de haute qualité à faible coût.

Le développement d'applications dans MicrosoftVisualStudio2010 Ultimate en C# avec le framework .NETFramework4.0 est réalisé à l'aide d'une programmation orientée objet et d'une programmation visuelle.

Les objectifs de la rétropropagation sont simples : ajuster chaque poids proportionnellement à sa contribution à l'erreur globale. Si nous réduisons de manière itérative l’erreur de chaque poids, nous obtiendrons finalement un ensemble de poids permettant de faire de bonnes prédictions.

Mettre à jour une règle de chaîne

Peut être considéré comme une longue série d’équations imbriquées. Si c'est ainsi que vous envisagez la propagation vers l'avant, alors la rétropropagation n'est qu'une application règles de la chaîne(différenciation de fonctions complexes) pour trouver les dérivées des pertes par rapport à n'importe quelle variable dans une équation imbriquée. Compte tenu de la fonction de propagation vers l'avant :

F(x)=UNE(B(C(x)))

A, B et C se trouvent sur des calques différents. En utilisant la règle de la chaîne, nous pouvons facilement calculer la dérivée de f(x) par rapport à x :

F′(x)=f′(A)⋅A′(B)⋅B′(C)⋅C′(x)

Qu'en est-il de la dérivée par rapport à B? Pour trouver la dérivée par rapport à B, vous pouvez prétendre que B(C(x)) est une constante, remplacez-la par une variable d'espace réservé B, et continuez à chercher la dérivée par rapport à B standard.

F′(B)=f′(UNE)⋅UNE′(B)

Cette méthode simple s'étend à n'importe quelle variable d'une fonction et nous permet déterminer avec précision l'impact chaque variable au résultat global.

Application de la règle de la chaîne

Utilisons la règle de la chaîne pour calculer la dérivée de la perte par rapport à n'importe quel poids dans le réseau. La règle de chaînage nous aidera à déterminer dans quelle mesure chaque poids contribue à notre erreur globale et la direction dans laquelle chaque poids doit être mis à jour pour réduire l'erreur. Voici les équations dont vous avez besoin pour faire une prévision et calculer l’erreur ou la perte totale :

Étant donné un réseau constitué d'un neurone, perte totale Le réseau neuronal peut être calculé comme suit :

Coût=C(R(Z(XW)))

En utilisant la règle de la chaîne, nous pouvons facilement trouver la dérivée de la perte par rapport au poids W.

C′(W)=C′(R)⋅R′(Z)⋅Z′(W)=(y^−y)⋅R′(Z)⋅X

Maintenant que nous avons l'équation pour calculer la dérivée de la perte par rapport à n'importe quel poids, regardons l'exemple du réseau neuronal :

Quelle est la dérivée de la perte par rapport à Wo?

C′(WO)=C′(y^)⋅y^′(ZO)⋅Z′O(WO)=(y^−y)⋅R′(ZO)⋅H

Qu'en est-il Wh? Pour le savoir, nous revenons simplement sur notre fonction, en appliquant récursivement la règle de chaînage, jusqu'à ce que nous arrivions à une fonction qui a un élément Wh.

C′(Wh)=C′(y^)⋅O′(Zo)⋅Z′o(H)⋅H′(Zh)⋅Z′h(Wh)=(y^−y)⋅R′(Zo )⋅Wo⋅R′(Zh)⋅X

Et juste pour le plaisir, et si notre réseau avait 10 couches cachées. Quelle est la dérivée de la perte pour le premier poids w1 ?

C(w1)=(dC/dy^)⋅(dy^/dZ11)⋅(dZ11/dH10)⋅(dH10/dZ10)⋅(dZ10/dH9)⋅(dH9/dZ9)⋅(dZ9/dH8)⋅( dH8/dZ8)⋅(dZ8/dH7)⋅(dH7/dZ7)⋅(dZ7/dH6)⋅(dH6/dZ6)⋅(dZ6/dH5)⋅(dH5/dZ5)⋅(dZ5/dH4)⋅(dH4/ dZ4)⋅(dZ4/dH3)⋅(dH3/dZ3)⋅(dZ3/dH2)⋅(dH2/dZ2)⋅(dZ2/dH1)⋅(dH1/dZ1)⋅(dZ1/dW1)

Vous remarquez un motif ? La quantité de calcul requise pour calculer les pertes sur dérivés augmente à mesure que notre réseau s’approfondit. Notez également redondance dans nos calculs de dérivées. La dérivée de perte de chaque couche ajoute deux nouveaux éléments aux éléments déjà calculés par les couches situées au-dessus. Et s’il existait un moyen de sauvegarder notre travail et d’éviter ces calculs répétitifs ?

Sauvegarde du travail avec mémorisation

Mémorisation est un terme informatique qui a une signification simple : ne compte pas toujours les mêmes choses. En mémorisation, nous stockons les résultats précédemment calculés pour éviter de recalculer la même fonction. Ceci est utile pour accélérer les fonctions récursives, dont la rétropropagation. Faites attention au modèle dans les équations dérivées ci-dessous.

Chacune de ces couches recalcule les mêmes dérivées ! Au lieu d'écrire des équations dérivées longues pour chaque poids, nous pouvons utiliser la mémorisation pour sauvegarder notre travail lorsque nous renvoyons l'erreur via le réseau. Pour ce faire, nous définissons 3 équations (ci-dessous) qui expriment ensemble en forme abrégée tous les calculs nécessaires à la rétropropagation. Le calcul est le même, mais les équations fournissent un raccourci intéressant que nous pouvons utiliser pour suivre les calculs que nous avons déjà effectués et sauvegarder notre travail à mesure que nous remontons dans le réseau.

On calcule d'abord erreur de couche de sortie et transmettez le résultat au calque caché devant lui. Après avoir calculé l'erreur de la couche cachée, nous transmettons sa valeur à la couche cachée précédente. Et ainsi de suite. En remontant dans le réseau, nous appliquons la 3ème formule à chaque couche pour calculer la dérivée de la perte par rapport aux poids de cette couche. Cette dérivée nous dit dans quelle direction ajuster nos poids pour réduire les pertes globales.

Note: terme erreur de couche fait référence à la dérivée des pertes par rapport à entrée à couche. Il répond à la question : comment la sortie de la fonction de perte change-t-elle lorsque l'entrée de cette couche change ?

Erreur de couche de sortie

Pour calculer l'erreur de la couche de sortie, il faut trouver la dérivée de la perte par rapport à l'entrée de la couche de sortie, Zo. Cela répond à la question : comment les poids de la dernière couche affectent-ils l'erreur globale du réseau ? Alors la dérivée est :

C′(Zo)=(y^−y)⋅R′(Zo)

Pour faciliter l'enregistrement, les praticiens MO remplace généralement la séquence (y^−y)∗R"(Zo) terme Eo. Notre formule pour l’erreur de la couche de sortie est donc :

Eo=(y^−y)⋅R′(Zo)

Erreur de couche cachée

Pour calculer l'erreur de la couche cachée, vous devez trouver la dérivée de la perte par rapport à l'entrée de la couche cachée, Zh.

Eh=Eo⋅Wo⋅R′(Zh)

Cette formule est la base de la rétropropagation. Nous calculons l'erreur de la couche actuelle et transmettons l'erreur pondérée à la couche précédente, poursuivant le processus jusqu'à ce que nous atteignions notre première couche cachée. En cours de route, nous mettons à jour les poids en utilisant la dérivée de la perte par rapport à chaque poids.

Dérivée de perte par rapport à n'importe quel poids

Revenons à notre formule de dérivée des pertes par rapport au poids de la couche de sortie Wo.

C′(WO)=(y^−y)⋅R′(ZO)⋅H

Nous savons que nous pouvons remplacer la première partie par une équation pour l'erreur de la couche de sortie Eh. H représente l'activation de la couche cachée.

C′(Wo)=Eo⋅H

Ainsi, pour trouver la dérivée de la perte par rapport à n'importe quel poids de notre réseau, nous multiplions simplement l'erreur de la couche correspondante par son entrée (la sortie de la couche précédente).

C′(w)=CurrentLayerError⋅CurrentLayerInput

Note: entrée fait référence à l'activation de la couche précédente, et non à l'entrée pondérée, Z.

Pour résumer

Voici les 3 dernières équations qui forment ensemble la base de la rétropropagation.

Voici le processus visualisé à l'aide de notre exemple de réseau neuronal ci-dessus :

Rétropropagation : exemple de code

déf relu_prime(z): si z > 0 : retour 1 retour 0 déf coût(yChapeau, y) : retour 0,5 * (yChapeau - y)**2 déf cost_prime(yHat, y) : retour yChapeau-y déf backprop(x, y, Wh, Wo, lr) : yHat = feed_forward(x, Wh, Wo) # Erreur de couche Eo = (yHat - y) * relu_prime(Zo) Eh = Eo * Wo * relu_prime(Zh) # Dérivée du coût pour les poids dWo = Eo * H dWh = Eh * x # Mettre à jour les poids Wh -= lr * dWh Wo -= lr * dWo

Prudnikov Ivan Alekseevich
MIRÉA(MTU)

Le sujet des réseaux de neurones a déjà été abordé plus d'une fois dans de nombreux magazines, mais aujourd'hui, je voudrais présenter aux lecteurs l'algorithme de formation d'un réseau de neurones multicouche à l'aide de la méthode de rétropropagation et proposer une implémentation de cette méthode.

Je voudrais tout de suite faire une réserve que je ne suis pas un expert dans le domaine des réseaux de neurones, j'attends donc des lecteurs critique constructive, commentaires et ajouts.

Partie théorique

Ce matériel suppose une familiarité avec les bases des réseaux de neurones, mais je pense qu'il est possible d'initier le lecteur au sujet sans épreuves inutiles sur la théorie des réseaux de neurones. Ainsi, pour ceux qui entendent pour la première fois l'expression « réseau de neurones », je propose de percevoir un réseau de neurones comme un graphe orienté pondéré dont les nœuds (neurones) sont disposés en couches. De plus, un nœud d’une couche a des connexions avec tous les nœuds de la couche précédente. Dans notre cas, un tel graphe aura des couches d'entrée et de sortie, dont les nœuds agissent respectivement comme entrées et sorties. Chaque nœud (neurone) a une fonction d'activation - une fonction chargée de calculer le signal à la sortie du nœud (neurone). Il existe également le concept de déplacement, qui est un nœud dont la sortie apparaît toujours comme un seul. Dans cet article, nous examinerons le processus d'apprentissage d'un réseau neuronal qui suppose la présence d'un « enseignant », c'est-à-dire un processus d'apprentissage dans lequel l'apprentissage se produit en fournissant au réseau une séquence d'exemples de formation avec des réponses correctes.
Comme pour la plupart des réseaux de neurones, notre objectif est d'entraîner le réseau de manière à atteindre un équilibre entre la capacité du réseau à produire la réponse correcte aux données d'entrée utilisées lors de l'entraînement (mémorisation) et la capacité à produire la sortie correcte dans réponse aux données d'entrée similaire, mais pas identique à celles qui ont été utilisées dans la formation (principe de généralisation). La formation du réseau utilisant la méthode de rétropropagation comprend trois étapes : l'alimentation des données vers l'entrée, suivie de la propagation des données vers les sorties, le calcul et la rétropropagation de l'erreur correspondante et l'ajustement des poids. Après formation, il est uniquement censé fournir des données à l'entrée du réseau et les diffuser vers les sorties. De plus, si la formation en réseau peut être assez un long processus, Que calcul direct les résultats d’un réseau formé se produisent très rapidement. De plus, il existe de nombreuses variantes de la méthode de rétropropagation conçues pour augmenter la vitesse du processus d’apprentissage.
Il convient également de noter qu'un réseau neuronal monocouche est considérablement limité quant aux modèles de données d'entrée qu'il peut apprendre, tandis qu'un réseau multicouche (avec une ou plusieurs couches cachées) ne présente pas un tel inconvénient. Ensuite, une description d'un réseau neuronal standard avec rétropropagation sera donnée.

Architecture

La figure 1 montre un réseau neuronal multicouche avec une couche de neurones cachés (éléments Z).

Les neurones représentant les sorties du réseau (notés Y) et les neurones cachés peuvent avoir un biais (comme le montre l'image). Le décalage correspondant à la sortie Y k est noté w ok , l'élément caché Z j - V oj . Ces décalages servent de poids sur les connexions émanant des neurones, dont la sortie est toujours 1 (ils sont représentés sur la figure 1, mais ne sont généralement pas explicitement affichés, implicitement). De plus, sur la figure 1, les flèches montrent le mouvement des informations pendant la phase de propagation des données depuis les entrées vers les sorties. Durant le processus d’apprentissage, les signaux se propagent dans la direction opposée.

Description de l'algorithme

L'algorithme présenté ci-dessous est applicable à un réseau de neurones avec une couche cachée, ce qui constitue une situation valable et adéquate pour la plupart des applications. Comme mentionné précédemment, la formation du réseau comprend trois étapes : transmettre les données de formation aux entrées du réseau, rétropropager l'erreur et ajuster les pondérations. Lors de la première étape, chaque neurone d'entrée X i reçoit un signal et le diffuse à chacun des neurones cachés Z 1, Z 2..., Z p. Chaque neurone caché calcule alors le résultat de sa fonction d'activation (fonction réseau) et envoie son signal Z j à tous les neurones de sortie. Chaque neurone de sortie Yk calcule à son tour le résultat de sa fonction d'activation Yk, qui n'est rien de plus que la sortie de ce neurone pour les données d'entrée correspondantes. Pendant le processus de formation, chaque neurone à la sortie du réseau compare la valeur Y k calculée avec la valeur t k (valeur cible) fournie par l'enseignant, déterminant ainsi la valeur d'erreur correspondante pour un modèle d'entrée donné. Sur la base de cette erreur, σ k (k = 1,2,...m) est calculé. σ k est utilisé lors de la propagation de l'erreur de Y k à tous les éléments de réseau de la couche précédente (neurones cachés connectés à Y k), et également plus tard lors de la modification des poids des connexions entre les neurones de sortie et les neurones cachés. De même, σj (j = 1,2,...p) est calculé pour chaque neurone caché Z j . Bien qu’il ne soit pas nécessaire de propager l’erreur à la couche d’entrée, σj est utilisé pour modifier les poids des connexions entre les neurones de la couche cachée et les neurones d’entrée. Une fois que tous les σ ont été déterminés, les poids de toutes les connexions sont ajustés simultanément.

Désignations :

L'algorithme de formation du réseau utilise la notation suivante :

X Vecteur d'entrée des données d'entraînement X = (X 1 , X 2 ,...,X i ,...,X n).
t Vecteur de valeurs de sortie cibles fournies par l'enseignant t = (t 1 , t 2 ,...,t k ,...,t m)
σ k Composante de l'ajustement des poids de connexion w jk correspondant à l'erreur du neurone de sortie Y k ; également des informations sur l'erreur du neurone Y k , qui sont distribuées aux neurones de la couche cachée qui sont connectés à Y k .
σ j Composante de l'ajustement des poids de connexion v ij correspondant à l'information d'erreur propagée depuis la couche de sortie vers le neurone caché Z j.
un taux d'apprentissage.
X i Neurone à l'entrée d'indice i. Pour les neurones d'entrée, les signaux d'entrée et de sortie sont les mêmes - X i .
v oj Déplacement du neurone caché j.
Z j Neurone caché j ; La valeur totale fournie à l'entrée de l'élément caché Z j est notée Z_in j : Z_in j = v oj +∑x i *v ij
Le signal de sortie Z j (le résultat de l'application de la fonction d'activation à Z_in j) est noté Z j : Z j = f (Z_in j)
w ok Déplacement du neurone en sortie.
Y k Neurone de sortie sous l'indice k ; La valeur totale fournie à l'entrée de l'élément de sortie Y k est notée Y_in k : Y_in k = w ok + ∑ Z j *w jk . Le signal de sortie Y k (résultat de l'application de la fonction d'activation à Y_in k) est désigné Y k :

Fonction d'activation

La fonction d'activation dans l'algorithme de rétropropagation doit avoir plusieurs caractéristiques importantes: continuité, différentiabilité et être monotone non décroissant. De plus, dans un souci d’efficacité informatique, il est souhaitable que sa dérivée soit facilement trouvée. Souvent, la fonction d’activation est aussi une fonction saturée. L'une des fonctions d'activation les plus couramment utilisées est la fonction sigmoïde binaire avec une plage en (0, 1) et définie comme :

Une autre fonction d'activation largement utilisée est la sigmoïde bipolaire d'étendue (-1, 1) et définie comme :


Algorithme d'apprentissage

L'algorithme d'apprentissage ressemble à ceci :

Initialisation des poids (les poids de tous les liens sont initialisés à de petites valeurs aléatoires).

Tant que la condition de terminaison de l'algorithme est incorrecte, les étapes 2 à 9 sont exécutées.

Pour chaque paire (données, valeur cible), les étapes 3 à 8 sont effectuées.

Propagation des données des entrées vers les sorties :

Étape 3.
Chaque neurone d'entrée (X i, i = 1,2,..., n) envoie le signal reçu X i à tous les neurones de la couche suivante (cachée).

Chaque neurone caché (Z j , j = 1,2,...,p) additionne les signaux entrants pondérés : z_in j = v oj + ∑ x i *v ij et applique la fonction d'activation : z j = f (z_in j) Alors envoie le résultat à tous les éléments de la couche suivante (sortie).

Chaque neurone de sortie (Y k , k = 1,2,...m) additionne les signaux d'entrée pondérés : Y_in k = w ok + ∑ Z j *w jk et applique une fonction d'activation, calculant le signal de sortie : Y k = f (Y_in k).

Rétropropagation des erreurs :

Chaque neurone de sortie (Y k, k = 1,2,...m) reçoit une valeur cible - la valeur de sortie qui est correcte pour un signal d'entrée donné, et calcule l'erreur : σ k = (t k - y k)*f " ( y_in k), calcule également la quantité de modification du poids de connexion w jk : Δw jk = a * σ k * z j . De plus, calcule la quantité d'ajustement de biais : Δw ok = a*σ k et envoie σ k aux neurones de la couche précédente.

Chaque neurone caché (z j, j = 1,2,...p) additionne les erreurs entrantes (des neurones de la couche suivante) σ_in j = ∑ σ k * w jk et calcule la valeur de l'erreur en multipliant la valeur résultante par le dérivée de la fonction d'activation : σ j = σ_in j * f " (z_in j), calcule également la quantité par laquelle le poids de la connexion vij changera : Δv ij = a * σ j * x i. De plus, calcule le montant de l'ajustement du décalage : v oj = a * σ j

Étape 8. Changez les poids.

Chaque neurone de sortie (y k, k = 1,2,...,m) modifie les poids de ses connexions avec l'élément de biais et les neurones cachés : w jk (nouveau) = w jk (ancien) + Δw jk
Chaque neurone caché (z j, j = 1,2,...p) modifie les poids de ses connexions avec l'élément de biais et les neurones de sortie : v ij (nouveau) = v ij (ancien) + Δv ij

Vérification de la condition d'arrêt de l'algorithme.
La condition d'arrêt du fonctionnement de l'algorithme peut être soit l'erreur quadratique totale du résultat en sortie du réseau atteignant un minimum prédéterminé lors du processus d'apprentissage, soit l'achèvement d'un certain nombre d'itérations de l'algorithme. L'algorithme est basé sur une méthode appelée descente de gradient. Selon le signe, le gradient de la fonction (en dans ce cas la valeur de la fonction est l'erreur et les paramètres sont les poids des connexions dans le réseau) donne la direction dans laquelle les valeurs de la fonction augmentent (ou diminuent) le plus rapidement.

Erreurs des sorties du réseau vers ses entrées, dans le sens opposé à la propagation directe des signaux en fonctionnement normal. Bartsev et Okhonin ont immédiatement proposé une méthode générale (« principe de dualité »), applicable à une classe plus large de systèmes, incluant les systèmes à retard, les systèmes distribués, etc.

Pour pouvoir utiliser la méthode de rétropropagation, la fonction de transfert des neurones doit être différentiable. La méthode est une modification de la méthode classique de descente de gradient.

Fonctions d'activation sigmoïde

Les types de sigmoïdes suivants sont le plus souvent utilisés comme fonctions d'activation :

Fonction de Fermi (sigmoïde exponentielle) :

Sigmoïde rationnel :

Tangente hyperbolique :

,

où s est la sortie de l'additionneur de neurones et est une constante arbitraire.

Le calcul de la sigmoïde rationnelle nécessite le moins de temps CPU par rapport aux autres sigmoïdes. Pour calculer tangente hyperbolique nécessite le plus de cycles de processeur. Par rapport aux fonctions d’activation de seuil, les sigmoïdes sont calculées très lentement. Si, après la sommation dans la fonction seuil, vous pouvez immédiatement commencer la comparaison avec une certaine valeur (seuil), alors dans le cas d'une fonction d'activation sigmoïde, vous devez calculer la sigmoïde (passer du temps dans meilleur scénario en trois opérations : prendre le module, additionner et diviser), et ensuite seulement le comparer à une valeur seuil (par exemple zéro). Si nous supposons que toutes les opérations les plus simples sont calculées par le processeur à peu près en même temps, alors le fonctionnement de la fonction d'activation sigmoïde après la sommation (qui prendra le même temps) sera plus lent que la fonction d'activation de seuil d'un facteur de 1:4.

Fonction d'évaluation du réseau

Dans les cas où il est possible d'évaluer les performances du réseau, la formation des réseaux de neurones peut être représentée comme un problème d'optimisation. Évaluer signifie indiquer quantitativement si le réseau résout bien ou mal les tâches qui lui sont assignées. A cet effet, une fonction d'évaluation est construite. En règle générale, cela dépend explicitement des signaux de sortie du réseau et implicitement (par le biais du fonctionnement) de tous ses paramètres. L'exemple d'évaluation le plus simple et le plus courant est la somme des carrés des distances entre les signaux de sortie du réseau et leurs valeurs requises :

,

où est la valeur requise du signal de sortie.

Description de l'algorithme

Architecture Perceptron multicouche

L'algorithme de rétropropagation est appliqué à un perceptron multicouche. Un réseau comporte de nombreuses entrées, de nombreuses sorties et de nombreux nœuds internes. Renumérotons tous les nœuds (y compris les entrées et sorties) avec des numéros de 1 à N (numérotation continue, quelle que soit la topologie des couches). Désignons par le poids posé sur le bord reliant les i-ème et j-ème nœuds, et par la sortie du i-ème nœud. Si l'on connaît l'exemple de formation (les bonnes réponses du réseau,), alors la fonction d'erreur obtenue par la méthode des moindres carrés ressemble à ceci :

Comment modifier les poids ? Nous mettrons en œuvre la descente de gradient stochastique, c'est-à-dire que nous ajusterons les poids après chaque exemple d'entraînement et, ainsi, « nous déplacerons » dans l'espace multidimensionnel des poids. Pour « arriver » à l'erreur minimale, nous devons « évoluer » dans la direction opposée au gradient, c'est-à-dire qu'en fonction de chaque groupe de réponses correctes, ajouter à chaque poids

,

où est un multiplicateur qui spécifie la vitesse du « mouvement ».

La dérivée est calculée comme suit. Laissez d’abord entrer dans le neurone le poids qui nous intéresse. dernier niveau. Premièrement, nous notons que cela affecte la sortie du réseau uniquement dans le cadre de la somme, la somme étant reprise sur les entrées du j-ème nœud. C'est pourquoi

De même, cela affecte l’erreur globale uniquement dans la sortie du jème nœud (rappelez-vous qu’il s’agit de la sortie de l’ensemble du réseau). C'est pourquoi

Si jème nœud- pas au dernier niveau, alors il y a des sorties ; notons-les par Children(j). Dans ce cas

, .

Eh bien, c'est exactement une correction similaire, mais calculée pour le nœud du niveau suivant, nous la désignerons par - elle en diffère par l'absence de multiplicateur. Puisque nous avons appris à calculer la correction pour les nœuds du dernier niveau et à exprimer la correction pour un nœud plus niveau bas grâce à des corrections plus élevées, vous pouvez déjà écrire un algorithme. C'est en raison de cette fonctionnalité de calcul des corrections que l'algorithme est appelé algorithme de rétropropagation(rétropropagation). Bref résumé du travail effectué :

  • pour le nœud de dernier niveau
  • pour nœud de réseau interne
  • pour tous les nœuds

L'algorithme résultant est présenté ci-dessous. En entrée de l'algorithme, en plus des paramètres spécifiés, il est également nécessaire de soumettre la structure du réseau dans un certain format. En pratique, c'est très bons résultats montrer des réseaux d'une structure assez simple, constitués de deux niveaux de neurones - un niveau caché (unités cachées) et des neurones de sortie (unités de sortie) ; chaque entrée du réseau est connectée à tous les neurones cachés, et le résultat du travail de chaque neurone caché est transmis à l'entrée de chacun des neurones de sortie. Dans ce cas, il suffit de saisir le nombre de neurones de niveau caché.

Algorithme

Algorithme: RetourPropagation

où est le coefficient d'inertie pour lisser les sauts brusques lors du déplacement le long de la surface de la fonction objectif

Interprétation mathématique de la formation des réseaux neuronaux

A chaque itération de l'algorithme de rétropropagation, les poids du réseau de neurones sont modifiés pour améliorer la solution d'un exemple. Ainsi, au cours du processus d’apprentissage, les problèmes d’optimisation monocritère sont résolus de manière cyclique.

La formation sur les réseaux neuronaux se caractérise par quatre limitations spécifiques qui distinguent la formation sur les réseaux neuronaux : tâches courantes optimisation : un nombre astronomique de paramètres, la nécessité d'un parallélisme élevé lors de l'apprentissage, le caractère multicritère des problèmes à résoudre, la nécessité de trouver un domaine assez large dans lequel les valeurs de toutes les fonctions minimisées sont proches du minimum. Sinon, le problème d’apprentissage peut généralement être formulé comme un problème de minimisation des scores. La prudence exprimée dans la phrase précédente (« généralement ») est due au fait qu'en fait, nous ne connaissons pas et ne connaîtrons jamais tous les problèmes possibles des réseaux de neurones, et peut-être que quelque part dans l'inconnu se trouvent des problèmes irréductibles à la minimisation des réseaux de neurones. estimation. Minimiser l'évaluation - problème complexe: il existe un nombre astronomique de paramètres (par exemple exemples standards, implémenté sur PC - de 100 à 1 000 000), le relief adaptatif (graphe d'estimation en fonction de paramètres réglables) est complexe et peut contenir de nombreux minima locaux.

Inconvénients de l'algorithme

Malgré de nombreuses applications réussies de la rétropropagation, ce n’est pas une panacée. Ce qui pose le plus de problèmes, c'est le processus d'apprentissage indéfiniment long. Dans le cas de problèmes complexes, la formation du réseau peut prendre des jours, voire des semaines, voire même ne pas apprendre du tout. La raison peut être l’une de celles décrites ci-dessous.

Paralysie du réseau

Au cours du processus de formation du réseau, les valeurs de poids peuvent devenir très importantes à la suite d'une correction. Cela peut entraîner le fonctionnement de la totalité ou de la plupart des neurones à des valeurs OUT très élevées, dans une région où la dérivée de la fonction de contraction est très petite. Puisque l’erreur renvoyée lors du processus d’apprentissage est proportionnelle à cette dérivée, le processus d’apprentissage peut pratiquement se figer. D'un point de vue théorique, ce problème est mal compris. Ceci est généralement évité en diminuant la taille du pas η, mais cela augmente le temps de formation. Diverses heuristiques ont été utilisées pour prévenir ou guérir de la paralysie, mais pour l’instant elles ne peuvent être considérées que comme expérimentales.

Minimums locaux

La rétropropagation utilise une forme de descente de gradient, c'est-à-dire qu'elle descend le long de la surface d'erreur, ajustant continuellement les poids vers le minimum. La surface d'erreur d'un réseau complexe est très accidentée et se compose de collines, de vallées, de plis et de ravins dans un espace de grande dimension. Un réseau peut tomber dans un minimum local (vallée peu profonde) lorsqu'il existe un minimum beaucoup plus profond à proximité. À un point minimum local, toutes les directions pointent vers le haut et le réseau est incapable d’y échapper. La principale difficulté dans la formation des réseaux de neurones réside précisément dans les méthodes permettant d'échapper aux minima locaux : chaque fois que l'on quitte un minimum local, le minimum local suivant est à nouveau recherché en utilisant la même méthode de rétropropagation d'erreur jusqu'à ce qu'il ne soit plus possible de trouver une issue à il.

Taille du pas

Un examen attentif de la preuve de convergence montre que les corrections de poids sont supposées infinitésimales. Il est clair que cela n’est pas réalisable en pratique, car cela conduit à un temps d’apprentissage interminable. La taille du pas doit être considérée comme finie. Si la taille du pas est fixe et très petite, alors la convergence est trop lente, mais si elle est fixe et trop grande, une paralysie ou une instabilité constante peut survenir. Il est efficace d'augmenter le pas jusqu'à ce que l'amélioration de l'estimation dans une direction donnée de l'antigradient s'arrête et de le diminuer si une telle amélioration ne se produit pas. P. D. Wasserman a décrit un algorithme de sélection adaptative des étapes qui ajuste automatiquement la taille des étapes pendant le processus d'apprentissage. Le livre de A. N. Gorban propose une technologie étendue pour optimiser l'apprentissage.

Il convient également de noter que le réseau peut être recyclé, ce qui est très probablement le résultat d'une conception erronée de sa topologie. Avec trop de neurones, la capacité du réseau à généraliser l’information est perdue. L'ensemble des images fournies pour la formation sera appris par le réseau, mais toute autre image, même très similaire, pourra être mal classée.

Voir aussi

  • Algorithme de gradient de vitesse

Littérature

  1. Wasserman F. Neuroinformatique : théorie et pratique. - M. : « Mir », 1992.
  2. Khaikin S. Réseaux de neurones : Cours complet. Par. de l'anglais N.N. Kussul, A. Yu. Shelestova. 2e éd., rév. - M. : Maison d'édition Williams, 2008, 1 103 p.

Links

  1. Koposov A.I., Shcherbakov I.B., Kislenko N.A., Kislenko O.P., Varivoda Yu. et al.. - M. : VNIIGAZ, 1995.


Avez-vous aimé l'article? Partagez avec vos amis !