3 points par GN⁺ 2023-08-27 | 1 commentaires | Partager sur WhatsApp
  • L’article explique, à l’aide de Python, le concept important de différentiation automatique, un composant clé de l’entraînement des réseaux de neurones.
  • L’auteur, ingénieur en machine learning, utilise des bibliothèques comme Tensorflow et Pytorch et vise à écrire le code le plus simple possible pour effectuer de la différentiation automatique.
  • Il commence par écrire du code Python qui additionne deux variables x et y, puis assigne le résultat à la variable z. Cependant, z ne garde pas la trace des variables utilisées, ce qui rend impossible la mise à jour automatique de sa valeur si x ou y change.
  • Pour résoudre ce problème, l’auteur introduit une classe Tensor qui permet le calcul symbolique sur des variables. Dans cette classe, l’opération d’addition est redéfinie.
  • La classe Tensor est ensuite améliorée à l’aide d’un arbre binaire. Chaque tenseur peut contenir deux autres tenseurs ainsi que l’opération qui l’a créé. Cela est réalisé en introduisant le tuple Children.
  • L’auteur ajoute ensuite une méthode forward à la classe Tensor afin d’exécuter le graphe de calcul et de calculer la valeur réelle des tenseurs.
  • Il introduit la différentiation automatique dans le graphe de calcul en ajoutant les dérivées des opérations de base prises en charge par la classe Tensor. Les appels récursifs à la fonction grad parcourent le graphe de calcul et décomposent les fonctions complexes en combinaisons de fonctions simples.
  • La classe Tensor est étendue pour pouvoir traiter des formules plus complexes, en ajoutant des opérations supplémentaires comme la soustraction, la division, l’exponentielle et la négation.
  • L’auteur montre l’utilisation de la classe Tensor en générant une formule complexe puis en en calculant la dérivée.
  • En conclusion, il propose plusieurs améliorations et optimisations possibles pour la classe Tensor, comme l’ajout d’opérations sur des tableaux de taille arbitraire, l’arrêt de la traversée sur les nœuds qui ne dépendent pas du tenseur x, ainsi que la mise en place d’un cache pour éviter les calculs répétés.
  • L’article vise à aider les lecteurs à comprendre comment la différentiation automatique est mise en œuvre pour l’optimisation et l’apprentissage des réseaux de neurones.

1 commentaires

 
GN⁺ 2023-08-27
Avis sur Hacker News
  • Les lecteurs apprécient les démonstrations de code concises et élégantes qui aident à comprendre des concepts complexes.
  • L’explication de la différentiation automatique dans l’article semble trop simplifiée, car elle ne traite que du cas où le graphe est un arbre et n’aborde pas les graphes orientés acycliques plus complexes.
  • Certains lecteurs trouvent la différentiation automatique très intéressante et ont rédigé leur propre introduction à ce concept.
  • Un lecteur a partagé sa propre implémentation d’autodiff en 26 lignes de Python.
  • Les techniques discutées sont similaires à celles utilisées pour le « suivi des dépendances » et dans les systèmes de Knowledge Based Engineering qui réduisent les calculs dans les grands modèles 3D paramétriques.
  • La vidéo d’Andrej Karpathy sur la construction d’un moteur autograd a été recommandée pour la qualité de ses explications.
  • Certains lecteurs suggèrent que la différentiation automatique ne construit pas nécessairement un graphe d’opérations, mais calcule plutôt les valeurs à la volée.
  • Il a été proposé qu’expliquer l’autodiff comme une règle de chaîne numérique soit plus clair.
  • Des questions ont été soulevées sur la justification du fait d’appeler la classe un tenseur.
  • La simplicité de l’implémentation a surpris certains lecteurs, rendant ainsi le concept plus accessible qu’ils ne l’avaient d’abord imaginé.
  • L’implémentation a été comparée à la free monad de Haskell, ce qui montre les liens entre les langages évoqués dans l’article.