En mathématiques, la dérivée f’(x) d’une fonction y = f(x) quantifie la variation de la sortie y lorsque l’entrée x change un peu. Elle correspond à la pente de la courbe représentant f, considérée au voisinage de x.
Lorsque la fonction f exprime un modèle physique ou économique, ses dérivées fournissent des informations importantes pour l’interprétation et la calibration du modèle. Par exemple, une analyse de sensibilité pose la question « si je modifie ce paramètre, comment évolue le résultat de ma simulation ? », ce qui correspond exactement à la dérivée du résultat par rapport au paramètre. Malheureusement, beaucoup de modèles existent sous forme de codes informatiques très complexes, beaucoup plus difficiles à dériver que des formules mathématiques élémentaires comme f(x) = ax + b.
La différentiation automatique est une technologie permettant, à partir d’un programme informatique, de calculer automatiquement ses dérivées. Plus besoin d’écrire des équations fastidieuses et sources d’erreur humaine : la complexité du modèle est cachée, et les dérivées sont toujours obtenues de façon exacte. Cette innovation explique en grande partie le succès des méthodes de deep learning, car elle permet facilement d’expérimenter avec différents types de réseaux de neurones.
En pratique, la plupart des modèles réalistes ont beaucoup d’entrées et de sorties. Pour éviter de calculer des dérivées inutiles, il faut exploiter leur parcimonie : seules certaines entrées vont influencer certaines sorties. Si on représente les relations entre entrées et sorties dans une matrice (appelée la Jacobienne), cela se traduit par beaucoup de coefficients nuls. Les techniques de différentiation automatique peuvent prendre en compte cette parcimonie, mais cela mélange beaucoup d’ingrédients différents : théorie des graphes, algèbre linéaire, principes des langages de programmation et de la compilation.
Le projet décrit ici consiste à implémenter la différentiation automatique parcimonieuse dans le langage Julia, très utilisé pour la modélisation et le calcul scientifique. Il a abouti sur 3 librairies logicielles complémentaires :
- https://github.com/adrhill/SparseConnectivityTracer.jl, qui permet de détecter la parcimonie dans les fonctions
- https://github.com/gdalle/SparseMatrixColorings.jl, qui utilise cette parcimonie pour accélérer la différentiation automatique
- https://github.com/JuliaDiff/DifferentiationInterface.jl, qui propose une interface facile d’accès
Avec plus de 10 000 téléchargements par mois, ces librairies ont un véritable impact sur l’écosystème Julia, et permettent de nombreuses applications dans des domaines variés. Par exemple, le logiciel Ribasim (https://ribasim.org/) s’en sert pour modéliser et optimiser la gestion du système de rivières aux Pays-Bas.
Partenaires