Notes d'étude de base du réseau neuronal (quatre) Méthode de propagation des erreurs

table des matières

Erreur de propagation de retour

Avant-propos:

5.1 Calcul

5.1.1 Résoudre avec le graphe de calcul

5.2 Règle de la chaîne

5.2.1 Rétropropagation du graphe de calcul

5.2.2 Quelle est la règle de la chaîne

5.3 Rétropropagation

5.3. 1  arrière noeud additionneur de propagation

5.3.2 Rétropropagation des nœuds de multiplication

5.3.3 L'exemple d'Apple

5.4 Implémentation de Simple Layer

5.4.1 Implémentation de la couche de multiplication

5.4.2 Atteindre la couche d'addition

5.5 Implémentation de la couche de fonction d'activation

5.5.2 Couche sigmoïde

5.6.2 Version batch de la couche Affine

5.7 La réalisation de la méthode de propagation des erreurs

5.7.1 Vue d'ensemble de l'apprentissage des réseaux neuronaux

5.7.2 La réalisation d'un réseau de neurones correspondant à la méthode de propagation de retour d'erreur

5.7.3 Méthode de confirmation de gradient de la méthode de propagation en retour d'erreur

5.7.4 Apprentissage à l'aide de la méthode de propagation de retour d'erreur

5.8 Résumé


Erreur de rétropropagation

Avant-propos:

Bien que la différenciation numérique soit simple et facile à mettre en œuvre, son inconvénient est qu'elle prend du temps à calculer. Dans ce chapitre, nous allons apprendre une méthode permettant de calculer efficacement le gradient des paramètres de poids-méthode de propagation en retour d'erreur

Comprendre correctement la méthode de propagation de l'erreur en retour: l'une est basée sur une formule mathématique; l'autre est basée sur un graphe de calcul (graphe de calcul)

5.1 Calcul

5.1.1 Résoudre avec le graphe de calcul

Les nœuds sont représentés par ○ et ○ est le contenu du calcul.

Il peut également être exprimé comme:

5.2 Règle de la chaîne

5.2.1 Rétropropagation du graphe de calcul

5.2.2 Quelle est la règle de la chaîne

Inspirez-vous des fonctions composées en grand nombre

z = (x + y) ^ 2

règle:

Si une certaine fonction est représentée par une fonction composite, la dérivée de la fonction composite peut être représentée par le produit de la dérivée de chaque fonction constituant la fonction composite.

5.2.3 Règle de chaîne et diagramme de calcul

Nous essayons d'exprimer le calcul de la règle de la chaîne de formule (5.4) avec un diagramme de calcul

La formule ci-dessus est facile à obtenir:

5.3 Rétropropagation

La section précédente a présenté que la rétro-propagation des graphes de calcul est basée sur la règle de la chaîne. Voici des exemples d'opérations telles que + *

5.3.1 Rétropropagation du nœud d'ajout

z = dérivée de x + y

Ensuite, obtenez:

5.3.2 Rétropropagation des nœuds de multiplication

"Flip value" --- c'est trop intuitif, c'est la situation où xy cherche une dérivée partielle

5.3.3 L'exemple d'Apple

Exercice:

répondre:

5.4 Implémentation de Simple Layer

Le nœud de multiplication est appelé "couche de multiplication" (MulLayer), et le nœud d'addition est appelé "couche d'addition"

5.4.1 Implémentation de la couche de multiplication

Donnez une châtaigne:

Code d'implémentation:

Remarque: chaque couche doit être séparée

La dérivée de chaque variable peut être obtenue par backward ()

5.4.2 Implémentation de la couche d'addition

L'avant () de la couche d'addition reçoit deux paramètres x et y, les ajoute et les sort.

backward () transmet le dérivé (dout) d'amont en aval intact

Code d'implémentation:

5.5 Implémentation de la couche de fonction d'activation

Nous appliquons l'idée de graphes informatiques aux réseaux de neurones.

Nous implémentons les couches qui composent le réseau neuronal en tant que classe. Commençons par implémenter la couche ReLU et la couche sigmoïde de la fonction d'activation

5.5.1 Couche ReLU

Dans la mise en œuvre des couches de réseau neuronal, on suppose généralement que les paramètres de forward () et backward () sont des tableaux NumPy.

Code d'implémentation:

Code d'implémentation:

Explication sur (x <= 0)

Si la valeur d'entrée pendant la propagation vers l'avant est inférieure ou égale à 0 , la valeur de la propagation vers l'arrière est 0 . Par conséquent, le masque sauvegardé lors de la propagation vers l'avant sera utilisé en rétropropagation, et l'élément dans le masque dout passé de l'amont sera mis à True

5.5.2 Couche sigmoïde

Implémentez la fonction sigmoïde. La fonction sigmoïde est représentée par la formule (5.9)

Si l'expression du graphique de calcul (5.9), alors comme le montre la figure 5-19

Il existe de nouveaux nœuds "exp" et "/", respectivement, y = exp (x), y = 1 / x

Ensuite, calculez sa propagation de direction

Divisé en quatre étapes, l'image sur le livre est plus intuitive

étape 1:

Dans la rétro-propagation, la valeur amont est multipliée par -y 2 (le carré de la sortie de la propagation aller multipliée par -1) puis passée à l'aval.

Étape 2

Le nœud "+" transmet la valeur amont intacte à l'aval. Le diagramme de calcul est présenté ci-dessous.

Étape 3

Étape 4

Pour la multiplication, il vous suffit de faire un flip

Enfin, nous pouvons obtenir:

Par conséquent, nous avons constaté que nous pouvons trouver la valeur de cette formule grâce à la propagation directe de x et y

La version simplifiée du diagramme de calcul peut omettre le processus de calcul en rétropropagation, de sorte que l'efficacité du calcul est plus élevée

, Vous pouvez ignorer les détails triviaux dans la couche Sigmoid, mais vous devez uniquement vous concentrer sur son entrée et sa sortie

La rétro-propagation de la couche sigmoïde représentée sur la figure 5-21 peut être calculée uniquement sur la base de la sortie de la propagation directe

5.6 Implémentation de la couche Affine / Softmax

Dans la propagation directe du réseau de neurones, afin de calculer la somme des signaux pondérés, l'opération de produit matriciel est utilisée

La somme pondérée des neurones peut être Y = np.dot (X, W) + B

Le produit de X et W doit rendre le nombre d'éléments de la dimension correspondante identique.

Notez que ce n'est pas le sens de la multiplication matricielle à 2 lignes

L'opération de produit matriciel réalisée dans la propagation directe du réseau de neurones est appelée « transformation affine » A dans le domaine de la géométrie . Par conséquent, le processus d'exécution de la transformation affine est mis en œuvre ici en tant que " couche affine ".

Le calcul de np.dot (X, W) + B peut être représenté par le diagramme de calcul illustré à la Figure 5-24

Nous avons vu que le flux entre les nœuds dans le graphe de calcul est un scalaire, et dans cet exemple, la propagation entre les nœuds est une matrice.

Pourquoi faire attention à la forme de la matrice? Puisque l'opération de produit matriciel nécessite que le nombre d'éléments dans les dimensions correspondantes soit cohérent, en confirmant la cohérence, la formule (5.13) peut être dérivée.

5.6.2 Version batch de la couche Affine

Dans le cas où l'on considère la propagation vers l'avant de N données ensemble, c'est-à-dire la version batch de la couche Affine.

Contrairement à maintenant, la forme de l'entrée X est maintenant (N, 2). Ensuite, comme précédemment, effectuez des calculs matriciels simples sur le graphe de calcul.

En raison de la propagation vers l'avant, le décalage sera ajouté à chaque donnée (première, seconde ...). Lors de la rétropropagation, la valeur de rétropropagation de chaque donnée doit être résumée en tant qu'élément de décalage.

Dans cet exemple, supposons qu'il y ait 2 données (N = 2). La rétropropagation biaisée additionnera les dérivées de ces 2 éléments de données par élément

Ici np.sum () est utilisé pour additionner les éléments dans la direction du 0ème axe (l' axe avec les données comme unité, axe = 0 )

L'implémentation considère le cas où les données d'entrée sont un tenseur (données à quatre dimensions), qui est légèrement différent de celui introduit ici

5.6.3 Softmax-avec-perte 层

Fonction Softmax, par exemple lorsque des chiffres manuscrits sont reconnus:

La reconnaissance des chiffres manuscrits devant être classée en 10 catégories, il existe également 10 entrées pour la couche Softmax.

Remarque:

Le traitement dans le réseau neuronal comporte deux étapes: l' inférence et l' apprentissage . Le raisonnement du réseau neuronal n'utilise généralement pas la couche Softmax. En d'autres termes, lorsque le raisonnement du réseau de neurones n'a besoin que de donner une réponse, car à ce moment seul le score maximum est intéressé, la couche Softmax n'est pas nécessaire. Cependant, la phase d'apprentissage du réseau neuronal nécessite une couche Softmax.

Etant donné qu'elle contient également une erreur d'entropie croisée en tant que fonction de perte, elle est appelée "couche Softmax-with-Loss". Le diagramme de calcul de la couche Softmax-withLoss (fonction Softmax et erreur d'entropie croisée) est illustré à la Figure 5-29.

Le diagramme de calcul de la figure 5-29 peut être simplifié à la figure 5-30

La fonction softmax est enregistrée comme couche Softmax et l'erreur d'entropie croisée est enregistrée comme couche d'erreur d'entropie croisée . On suppose ici qu'il existe 3 types de classification et 3 entrées (scores) sont reçues de la couche précédente. Comme le montre la Figure 5-30, la couche Softmax normalise l'entrée (a1, a2, a3) et les sorties (y1, y2, y3). La couche Erreur d'entropie croisée reçoit la sortie de Softmax (y1, y2, y3) et l'étiquette de l'enseignant (t1, t2, t3) et génère la perte L à partir de ces données.

La rétropropagation de la couche Softmax a obtenu un "beau" résultat (y1 - t1, y2 - t2, y3 - t3). Puisque (y1, y2, y3) est la sortie de la couche Softmax et (t1, t2, t3) est les données de supervision, (y1 - t1, y2 - t2, y3 - t3) est la différence entre la sortie de la couche Softmax et le label enseignant .

Le but de l'apprentissage du réseau neuronal est de rendre la sortie du réseau neuronal (la sortie de Softmax) proche de l'étiquette de l'enseignant en ajustant les paramètres de poids .

L' erreur entre la sortie du réseau de neurones et l'étiquette de l'enseignant doit être efficacement transmise à la couche précédente

Exemples spécifiques:

Par exemple, considérons la situation où l'étiquette de l'enseignant est (0, 1, 0) et la sortie de la couche Softmax est (0,3, 0,2, 0,5). Parce que la probabilité de résoudre correctement l'étiquette est de 0,2 (20%), le réseau neuronal ne parvient pas à ce moment à faire la reconnaissance correcte. A ce moment, la rétro-propagation de la couche Softmax transmet une grande erreur de (0,3, -0,8 , 0,5) . Étant donné que cette grande erreur se propage à la couche précédente, la couche située devant la couche Softmax apprendra le "gros" contenu de cette grande erreur.

Remarque:

En utilisant la "somme de l'erreur quadratique" comme fonction de perte de la "fonction d'identité", la rétropropagation peut obtenir des résultats aussi "beaux" que (y1 - t1, y2 - t2, y3 - t3).

Pour un autre exemple, considérons la situation où l'étiquette de l'enseignant est (0, 1, 0) et la sortie de la couche Softmax est (0,01, 0,99, 0) (ce réseau de neurones le reconnaît assez précisément). A ce moment, la rétro-propagation de la couche Softmax transmet une petite erreur de (0,01, -0,01, 0). Cette petite erreur se propagera également à la couche précédente, car l'erreur est très petite, de sorte que le contenu appris dans la couche précédente de la couche Softmax est également très "petit".

Implémentation de la couche Softmax-with-Loss

Veuillez noter que lors de la rétropropagation, après avoir divisé la valeur à propager par la taille du lot (batch_size) , ce qui est passé à la couche précédente est l'erreur d'une seule donnée

5.7 La réalisation de la méthode de propagation des erreurs

5.7.1 Vue d'ensemble de l'apprentissage des réseaux neuronaux

L'apprentissage du réseau neuronal est divisé en 4 étapes suivantes

La méthode de rétropropagation d'erreur apparaîtra à l'étape 2.

Dans l'expérience de la section précédente, nous avons adopté la méthode de la différenciation numérique qui, bien que simple, prend trop de temps.

5.7.2 La réalisation d'un réseau de neurones correspondant à la méthode de propagation de retour d'erreur

Ici, nous allons implémenter le réseau de neurones à 2 couches en tant que TwoLayerNet

Très similaire au chapitre précédent

La principale différence réside dans l'utilisation de couches ici . En utilisant des couches, le traitement d'obtention du résultat de la reconnaissance (prédire ()) et le traitement de calcul du gradient (gradient ()) ne peuvent être achevés que par le transfert entre les couches.

N'interceptez que les différentes parties:

Veuillez prêter attention au code en gras de cette implémentation, en particulier à la chose importante pour enregistrer la couche de réseau neuronal sous OrderedDict . OrderedDict est un dictionnaire ordonné. «Ordered» signifie qu'il peut se souvenir de l'ordre dans lequel les éléments sont ajoutés au dictionnaire. La propagation vers l'avant du réseau de neurones n'a besoin d'appeler la méthode forward () de chaque couche que dans l'ordre d'ajout d'éléments pour terminer le traitement, tandis que la propagation vers l' arrière n'a besoin que d' appeler les couches dans l'ordre inverse .

Étant donné que la couche Affine et la couche ReLU gèrent correctement la propagation directe et la propagation arrière , la seule chose à faire ici est de connecter les couches dans le bon ordre , puis d'appeler les couches dans l'ordre (ou dans l'ordre inverse)

Ajoutez simplement les couches nécessaires comme l'assemblage de blocs Lego pour construire un réseau neuronal plus grand.

5.7.3 Méthode de confirmation de gradient de la méthode de propagation en retour d'erreur

Deux méthodes pour trouver le dégradé:

L'une est une méthode basée sur la différenciation numérique, et l'autre est une méthode de résolution analytique de formules mathématiques. Cette dernière méthode utilise la méthode de propagation de retour d'erreur pour calculer efficacement le gradient même s'il existe un grand nombre de paramètres. Utilisez la méthode de propagation des erreurs pour trouver le dégradé.

Pour confirmer si la mise en œuvre de la méthode de propagation des erreurs est correcte , une différenciation numérique est nécessaire.

L'opération consistant à confirmer si le résultat du gradient obtenu par la différenciation numérique et le résultat obtenu par la méthode de propagation des erreurs sont cohérents (à proprement parler, il est très similaire) est appelée contrôle du gradient.

La méthode de calcul d'erreur consiste ici à trouver la valeur absolue de la différence des éléments correspondants dans chaque paramètre de poids et à calculer la valeur moyenne. Après avoir exécuté le code ci-dessus, les résultats suivants seront affichés

Par exemple, l'erreur de décalage de la première couche est 9,7e-13 (0,0000000000000097). De cette manière, nous savons que le gradient obtenu par la méthode de propagation de retour d'erreur est correct et que la mise en œuvre de la méthode de propagation de retour d'erreur est correcte.

5.7.4 Apprentissage à l'aide de la méthode de propagation de retour d'erreur

Jetons un coup d'œil à la mise en œuvre de l'apprentissage des réseaux de neurones à l'aide de la méthode de propagation des erreurs. Par rapport à l'implémentation précédente, la seule différence est que le gradient est obtenu par la méthode de propagation en retour d'erreur.

La partie d'utilisation n'est différente de la précédente que par:

5.8 Résumé

En utilisant le graphe de calcul, la méthode de propagation des erreurs dans le réseau neuronal est introduite et le traitement dans le réseau neuronal est implémenté en unités de couches. Les couches que nous avons apprises sont la couche ReLU, la couche Softmax-with-Loss, la couche Affine, la couche Softmax Etc., des méthodes avant et arrière sont implémentées dans ces couches.En propageant les données vers l'avant et vers l'arrière, le gradient du paramètre de poids peut être calculé efficacement. En utilisant des couches pour la modularisation, les couches peuvent être assemblées librement dans le réseau neuronal et vous pouvez facilement créer votre réseau préféré.

 

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_37457202/article/details/107566659
conseillé
Classement