Quand la différenciation automatique est-elle bon marché?

12

La différenciation automatique nous permet d'évaluer numériquement la dérivée d'un programme sur une entrée particulière. Il existe un théorème selon lequel ce calcul peut être effectué à un coût inférieur à cinq fois le coût d'exécution du programme d'origine. Ce facteur de cinq est une borne supérieure.

Dans quelles situations ce coût peut-il être encore réduit? De nombreux codes dérivés sur le terrain fonctionnent presque à la vitesse du programme d'origine. Que fait-on pour obtenir cette accélération?

Quels sont les traits du programme original qui peuvent être exploités pour accélérer le calcul?

Quelles astuces en génie logiciel peuvent être utilisées pour accélérer le calcul?

MRocklin
la source
1
Certes, on voudrait exploiter les propriétés spéciales des dérivées de fonctions comme la fonction exponentielle et les fonctions trigonométriques. Beaucoup de sous-expressions communes potentielles là-bas.
JM
Vous posez des questions sur le mode inverse ou le mode avancé?
Jed Brown
Ma compréhension (limitée) est que les modes avant et arrière ont des coûts à peu près similaires.
MRocklin du

Réponses:

6

Ma compréhension limitée de la DA correspond à ce que Matt a dit. Pour accélérer le calcul des dérivées, la structure du graphe d'expression doit exploiter la rareté et la rareté dans l'ensemble des matrices jacobiennes. (Voir cet article de Griewank pour plus d'informations.) Les astuces de génie logiciel seraient probablement dans le code AD lui-même pour restructurer le graphe d'expression afin de tirer parti de ces propriétés dans l'ensemble des matrices jacobiennes. Savoir comment le code AD génère un graphe d'expression à partir du code que vous écrivez vous aiderait à son tour à mieux comprendre comment écrire du code qui nécessite moins de calculs. Tout bon code AD devrait déjà tirer parti des éléments intrinsèques avec des sous-expressions courantes, mais les bons codes AD sont difficiles à écrire.

La référence standard dans le domaine est Évaluer les dérivés: principes et techniques de différenciation algorithmique, deuxième édition par Andreas Griewank et Andrea Walther, et devrait fournir des informations plus détaillées sur la façon de réduire le nombre de calculs nécessaires pour évaluer la dérivée d'un programme.

Geoff Oxberry
la source
3

Tout AD a encore besoin de ces intrinsèques pour être fournis, donc je ne vois pas ce que cela a à voir avec la complexité générique d'une expression. Je suppose que vous pouvez classer la complexité par le nombre de chemins à travers le graphe d'expression puisque vous formulez AD de cette façon. Andrew Lyons a un bon travail sur les graphiques série-parallèles ici.

Matt Knepley
la source