Graphiques informatiques

La rétropropagation est implémentée dans des frameworks d'apprentissage profond tels que Tensorflow, Torch, Theano, etc., en utilisant des graphes de calcul. Plus important encore, la compréhension de la rétro-propagation sur les graphes de calcul combine plusieurs algorithmes différents et ses variations telles que le backprop à travers le temps et le backprop avec des poids partagés. Une fois que tout est converti en un graphe de calcul, ils sont toujours le même algorithme - il suffit de retourner la propagation sur les graphes de calcul.

Qu'est-ce que le graphe informatique

Un graphe de calcul est défini comme un graphe orienté où les nœuds correspondent à des opérations mathématiques. Les graphes informatiques sont un moyen d'exprimer et d'évaluer une expression mathématique.

Par exemple, voici une équation mathématique simple -

$$ p = x + y $$

Nous pouvons dessiner un graphe de calcul de l'équation ci-dessus comme suit.

Le graphe de calcul ci-dessus a un nœud d'addition (nœud avec signe "+") avec deux variables d'entrée x et y et une sortie q.

Prenons un autre exemple, un peu plus complexe. Nous avons l'équation suivante.

$$ g = \ gauche (x + y \ droite) \ ast z $$

L'équation ci-dessus est représentée par le graphe de calcul suivant.

Graphiques informatiques et rétropropagation

Les graphes informatiques et la rétropropagation, tous deux sont des concepts fondamentaux importants dans l'apprentissage en profondeur pour la formation des réseaux de neurones.

Passe avant

La passe avant est la procédure pour évaluer la valeur de l'expression mathématique représentée par des graphes de calcul. Faire une passe en avant signifie que nous transmettons la valeur des variables dans le sens avant de la gauche (entrée) à la droite où se trouve la sortie.

Prenons un exemple en donnant une certaine valeur à toutes les entrées. Supposons que les valeurs suivantes soient données à toutes les entrées.

$$ x = 1, y = 3, z = −3 $$

En donnant ces valeurs aux entrées, nous pouvons effectuer une passe avant et obtenir les valeurs suivantes pour les sorties sur chaque nœud.

Tout d'abord, nous utilisons la valeur de x = 1 et y = 3, pour obtenir p = 4.

Ensuite, nous utilisons p = 4 et z = -3 pour obtenir g = -12. Nous allons de gauche à droite, en avant.

Objectifs de la passe arrière

Dans la passe en arrière, notre intention est de calculer les gradients pour chaque entrée par rapport à la sortie finale. Ces gradients sont essentiels pour entraîner le réseau neuronal à l'aide de la descente de gradient.

Par exemple, nous souhaitons les dégradés suivants.

Dégradés souhaités

$$ \ frac {\ partial x} {\ partial f}, \ frac {\ partial y} {\ partial f}, \ frac {\ partial z} {\ partial f} $$

Passage en arrière (rétropropagation)

Nous commençons la passe en arrière en trouvant la dérivée de la sortie finale par rapport à la sortie finale (elle-même!). Ainsi, il en résultera la dérivation d'identité et la valeur est égale à un.

$$ \ frac {\ partial g} {\ partial g} = 1 $$

Notre graphe de calcul ressemble maintenant à celui ci-dessous -

Ensuite, nous ferons le retour arrière par l'opération "*". Nous calculerons les gradients en p et z. Puisque g = p * z, nous savons que -

$$ \ frac {\ partial g} {\ partial z} = p $$

$$ \ frac {\ partial g} {\ partial p} = z $$

Nous connaissons déjà les valeurs de z et p de la passe avant. Par conséquent, nous obtenons -

$$ \ frac {\ partial g} {\ partial z} = p = 4 $$

et

$$ \ frac {\ partial g} {\ partial p} = z = -3 $$

Nous voulons calculer les gradients en x et y -

$$ \ frac {\ partial g} {\ partial x}, \ frac {\ partial g} {\ partial y} $$

Cependant, nous voulons le faire efficacement (bien que x et g ne soient qu'à deux sauts dans ce graphique, imaginez qu'ils soient vraiment loin l'un de l'autre). Pour calculer efficacement ces valeurs, nous utiliserons la règle de la chaîne de différenciation. De la règle de la chaîne, nous avons -

$$ \ frac {\ partial g} {\ partial x} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} $$

$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} $$

Mais nous savons déjà que dg / dp = -3, dp / dx et dp / dy sont faciles puisque p dépend directement de x et y. Nous avons -

$$ p = x + y \ Rightarrow \ frac {\ partial x} {\ partial p} = 1, \ frac {\ partial y} {\ partial p} = 1 $$

Par conséquent, nous obtenons -

$$ \ frac {\ partial g} {\ partial f} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} = \ left (-3 \ right) .1 = -3 $$

De plus, pour l'entrée y -

$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} = \ left (-3 \ right) .1 = -3 $$

La principale raison de faire cela à l'envers est que lorsque nous devions calculer le gradient en x, nous n'utilisions que des valeurs déjà calculées, et dq / dx (dérivée de la sortie du nœud par rapport à l'entrée du même nœud). Nous avons utilisé des informations locales pour calculer une valeur globale.

Étapes pour former un réseau de neurones

Suivez ces étapes pour former un réseau neuronal -

  • Pour le point de données x dans l'ensemble de données, nous transmettons en avant avec x en entrée et calculons le coût c en sortie.

  • Nous faisons des passes en arrière à partir de c et calculons les gradients pour tous les nœuds du graphique. Cela inclut les nœuds qui représentent les poids du réseau neuronal.

  • Nous mettons ensuite à jour les poids en faisant W = W - taux d'apprentissage * gradients.

  • Nous répétons ce processus jusqu'à ce que les critères d'arrêt soient satisfaits.