Articles

Backpropagation étape par étape

get-locationSi vous construisez votre propre réseau neuronal, vous aurez certainement besoin de comprendre comment le former.La rétro-propagation est une technique couramment utilisée pour former un réseau neuronal. Il existe de nombreuses ressources expliquant la technique, mais ce post expliquera la rétro-propagation avec un exemple concret dans des étapes colorées très détaillées.

Vous pouvez voir la visualisation de la passe avant et de la rétro-propagation ici. Vous pouvez construire votre réseau neuronal en utilisant netflow.js

Overview

Dans ce post, nous allons construire un réseau neuronal avec trois couches :

  • Couche d’entrée avec deux neurones d’entrée
  • Une couche cachée avec deux neurones
  • Couche de sortie avec un seul neurone

android-tabs

Poids, poids, poids

La formation d’un réseau neuronal consiste à trouver les poids qui minimisent l’erreur de prédiction. Nous commençons généralement notre formation avec un ensemble de poids générés aléatoirement.Ensuite, la rétropropagation est utilisée pour mettre à jour les poids dans une tentative de mapper correctement les entrées arbitraires aux sorties.

Nos poids initiaux seront les suivants :w1 = 0.11w2 = 0.21w3 = 0.12w4 = 0.08w5 = 0.14 et w6 = 0.15

bp_weights

Dataset

Notre dataset comporte un échantillon avec deux entrées et une sortie.

dataset

Notre échantillon unique est le suivant inputs= et output=.

training_sample

Forward Pass

Nous allons utiliser des poids et des entrées donnés pour prédire la sortie. Les entrées sont multipliées par les poids ; les résultats sont ensuite transmis à la couche suivante.

bp_forward

Calcul de l’erreur

Maintenant, il est temps de savoir comment notre réseau s’est comporté en calculant la différence entre la sortie réelle et celle prédite. Il est clair que la sortie de notre réseau, ou prédiction, n’est même pas proche de la sortie réelle. Nous pouvons calculer la différence ou l’erreur comme suit.

bp_error

Réduire l’erreur

Notre objectif principal de la formation est de réduire l’erreur ou la différence entre la prédiction et la sortie réelle. Puisque la sortie réelle est constante, « ne change pas », la seule façon de réduire l’erreur est de changer la valeur de prédiction. La question est maintenant de savoir comment changer la valeur de prédiction ?

En décomposant la prédiction en ses éléments de base, nous pouvons trouver que les poids sont les éléments variables affectant la valeur de prédiction. En d’autres termes, pour changer la valeur de prédiction, nous devons changer les valeurs des poids.

bp_prediction_elements

La question qui se pose maintenant est de savoir comment changer\upour mettre à jour la valeur des poids afin de réduire l’erreur ?
La réponse est la Backpropagation !

Backpropagation

La Backpropagation, abréviation de « backward propagation of errors », est un mécanisme utilisé pour mettre à jour les poids en utilisant la descente de gradient. Il calcule le gradient de la fonction d’erreur par rapport aux poids du réseau neuronal. Le calcul se fait à rebours dans le réseau.

La descente de gradient est un algorithme d’optimisation itératif permettant de trouver le minimum d’une fonction ; dans notre cas, nous voulons minimiser la fonction d’erreur. Pour trouver un minimum local d’une fonction en utilisant la descente de gradient, on prend des étapes proportionnelles au négatif du gradient de la fonction au point actuel.

bp_update_formula

Par exemple, pour mettre à jour w6, nous prenons la w6 actuelle et soustrayons la dérivée partielle de la fonction d’erreur par rapport à w6. En option, nous multiplions la dérivée de la fonction d’erreur par un nombre choisi pour nous assurer que le nouveau poids mis à jour minimise la fonction d’erreur ; ce nombre est appelé taux d’apprentissage.

mise à jour de w6

La dérivée de la fonction d’erreur est évaluée en appliquant la règle de la chaîne de la manière suivante

trouvant . dérivée partielle par rapport à w6

Donc pour mettre à jour w6 on peut appliquer la formule suivante

bp_w6_update_closed_form.png

De même, nous pouvons dériver la formule de mise à jour pour w5 et tout autre poids existant entre la sortie et la couche cachée.

bp_w5_update_closed_form.png

Cependant, lorsqu’on recule pour mettre à jour w1w2w3 et w4 existant entre l’entrée et la couche cachée, la dérivée partielle de la fonction d’erreur par rapport à w1, par exemple, sera la suivante.

trouver la dérivée partielle par rapport à w1

Nous pouvons trouver la formule de mise à jour des poids restants w2w3 et w4 de la même manière.

En résumé, les formules de mise à jour de tous les poids seront les suivantes :

bp_update_all_weights

Nous pouvons réécrire les formules de mise à jour en matrices de la manière suivante

bp_update_all_weights_matrix

Passe en arrière

En utilisant les formules dérivées, nous pouvons trouver les nouveaux poids.

Taux d’apprentissage : est un hyperparamètre ce qui signifie que nous devons deviner manuellement sa valeur.

bp_new_weights

Maintenant, en utilisant les nouveaux poids, nous allons répéter le forward passé

bp_forward_2

Nous pouvons remarquer que la prédiction 0.26 est un peu plus proche de la sortie réelle que celle précédemment prédite 0.191. Nous pouvons répéter le même processus de passage en arrière et en avant jusqu’à ce que l’erreur soit proche ou égale à zéro.

Visualisation de la rétropropagation

Vous pouvez voir la visualisation du passage en avant et de la rétropropagation ici.

Vous pouvez construire votre réseau neuronal à l’aide de netflow.js

netflow-sample

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *