[TRIBUNE de Ken Wenger, CoreAVI] Les réseaux neuronaux vont régir notre futur, que ce soit à bord d'avions et de voitures autonomes ou dans le domaine des technologies médicales. Mais les réseaux neuronaux peuvent-ils vraiment devenir sûrs en matière d'expressivité et d'exécution ? Et quel est le rôle des plateformes IA dans ce contexte ? Ken Wenger, Principal Software Engineer chez CoreAVI donne ici un éclairage sur ces questions cruciales pour le développement des réseaux de neurones dans les applications critiques.
Bien qu’ils suscitent de grands espoirs, les réseaux neuronaux sont devenus de véritables boîtes de Pandore. Alors que les concepts liés à cette technologie existent déjà depuis des décennies, ce n'est que tout récemment qu'ils sont passés de l'informatique générale à des applications pratiques, notamment en raison de l’utilisation de plus en plus large des processeurs graphiques universels avec un accès à une programmation parallèle. Aujourd'hui, les réseaux neuronaux sont au cœur de toute application complexe de traitement d'images et leur succès est dû à leur capacité à reconnaître et à apprendre des modèles dans des données complexes. Si on fait un peu de prospective, un avion pourrait faire le tour du monde sans cockpit ni pilote et les résultats d'examens médicaux pourraient être vérifiés et diagnostiqués immédiatement, sans avoir à attendre l’examen d’un médecin spécialiste. Et certaines entreprises du secteur automobile promettent que des voitures entièrement autonomes sillonneront nos routes dans les trois ans à venir. Au vu de l'importance croissante des réseaux neuronaux dans les environnements critiques, une question cruciale se pose désormais : les réseaux neuronaux sont-ils sûrs ?
Distinguer expressivité et exécution
Pour certains, cette question n’est pas pertinente puisque les réseaux neuronaux sont trop complexes à analyser. Mais force est de constater que les réseaux neuronaux font d'ores et déjà partie du monde des applications critiques. Tesla les emploie notamment à grande échelle dans sa flotte actuelle de voitures à pilote automatique et les hôpitaux se fient de plus en plus aux algorithmes d'apprentissage profond pour le diagnostic des patients. Il s’avère que ce sont des outils utiles et performants qui vont s’installer durablement dans la vie industrielle. C'est pourquoi il est très important de comprendre comment ils fonctionnent et s'ils peuvent être appliqués en toute sécurité. Lors de l'évaluation d'un système destiné à un environnement critique, deux aspects doivent être pris en compte : l'expressivité et l'exécution du système.
L'expressivité. Dans le cas d'un réseau neuronal, l'expressivité détermine la sortie de ce dernier. Par exemple, face à l'image d'un chat, le réseau doit classer cette image comme étant celle d'un chat. Cependant, aucun système n'est parfait et parfois les réseaux neuronaux présentent des dysfonctionnements. Au lieu d'identifier un chat, le réseau pourrait classer l'image comme étant celle d'une pastèque. Même les réseaux neuronaux dont l'apprentissage s'est fait avec un degré de précision élevé de plus de 97% peuvent commettre de telles erreurs. Contrairement à une erreur relativement mineure, ici la confusion entre un lampadaire et un être humain peut avoir des conséquences très graves dans le cas d’applications critiques.
A ce niveau, il est difficile de déterminer pourquoi les réseaux neuronaux font de telles erreurs. Dans le cas des algorithmes classiques reposant sur des règles, le cheminement de l'entrée à la sortie peut être suivi et on peut retracer quelle décision a mené à un événement donné. Mais de nombreux réseaux neuronaux apprennent les règles progressivement sur la base de milliers d'exemples d'apprentissage et il n'est plus possible de faire des déductions sur l'entrée à partir de la réponse pour savoir ce qui a entraîné une erreur. Un résultat donné ne sera donc pas déterminé par une seule entrée ou par une seule règle, mais par l'ensemble des entrées précédentes. Ce problème de l'expressivité attire aujourd'hui toute l'attention : il est important de comprendre comment un réseau neuronal fait des erreurs afin de pouvoir sonder ses limites et comprendre dans quelles conditions il pourrait être défaillant. Sans cette compréhension, il n'est pas possible d'évaluer le degré de sécurité d'un réseau neuronal.
Pour tenter de découvrir comment un réseau neuronal parvient à une prédiction donnée, un vaste domaine de la recherche consiste à utiliser des simulations afin de découvrir au moins le secteur des entrées susceptible d'entraîner la défaillance du système. Mais les simulations suffisent-elles pour autant à certifier la sécurité d'un système ?
L'exécution. Ceci nous amène au deuxième aspect d'un réseau neuronal dont on cherche à prouver la sécurité : l'exécution. La seule preuve que l'expressivité d'un réseau neuronal est fiable ne révèle en rien si l'exécution de ce dernier est déterministe ou sûre. Si les simulations peuvent accroître la confiance en la fiabilité de l'expressivité d'un réseau neuronal, elles ne donnent toutefois que peu d'informations sur le degré de fiabilité de son exécution en conditions réelles. Or les directives relatives aux applications critiques exigent en règle générale qu'un logiciel soit exécuté de manière déterministe dans le temps et l'espace.
La gestion des systèmes critiques est traditionnellement assurée par des systèmes d'exploitation temps réel au sein desquels les processus en cours d'exécution sont soigneusement orchestrés à travers des tranches temporelles. Un industriel doit par conséquent être en mesure de calculer le temps d'exécution d'un morceau de code dans le pire des cas afin de s'assurer qu'il pourra être exécuté au sein d'un laps de temps défini.
De façon similaire, les ressources du système telles que la mémoire sont minutieusement réparties entre les différents processus en cours. Les logiciels critiques doivent donc être en mesure d'allouer les ressources du système de manière prévisible de sorte que la taille d'allocation dans le pire des cas est connue et que le système ne vient pas soudainement à manquer de mémoire en cours d'exécution.
Le problème de l'exécution ne peut ici être résolu qu'en basant les systèmes d’intelligence artificielle (IA) uniquement sur des piles logicielles certifiables. A ce niveau, l'exécution de simulations ou toute autre tentative d'accroître la confiance en la prédiction d'un réseau aide à résoudre une partie du problème : cela démontre que la sortie du réseau est fiable et digne de confiance. Néanmoins, l'exécution de simulations du système en générant des entrées réparties ne fournit aucun renseignement sur la manière dont plusieurs processus avec différents niveaux de priorité peuvent utiliser des ressources communes au sein d'un environnement critique. Elle ne nous éclaire pas sur ce qui se passe si l'unité de calcul est surchargée par les demandes d'une autre tâche en cours d'exécution. Il faudrait donc faire des simulations en permanence et intégrer ces scénarios à la liste des cas d'application à simuler pour résoudre cette difficulté.
En suivant ce raisonnement, il serait donc judicieux d'ajouter aux simulations l'ensemble des scénarios et d'accroître ainsi la confiance en la sécurité d'un système. Cette approche est toutefois partiellement erronée car elle suggère que les scénarios exécutés peuvent réellement être simulés. Ce qui n’est pas le cas.
Aller vers une certification de la sécurité des système d’IA
Concrètement, il est donc important de tenir compte de la grande différence qui existe entre le fait de prouver l'aspect sécuritaire de l'expressivité d'un réseau neuronal et celui de prouver la sécurité de son exécution. Afin de prouver l'exécution déterministe d'un réseau neuronal, il n'est pas décisif en fait de savoir comment un réseau neuronal commet des erreurs, mais seulement s'il est exécuté avec succès ou s'il fait des erreurs. Il s’agit de vérifier qu’il est toujours exécuté de manière prévisible, consomme la même quantité de ressources et que l'exécution se fait au sein d'un laps de temps défini. Ce qui est primordial pour garantir non seulement l'intégrité du processus IA en cours d'exécution, mais également l'intégrité de tous les autres processus qui sont exécutés sur le système matériel et utilisent celui-ci de manière conjointe.
Cependant, afin de certifier l'implantation d'un réseau neuronal destiné à des systèmes critiques, la sécurité doit être avérée autant pour son expressivité que pour son exécution. S'il faut par conséquent résoudre les deux problèmes, pourquoi ne peut-on pas se concentrer dans un premier temps sur le problème de l'expressivité et, une fois que celui-ci sera résolu, se pencher sur l'exécution ? Le fait de tarder à se préoccuper de l'exécution revient malheureusement à tomber dans un piège aux conséquences fâcheuses. Pendant que l'on se concentre sur la compréhension des prédictions des réseaux neuronaux, des millions de lignes de code sont en effet écrites puis utilisées par des plateformes et des bibliothèques non sécurisées.
Une fois l'expressivité élucidée, comment alors pourrait-on encore prouver que l'exécution de ces bibliothèques et de ces plateformes est sûre ? Au-delà, est-il réellement possible de certifier Python ? Aura-t-on un jour atteint un niveau de simulation suffisant pour que personne n'ait plus à se soucier du château de cartes branlant sur lequel tout repose ? L'industrie se bat pour résoudre une partie du problème et s'assurer que l'expressivité des réseaux neuronaux présente une sécurité avérée.
En attendant, il convient de concevoir les systèmes d’IA sur une meilleure base afin de résoudre l'autre partie du problème par le biais d'une plateforme sûre, sur laquelle CoreAVI travaille, et qui dès le départ est pensée pour utiliser des interfaces de programmation standard critiques (API).