Je vous ai déjà raconté que j’avais débuté ma carrière comme chercheur en intelligence artificielle. Tout au long de ces cinq années de travail passionnant, j’ai été encadré par un chercheur de très haut niveau, qui a été mon mentor et pour moi un exemple à suivre.
Il m’a vu arriver au laboratoire, alors que j’étais fraichement diplômé de mon école d’ingénieurs, la tête pleine de concepts mal digérés. Il m’a dit: « tu ne sais rien, tu as tout à apprendre, à commencer par les bases… » J’ai encaissé, mais j’ai immédiatement compris qu’il avait raison, sans savoir que je venais de passer un test décisif à ses yeux: la modestie indispensable du chercheur.
Alors, j’ai recommencé par le commencement. Mon univers de recherche s’intéressait à la modélisation non linéaire. J’ai commencé par apprendre ce qu’était réellement la notion de modèle par rapport à la réalité physique. Puis j’ai appris que les outils mathématiques à la disposition des automaticiens étaient très développés dans le domaine linéaire, et que la pratique courante lorsque l’on fait face à un comportement non-linéaire était de linéariser le problème en l’étudiant autour d’un point de fonctionnement. Pratique lorsque cela a un sens, complètement imbécile si l’on doit linéariser en permanence dans des espaces d’états complexes fortement non linéaires.
Et c’est là que j’ai commencé à découvrir que dans l’univers de la recherche, il y a beaucoup de chercheurs qui publient des articles qui s’avèrent être des imbécilités sans nom. Le filtre des patrons de laboratoire, puis celui des comités de lecture des revues scientifiques spécialisés, ne sont pas suffisant pour écarter des études mal menées par non compréhension des outils utilisés.
Cela s’est avéré comique dans mon domaine spécifique, celui des réseaux de neurones.
Sans entrer dans le détail, les réseaux de neurones sur lesquels je travaillais sont constitués de cellules faisant chacune une somme pondérée des signaux se présentant à leurs entrées, somme qui est ensuite transformée par une fonction d’activation (une sigmoïde dans mon cas), résultat qui est ensuite envoyé par chaque cellule à toutes les entrées des neurones qui lui sont connectés.
L’ensemble « cellule + fonction d’activation + entrées + coefficients de poids des entrées » est un (modèle simplifié de) neurone. En assemblant plusieurs neurones, en sélectionnant des entrées et des sorties particulières, vous obtenez un réseau de neurones.
Le fonctionnement de l’ensemble consiste à injecter certaines valeurs aux entrées du réseau et à observer les sorties calculées par le réseau.
L’apprentissage du réseau consiste à essayer de calculer les coefficients du réseau (les poids des connexions entre cellules) pour que, pour certaines valeurs présentées en entrée, vous obteniez certaines valeurs en sortie.
Par exemple, lorsque les entrées du réseau sont des valeurs de pixels d’une image, les sorties peuvent coder le nom d’un objet, d’une personne ou d’un nombre (la reconnaissance automatique des codes postaux par ex). Autrement dit, on cherche à reproduire ce que notre cerveau fait très simplement, très rapidement, avec un nombre de « calculateurs » très simples mais très élevés et massivement parallèles.
Tous les matheux comprendront que dans le cas trivial d’une fonction de transfert « identité », le réseau de neurones est un système linéaire et qu’essayer de trouver les coefficients permettant de mettre en correspondance des couples {entrées, sorties} prédéterminés revient à minimiser l’écart entre la mesure constatée et la cible visée. Dans le cas linéaire, la méthode des moindres carrés permet de minimiser l’impact des erreurs expérimentales. On cherche à minimiser une fonction de coût qui est simplement la somme des carrés des écarts entre valeurs mesurées et valeurs de sortie ciblées. Cette fonction est une quadrique dans le cas linéaire, et son minimum peut être calculé immédiatement.
Dans le cas général d’un réseau non linéaire, la fonction de coût (non linéaire) peut être approchée par une fonction plus simple dont on cherchera à chaque itération un jeu de coefficients plus « efficace » (ie faisant baisser la fonction de coût).
Plusieurs approches sont intéressantes: approximation par un hyperplan (linéarisation) ou approximation par une quadrique. Pour illustrer dans le cas monodimensionnel d’un réseau à un seul neurone à une seule entrée (avec donc un seul coefficient), la fonction de coût est la somme des carrés des écarts entre les sorties mesurées et les sorties désirées, sa minimisation consistant à la remplacer autour de la valeur actuelle du coefficient par une droite ou par une parabole.
Dans le cas de l’hyperplan, vous vous déplacez dans l’espace des coefficients d’un « pas » dans le sens de la plus grande pente.
Dans le cas de la quadrique, vous vous placez dans l’espace des coefficients immédiatement sur le minimum calculé (on sait calculer le minimum d’une quadrique).
Mais comme il s’agit d’une diminution supposée de la vraie fonction de coût remplacée par son approximation, il faut s’assurer de la baisse réelle et recommencer jusqu’à se trouver sur un endroit de l’espace des coefficients correspondant à un minimum.
Dans un espace monodimensionnel, un extrémum correspond à une dérivée nulle. Pour déterminer s’il s’agit d’un minimum (et non pas d’un maximum), il faut calculer la dérivée seconde et s’assurer qu’elle est positive.
Dans le cas pluridimensionnel, on parle de « gradient » nul, et de matrice Hessienne définie positive.
La méthode de minimisation la plus utilisée dans l’univers des réseaux de neurones est la descente à pas constant, dite aussi méthode du gradient: approximation de la fonction de coût par un hyperplan et déplacement dans l’espace des coefficients dans le sens de la plus grande pente (le sens opposé au vecteur gradient) d’un « pas » constant.
Le problème de cette méthode numérique d’optimisation est qu’elle peut être très gourmande en temps de calcul. En effet, plus on s’approche du minimum, plus la fonction à un gradient faible, et plus le déplacement sera petit. Autrement dit, plus on s’approche du minimum, et moins on s’en approche rapidement…
J’ai donc étudié une autre méthode d’optimisation bien connue, celle dite de Quasi Newton et en particulier la méthode implantée par Broyden-Fletcher-Goldfarb-Shanno où l’on calcule par itération la matrice inverse de la matrice hessienne. Cette méthode possède une vitesse de convergence bien supérieure à la méthode de gradient à pas constant, vitesse de convergence connue depuis des lustres par les informaticiens spécialistes des algorithmes d’optimisation numérique.
Mais un certain nombre de chercheurs confirmés, à l’époque où je préparais ma thèse, semblaient méconnaître les propriétés de ces algorithmes, et en particulier la lenteur de la méthode de gradient à pas constant. Ou s’ils la connaissaient, ils arrêtaient leurs calculs en tout cas beaucoup trop tôt. J’ai pu reproduire certains des problèmes posés dans leurs articles en trouvant des solutions bien meilleures, parfois même en contradiction avec leurs conclusions, simplement parce que je m’étais intéressé à un domaine que je ne connaissais pas: les méthodes d’optimisations numériques.
Alors maintenant, lorsque je lis les conclusions d’un chercheur, même de haut niveau, même avec une équipe derrière lui, je reste prudent en me demandant s’il maîtrise bien toute la chaine technique qui l’a amené à ses conclusions. A-t-il utilisé la bonne méthode d’optimisation, a-t-il utilisé les outils mathématiques en respectant leurs conditions d’usage (conditions initiales, espaces affines et non pas linéaires, erreurs liées à la discrétisation numérique…). Autant d’erreurs de débutants qui peuvent passer inaperçues.
Et parfois je suis encore surpris aujourd’hui, surtout dans des domaines qui ne sont pas les miens, et que j’aborde avec modestie et humilité, de voir des soi-disant experts se prendre les pieds dans le tapis sans s’en rendre compte…