2019-06-27
Sortie en janvier 2019, les Neural ODEs introduits par Chen et al de l’université de Toronto ont été salués comme une bourrasque d’air frais dans l’univers du Deep Learning. Loin des nombreuses améliorations incrémentales d’architecture ou autres astuces, les Neural ODEs proposent une reformulation complète de l’approche par réseaux de neurones, pouvant s’appliquer à de nombreux problèmes différents avec la même élégance. L’objectif de cet article est donc de présenter cette approche novatrice ainsi que les différentes applications présentes dans la publication d’origine (https://arxiv.org/abs/1806.07366).
Public : Data scientists, ingénieurs motivés
Un réseau de neurones est quasi totalement défini comme une série de couches d’opérations successives : couches totalement connectées, convolutives, récurrentes, etc. Chaque couche est supposée produire une transformation de la donnée qui sera ensuite l’entrée de la couche suivante. Si l’on considère une connexion résiduelle à la ResNet, on peut considérer que le résultat d’une couche s’écrit comme :
Ici, h[t] est l’information issue de la couche de niveau t, présente en amont de la couche (t+1). f est la fonction de transformation de la couche (t+1), donnant ainsi h[t+1] en sortie de la couche de niveau (t+1). Cette écriture n’est pas innocente, car l’idée fondamentale des Neural ODE est de considérer les transformations effectuées par les couches comme l’expression d’une même fonction définie dans le temps, et de considérer donc qu’à la limite, le réseau de neurones f peut être vu comme la solution d’une équation différentielle :
Dès lors, nous définissons le réseau de neurones paramétré par théta comme modélisant non pas la transformation, mais la dynamique (ou la dérivée) de la transformation. Ce réseau, unique, peut ainsi être appelé plusieurs fois dans le temps jusqu’à obtenir le résultat voulu. Il est la solution d’une équation différentielle que l’on pourra adresser par un solveur classique. Le schéma ci-dessous représente, à gauche, un réseau résiduel composé de 5 couches et, à droite, un ODE Network où chaque point est un appel à un solveur d’équation différentielle :
Il est important de comprendre que là où un réseau « classique » a un nombre de couches finies et statique, défini comme l’architecture du réseau, un réseau « ODE » peut être appelé autant de fois que l’on veut comme un équivalent d’un nombre de « couches ». Trois points d’intérêts sont à noter dans cette nouvelle approche : • Efficacité en consommation mémoire : l’approche donnée permet de faire converger le réseau selon une forme de back propagation qui ne nécessite pas de différenciation à travers les opérations du solveur. L’entraînement d’un tel réseau a un coût constant fonction du nombre d’évaluations (et donc de la « profondeur » d’un tel réseau) • Calcul contrôlé : les solveurs d’équations différentielles sont des outils avancés et perfectionnés qui permettent un contrôle fin de l’erreur. Au-delà, dans la mesure où nous contrôlons dynamiquement la « profondeur » d’un tel réseau, nous pouvons choisir d’avoir une profondeur importante pour l’entraînement mais moindre pour l’inférence avec ainsi une adaptation forte de la performance selon le besoin. • Efficacité : De fait, le nombre de paramètres nécessaire à la modélisation d’un problème est moindre que pour une approche classique.
Sans rentrer trop dans les détails, l’approche traite le solveur d’équations différentielles comme une boite noire annexe. L’objectif reste d’effectuer une back-propagation permettant de faire évoluer les paramètres du réseau. On peut considérer la fonction de coût comme étant :
La fonction de coût est donc fonction d’un état initial z0 ainsi que de l’évolution de cet état par la dynamique de la fonction f paramétrée par théta qui est ici un réseau de neurones. L’opération ODESolve est le résultat du solveur d’équation différentielle. La seconde ligne donne une expression de la dérivée de cette fonction de coût par rapport à ses paramètres par rapport à une fonction a(t) qui est appelée l’adjoint. Cette méthode est elle-même la solution d’une seconde équation différentielle. La méthode appliquée (ici présentée brièvement) consiste donc à calculer la valeur de cet adjoint dans le sens inverse jusqu’à revenir à l’état initial du système (ci-dessous, z(t0)) :
Nous disposons donc dans cette approche d’un moyen d’effectuer un analogue de la back propagation, par le biais de la résolution de plusieurs équations différentielles. Notons que les auteurs ont publié dans leur implémentation pytorch une ré-écriture GPU de plusieurs approches standard de solveurs d’équations différentielles : https://github.com/rtqichen/torchdiffeq
Une première application est testée sur une classification supervisée d’images, face à un réseau composé de 6 blocs résiduels convolutifs. On compare ainsi ce ResNet a une approche où le réseau convolutif modélise la dynamique de la transformation et est entraîné par la méthode d’adjoints ci-dessus. Si les résultats ci-dessous sont intéressants, force est de rester méfiants sur le dataset utilisé, le Mnist, qui a déjà démontré ses fortes limites :
Ici, l’ODE-Net prend environ 30% des paramètres du ResNet avec, surtout, un coût en mémoire constant. Le temps d’entraînement est une fonction de sa « profondeur », soit, ici, du nombre d’évaluations du réseau faîtes pendant l’entraînement qui reste un paramètre dynamique face à la profondeur statique du ResNet. Si le gain en performance est indiscutable, un autre point permet de souligner l’énorme intérêt des ODE-Nets : le contrôle de l’erreur par le nombre d’appels :
Ci-dessus, dans l’ordre : • (a) : Observation de l’erreur (ordonnée) en fonction du nombre d’évaluations (abscisse). On remarque bien le contrôle de l’erreur qui réduit au fur et à mesure que l’on augmente le nombre d’évaluations
• (b) : le temps relatif d’entraînement en fonction du nombre d’évaluation, sans surprise
• (c) : le nombre d’évaluation de la phase backward (méthode des adjoints) en fonction du nombre d’évaluation de la phase forward. Pour le coup, réelle surprise, le nombre de passes en backward est approximativement la moitié du nombre de passes en forward.
Deuxième approche, celle s’inscrivant dans la démarche des normalizing flows qui consistent à modéliser par un réseau de neurones une transformation bijective. Ces approches permettent notamment l’apprentissage de distributions de probabilités par la transformation d’une distribution contrôlée.
Ici, l’approche des Neural ODEs a permis de débloquer une situation complexe, où les transformations « possibles » étaient fortement limitées du fait d’une forte complexité dans le calcul associé, le déterminant à droite de l’équation ci-dessus impliquant un coût cubique en fonction de la dimension de z. Les Neural ODEs présentent une approche où cette complexité disparaît, le déterminant s’exprimant directement. Si ces approches restent fortement théoriques à date, elles sont très importantes de par leur généricité et leur potentiel. Ici, l’apport des Neural ODEs est nommé Continuous Normalizing Flows (CNF) face aux classiques Normalizing Flows (NF). Dans les tests réalisés, un CNF de complexité moindre (10.000 itérations d’apprentissage face à 500.000 itérations pour un NF aura un coût final moindre. Il permet aussi d’effectuer une approche par maximum de vraisemblance pour ensuite échantillonner dans la distribution cible. Ci-dessous, une comparaison NF vs CNF, K étant la profondeur du NF, M la largeur du CNF :
Troisième application démontrant le fort potentiel de cette approche, la modélisation et prédiction de séries temporelles. De fait, l’approche des Neural ODE permet de considérer des échantillons de série positionnées à des endroits différents dans le temps avec des irrégularités ou des manques, élément qui met toujours en défaut les approches classiques. L’idée ici est de modéliser un Variational AutoEncoder (VAE), où l’encodeur est un RNN qui va modéliser les paramètres d’une distribution latente, de laquelle on échantillonnera pour générer aux temps voulus les valeurs à prédire :
L’application proposée est de retrouver des formes « simples » à partir d’échantillons, en comparant le Latent ODE avec un RNN classique :
À ce stade, le lecteur méfiant ne manquera pas de soulever un point d’importance, à savoir, l’absence d’applications à ces cas réels, ou la comparaison des approches avec des architectures moins naïves qu’un RNN classique ou un réseau résiduel à 6 blocs. Et une crainte est en effet que ce travail ne suive le chemin des Capsule Networks de Hilton et al ou après un premier travail convainquant sur un cas simple, aucune application précise ne s’en dégage. Force est de reconnaître à minima que l’approche des Continuous Normalizing Flows a été fortement reprise avec notamment les travaux de Ffjord (https://arxiv.org/abs/1810.01367) pour la création de modèles génératifs inversibles. Au-delà, de nombreux travaux sont en cours pour explorer la voie tracée par cette approche, et seul le temps pourra confirmer ou infirmer la pertinence de ces travaux. Reste que cette approche peut être fondamentalement appliquée à de nombreux problèmes différents en offrant une reformulation forte du rôle du réseau de neurones dans le cadre d’un apprentissage. Avec déjà plus de 100 citations en quelques mois, il convient de surveiller les avancées d’un œil critique mais curieux.