différenciation automatique

En mathématiques et l'algèbre informatique. différentiation automatique (AD), appelée aussi la différenciation ou de la différenciation algorithmique de calcul. [1] [2] est un ensemble de techniques pour évaluer numériquement la dérivée d'une fonction spécifiée par un programme informatique. AD exploite le fait que chaque programme informatique, peu importe la complexité, exécute une séquence d'opérations arithmétiques élémentaires (addition, soustraction, multiplication, division, etc.) et les fonctions élémentaires (exp, log, sin, cos, etc.). En appliquant la règle de la chaîne de façon répétée à ces opérations, dérivées d'ordre arbitraire peuvent être calculées automatiquement, avec précision pour travailler avec précision, et en utilisant au plus un petit facteur constant des opérations arithmétiques de plus que le programme initial.







différenciation automatique n'est pas:

différenciation automatique

Figure 1: Comment la différenciation automatique concerne la différenciation symbolique

Ces méthodes classiques rencontrent des problèmes: la différenciation symbolique conduit à un code inefficace (à moins bien fait) et fait face à la difficulté de convertir un programme informatique en une seule expression, alors que la différenciation numérique peut introduire des erreurs d'arrondi dans le processus de discrétisation et d'annulation. Les deux méthodes classiques ont des problèmes avec le calcul des dérivés plus élevés, où la complexité et les erreurs augmentent. Enfin, les deux méthodes classiques sont lentes à calculer les dérivées partielles de la fonction par rapport à plusieurs entrées, comme cela est nécessaire pour des algorithmes d'optimisation de gradient à base. la différenciation automatique permet de résoudre tous ces problèmes, au détriment d'introduire plus de dépendances logicielles.

La règle de la chaîne, Edit accumulation avant et arrière

En général, deux modes distincts de AD sont présentés, l'accumulation en avant (ou en mode avant) et l'accumulation inverse (ou en mode inverse). accumulation Forward spécifie que l'on traverse la règle de la chaîne de l'intérieur vers l'extérieur (ce qui est, tout d'abord on calcule dw / dx et dy puis / dw. alors que l'accumulation inverse a la traversée de l'extérieur vers l'intérieur.

En général, à la fois vers l'avant et l'accumulation inverse sont des manifestations spécifiques de l'application de l'opérateur de composition de programme. avec l'une appropriée des deux applications (p. y) étant fixe.

Modifier l'accumulation de l'avant

différenciation automatique

Figure 2: Exemple d'accumulation vers l'avant avec le graphique de calcul

Dans AD d'accumulation vers l'avant, une première, fixe la variable indépendante à laquelle est effectuée la différenciation et calcule la dérivée de chaque sous-expression récursive. Dans un calcul stylo et du papier, on peut le faire en substituant à plusieurs reprises la dérivée des fonctions internes dans la règle de la chaîne:

Ceci peut être généralisé à plusieurs variables en tant que produit de la matrice de jacobiens.

comme indiqué par le point. Les dérivés sont ensuite calculées en synchronisation avec les étapes d'évaluation et combinés avec d'autres dérivés par l'intermédiaire de la règle de la chaîne.

À titre d'exemple, considérons la fonction:

Pour plus de clarté, les sous-expressions individuelles ont été marquées avec les variables wi.

Le choix de la variable indépendante à laquelle la différenciation est effectuée affecte les valeurs de semences w1 et w2. Supposons que l'on est intéressé par la dérivée de cette fonction par rapport à x1. Dans ce cas, les valeurs de semences devraient être fixées à:

Pour calculer le gradient de cette fonction par exemple, ce qui nécessite des dérivés de f par rapport à non seulement x1 x2 mais aussi. on doit effectuer un balayage supplémentaire sur le graphe de calcul en utilisant les valeurs de départ w ˙ 1 = 0; w ˙ 2 = 1> _ = 0;> _ = 1>.

La complexité de calcul d'un balayage vers l'avant de l'accumulation est proportionnelle à la complexité du code original.







l'accumulation de l'avant est plus efficace que l'accumulation inverse pour les fonctions f. ℝ n → ℝ m avec m »n comme seul n balayages sont nécessaires, par rapport à m balayages pour l'accumulation inverse.

accumulation inverse Modifier

différenciation automatique

Figure 3: Exemple d'accumulation inverse avec le graphique de calcul

Dans AD inverse d'accumulation, une première, fixe la variable dépendante à être différencié et calcule la dérivée par rapport à chaque sous-expression récursive. Dans un calcul stylo et du papier, on peut effectuer l'équivalent en substituant à plusieurs reprises la dérivée des fonctions extérieures à la règle de la chaîne:

Dans l'accumulation inverse, la quantité d'intérêt est l'adjoint. notée par une barre (W); il est un dérivé d'une variable dépendante choisie par rapport à une sous-expression w:

Les opérations pour calculer la dérivée en utilisant l'accumulation inverse sont présentés dans le tableau ci-dessous (voir l'ordre inverse):

l'accumulation inverse est plus efficace que l'accumulation des fonctions f avant. ℝ n → ℝ m avec m «n que seuls balayages m sont nécessaires, par rapport aux balayages n pour l'accumulation de l'avant.

Mode inverse AD a été publié en 1970 par Seppo Linnainmaa dans sa thèse de maîtrise. [5] [6] [7]

Rétropropagation d'erreurs dans perceptrons multicouches, une technique utilisée dans l'apprentissage de la machine. est un cas particulier du mode inverse AD.

Au-delà de l'accumulation avant et arrière Modifier

différentiation automatique en utilisant des nombres double Modifier

(X + x 'ε) + (y + y' ε) = x + y + (x '+ y') ε (x + x 'ε) ⋅ (y + y' ε) = xy + xy 'ε + yx 'ε + x' y 'ε 2 = xy + (xy' + yx ') ε (x + x '\ varepsilon) + (y + y' \ epsilon) - = x + y + (x '+ y') \ varepsilon \\ (x + x '\ varepsilon) \ cdot (y + y' \ epsilon) - = xy + xy '\ varepsilon + yx \ varepsilon + x'y '\ varepsilon ^ = xy + (xy' + yx « ) \ varepsilon \ end >>

et de même pour la soustraction et division.

P (x + x 'ε) = p 0 + p 1 (x + x' ε) + ⋯ + pn (x + x 'ε) n = p 0 + p 1 x + ⋯ + pnxn + p 1 x' ε + 2 p 2 xx 'ε + ⋯ + npnxn - 1 x' e = P (x) + P (1) (x) x 'ε P (x + x' \ epsilon) - = p_ + p_ (x + x '\ varepsilon) + \ cdots + p_ (x + x' \ varepsilon) ^ \\ - = p_ + p_x + \ cdots + p_x ^ + p_x '\ varepsilon + 2p_xx' \ varepsilon + \ cdots + np_x ^ x '\ varepsilon \\ - = P (x) + P ^ (x) x '\ varepsilon \ end >>

où P (1)> désigne le dérivé de P par rapport à son premier argument, et x '. appelé une graine. peut être choisi arbitrairement.

La nouvelle arithmétique se compose de paires ordonnées. éléments écrits ⟨x. X ' ⟩ . avec l'arithmétique ordinaire sur le premier composant, et le premier arithmétique de différenciation de la commande sur le second composant, comme décrit ci-dessus. L'extension des résultats ci-dessus sur les polynômes à des fonctions analytiques, nous obtenons une liste des opérations arithmétiques de base et des fonctions standard pour la nouvelle arithmétique:

⟨U. u '+⟩ ⟨v. v' =⟩ ⟨u + v. u '+ v'⟩ ⟨u. u '⟩ -. ⟨v v' =⟩ ⟨u - v u. '- v'⟩ ⟨u. u '*⟩ ⟨v. v' =⟩ ⟨u v. u 'v + u v'⟩ ⟨u. . U '.⟩ / ⟨V v' =⟩ ⟨u v u 'v - u v' v 2⟩ (v ≠ 0) sin ⁡ ⟨u. u '⟩ = sin ⟨⁡ (u). u 'cos ⁡ (u) cos⟩ ⁡ ⟨u. u '⟩ = cos ⟨⁡ (u). - u 'sin ⁡ (u)⟩ exp ⁡ ⟨u. u '⟩ = exp ⟨⁡ u. u 'exp ⁡ u⟩ log ⁡ ⟨u. u '⟩ = ⟨log ⁡ (u). u '/ u⟩ (u> 0) ⟨u. u '⟩ k = u k ⟨. k u k - 1 u '⟩ (u ≠ 0) | ⟨U. u '⟩ | = ⟨| u |. u «signe u⟩ (u ≠ 0) \ left \ langle u, u '\ right \ rangle + \ left \ langle v, v' \ right \ rangle - = \ left \ langle u + v, u '+ v' \ right \ rangle \\\ gauche \ langle u, u '\ right \ rangle - \ left \ langle v, v' \ right \ rangle - = \ left \ langle uv, u'-v '\ right \ rangle \\ \ left \ langle u, u '\ right \ rangle * \ left \ langle v, v' \ right \ rangle - = \ left \ langle uv, u'v + uv '\ right \ rangle \\\ gauche \ langle u , u '\ right \ rangle / \ left \ langle v, v' \ right \ rangle - = \ left \ langle>, >> \ right \ rangle \ quad (v \ neq 0) sin \\\ \ left \ langle u, u '\ right \ rangle - = \ left \ langle \ sin (u), u' \ cos (u) \ right \ rangle \\\ cos \ left \ langle u, u '\ right \ rangle - = \ gauche \ langle \ cos (u), - u '\ sin (u) \ right \ rangle \\\ exp \ left \ langle u, u' \ right \ rangle - = \ left \ langle \ exp u, u '\ exp u \ right \ rangle \\\ log \ left \ langle u, u '\ right \ rangle - = \ left \ langle \ log (u), u' / u \ right \ rangle \ quad (u> 0) \ \\ left \ langle u, u \ right \ rangle ^ - = \ left \ langle u ^, ^ u ku \ right \ rangle \ quad (u \ neq 0) gauche \\\ | \ left \ langle u, u '\ right \ rangle \ right | - = \ left \ langle \ left | u \ right |, u'> u \ right \ rangle \ quad (u \ neq 0) \ end >>

et en général pour la fonction primitive g,

où g u> et g v> sont les dérivés de g par rapport à ses premier et second arguments, respectivement.

Quand une opération arithmétique binaire de base est appliquée à l'argument-mixtes paire ⟨u. u '⟩ et le nombre réel c -le nombre réel est d'abord soulevé pour ⟨c. 0⟩. La dérivée d'une fonction f. R → R \ rightarrow \ mathbb> au point x 0> est maintenant trouvé par le calcul f (x ⟨0. 1⟩), 1 \ rangle)> en utilisant l'arithmétique ci-dessus, ce qui donne ⟨f (x 0). f '(x 0)⟩), f' (x _) \ rangle> comme résultat.

arguments vectoriels et les fonctions Modifier

Ordre élevé et de nombreuses variables Modifier

Le calcul ci-dessus peut être généralisé pour le calcul du deuxième ordre et des dérivés supérieurs de fonctions à variables multiples. Cependant, les règles arithmétiques se développent rapidement très compliquée: la complexité du second degré sera dans le degré dérivé le plus élevé. Au lieu de cela, l'algèbre polynomiale tronquée Taylor peut être utilisé. L'arithmétique résultante, définie sur les nombres double généralisés, permet de calculer efficacement l'utilisation des fonctions comme si elles étaient un nouveau type de données. Une fois que le polynôme de Taylor d'une fonction est connue, les dérivés sont facilement extraites. Un rigoureux, la formulation générale est assurée par le développement en série de tenseurs en utilisant le calcul opérationnel sur les espaces de programmation.

Calcul opérationnel sur les espaces de programmation Modifier





Articles Liés