Return to site

Réseaux de neurones, ou le savant idiot

Billet posté initialement sur la plateforme Medium où vous pourrez partager et commenter.

“A very large part of space-time must be investigated, if reliable results are to be obtained.”
― Alan Turing

L’Europe décide des choses. Souvent. Sur beaucoup de sujets. Là, il se trouve que l’Europe a décidé que la façon dont les décisions étaient prises dans les algorithmes devait pouvoir être rendue accessible aux gens.

Le souci ? Même les experts ne comprennent pas bien pourquoi (ou comment) certains algorithmes marchent. Le cas des réseaux de neurones est typique … et ils sont utilisés assez massivement.

Je vais essayer de vous faire sentir pourquoi on ne comprend pas vraiment ce qui se passe dans un réseau de neurones. Pour éviter de sombrer dans la théorie la plus aride, ce billet sera agrémenté de jolis dessins et (ô miracle !) d’exemples réels et historiques.

Je recommande cet article, Is Artificial Intelligence Permanently Inscrutable ?, qui m’a beaucoup inspiré, ou cette presque traduction francaise du Monde.

Un dessin très laid issu d’un papier de Minsky, notre Guide. Issu de son papier de 1991

Réseaux de neurones

Qu’est-ce qu’un réseau de neurones, ou (artificial) neurals net(work)s, abrégés souvent en NN ou ANN ? En reprenant fortement la WP, c’est un ensemble d’algorithmes dont la conception est fortement inspirée du fonctionnement des neurones biologiques, et qui par la suite s’est rapproché des méthodes statistiques. Ils sont construits sur un paradigme biologique, celui du neurone formel. Sans entrer dans les détails, les papiers fondateurs sont ceux de McCulloch et Pitts (1943) et de Rosenblatt (1962). L’idée est de partir d’un “neurone” très basique, sinon limité, combinant plusieurs entrées selon des règles mathématiques simples (+, -, x, /) et connectant ce résultat à d’autres neurones. Afin d’organiser un peu les choses, on répartit ces neurones en couches (layers), ce qui permet de structurer les traitements. Les réseaux de neurones font partis de l’approche connexionniste, qui consiste à construire des réseaux d’unités simples inter-connectées.

Structure d’un neurone artificiel. Le neurone calcule la somme de ses entrées puis cette valeur passe à travers la fonction d’activation pour produire sa sortie. Schéma volé sur la WP.

Un réseau de neurones est très expressif. Tellement expressif qu’on parle d’approximateur universel : on peut approximer avec une précision arbitraire n’importe quelle transformation continue d’un espace de dimension finie vers une autres espace de dimension finie, moyennant certaines hypothèses. Si je devais expliquer ce point à ma femme, et je vais devoir le faire car elle ne manquera pas de me demander ce que j’ai bien voulu dire, je dirais que si je devais m’exiler sur une île déserte avec un seul algorithme et plein de datasets à traiter, je choisirais probablement un réseau de neurones.

Assez de théorie. On sait construire des réseaux de neurones. Le souci, c’est qu’il y a beaucoup de paramètres internes qui sont fixés lors de la classique phase d’apprentissage (cf ici et ici), et on ne peut pas relier un paramètre à une caractéristique de la détection. En résumé, on construit une belle boite bien noire, qui est entraînée à reconnaître des structures présentes dans le dataset d’entrée. La complexité et l’intrication des paramètres internes (=beaucoup) fait qu’il est impossible de comprendre en détail pourquoi le réseau fonctionne. On maîtrise donc le modèle théorique et le réseau à haut niveau, mais pas à bas niveau. Autrement dit, les règles de transformation des entrées en sorties, i.e. en prédiction, ne sont généralement ni simples, ni exprimables.

Schéma typique d’un réseau de neurones avec trois niveaux cachés. Les données sont à gauche, les résultats à droite. Entre les deux, il se passe des choses obscures. Michael Nielsen

C’est ce qu’on veut faire sentir lorsqu’on dit qu’on on comprend pas comment fonctionne un réseau de neurones.

Ce qui n’empêche pas les approches connexionnistes en général, et les réseaux de neurones en particulier, d’être très efficaces.

Exemple 1. The chip that design itself

L’histoire d’Adrian Thompson est édifiante et est racontée ici, par exemple. Lors de son Ph.D, il se met en tête de reproduire l’évolution organique et biologique dans un processeur. Une tâche ambitieuse s’il en est, car l’évolution biologique a notamment à son actif de belles réussites comme la création du cerveau humain et l’émergence de la charcuterie corse [*]. Il se propose donc de construire un système artificiel capable d’apprendre à reconnaître deux sons : un à 1 kHz, et un autre à 10 kHz. Un esprit avisé remarquera immédiatement le manque de mental flagrant de cette initiative, mais il faut bien commencer par des cas simples.

Pour ce faire, il choisit un algorithme génétique, basé sur l’approche connexionniste, qui implémente la reproduction et la mutation, fonctions évolutives basiques du vivant. L’idée est donc de concevoir un algorithme qui doit créer des programmes qui sauront distinguer ces deux sons. Un programme qui écrit des programmes, oui, vous avez bien compris.

Le processus est totalement darwinien, car les mieux adaptés survivent, et laisse la part belle au hasard dans la génération de nouveaux programmes. L’approche est conceptuellement similaire à ce que ferait un réseau de neurones. Entrer dans les détails du projet nous mènerait un petit peu trop loin et anéantirait définitivement le coté guilleret de ce billet, mais il faut avoir à l’esprit que les briques élémentaires qui composent ces programmes correspondent à des élément électroniques équivalents à des composants du monde réel.

Bref.

Après 4100 itérations, ou générations, l’algorithme avait généré un schéma (ou programme) capable de s’acquitter de sa tâche sans fautes.

Le schéma produit par l’algorithme était remarquable sur trois points:

  1. Il était beaucoup plus compact que les schémas que les électroniciens utilisaient classiquement;
  2. Adrian Thompson était incapable d’expliquer son fonctionnement.

Il intéressa d’ailleurs très vivement British Telecom et Motorola … Il s’avéra qu’en pratique, et c’est le troisième point, le schéma s’appuyait sur des effets capacitifs assez fins, inhérents aux conditions de générations des circuits. Effets connus par les spécialistes, et qui avaient le mauvais goût d’être très sensibles à la température extérieure. La solution était en définitive inutilisable, mais a provoqué une forte activité de R&D sur le sujet.

Minsky, 1992

La conclusion ?

Elle est double, et on devine bien le potentiel de cet exemple en terme de gros titres ou de buzz …

D’une part, la solution était trop bien adaptée aux hypothèses initiales, et donc peu généralisable. En terme de machine learning, on parle d’over-fitting, ou sur-apprentissage. C’est une limite dure du processus d’apprentissage, qui limite la portée des résultats. Si les hypothèses sont trop restrictives, ou si le dataset d’entraînement ne représente pas le domaine des possibles de façon satisfaisante, les résultats peuvent ne pas être utilisables. La pertinence est déterminée par le dataset. Le connexionisme sait très bien créer des idiots savants.

D’autre part, la solution était difficilement compréhensible. Cas classique, bien illustré par cet exemple.

Exemple 2. L’hôpital qui tue ses patients.

Le second cas est un cas réel, issu d’une étude réalisée sur des données de diagnostic clinique, cf cet article pour les détails. L’idée est de pouvoir prédire le risque qu’un patient développe des complications nécessitant une hospitalisation en fonction de son diagnostic. L’intérêt est évidemment de minimiser les occupations des lits et la charge de travail du personnel hospitalier. Que vous trouviez cela éthique, pertinent, humain … ou pas n’est pas le problème: ce qui compte, c’est que ce genre de choses ne va pas tarder à être mis en place. Et je préfère ne pas aborder le sujet des assurances.

Bref. Rich Caruana et ses collègues récupèrent les données, entraînent, entre autres, un réseau de neurones et observent les résultats. Le réseau a les meilleures performances ! Il se trouve qu’ils avaient un moyen de traduire les règles internes en règles humainement lisibles et, surprise!, lorsqu’ils les analysent, ils se rendent compte que le réseau de neurones renvoyait chez eux tous les patients asthmatiques souffrant d’une pneumonie. Ce qui pose un souci majeur chez les médecins, puisque ces patients sont extrêmement sensibles à cette maladie …

La première étape du complot de Skynet pour détruire l’humanité ? Non.

Une erreur informatique ? Non.
Une erreur humaine ? Non.

Alors ?

Alors, bande de médisants, c’était une règle implicite des hôpitaux : tous les patients asthmatiques sujets à une pneumonie étaient directement envoyés en soins intensifs pour y être soignés. Ce qui impliquait que les patients asthmatiques développaient peu de complications après une pneumonie ; et donc qu’ils n’apparaissent pas comme étant des cas à risque dans le data set d’entraînement puisqu’ils étaient soignés ! Ballot.

La machine ne pouvait pas le deviner qu’il lui manquait des informations, du contexte. Le dataset était donc biaisé, car incomplet, sans que cela soit visible à quiconque n’était pas spécialiste de la médecine.

Conclusion ?

On reconnaît à nouveau le cas du savant idiot, qui ne peut pas apprendre en dehors des informations qu’on lui a fourni. Le regard du spécialiste métier est évidemment indispensable, car il a le recul sur le cas réel, et sait s’affranchir des limites du dataset. Ne pas croire aveuglément ce qui sort d’un programme informatique !

Comme le disait Alan Turing, notre maître à tous : “if a machine is expected to be infallible, it cannot also be intelligent”.

Dans ce cas, il est possible de remonter aux causes de ce comportement criminel, de fait, car des règles humainement intelligibles sont accessibles aux experts, ce qui n’est pas forcément le cas — et qui n’est d’ailleurs habituellement pas le cas, pour les réseaux de neurones. Sans elles, la défaillance de l’algorithme sur ces cas précis serait peut-etre passée inaperçue.

Le savant idiot

Un réseau de neurone n’est pas intelligent. Tout comme les autres algorithmes classiques d’apprentissage automatique.

Cette affirmation est péremptoire, mais elle est pertinente si on définit l’intelligence comme la capacité à relier des informations, à tisser des liens. Un dataset trop restrictif empêche de tisser des liens en dehors de ce dataset, et donc restreint la capacité de prédiction. Un apprentissage sans bonne généralisation n’est donc pas vraiment un apprentissage intelligent. J’y vois plutôt une facon d’encoder un sous espace du réel, en reproduisant les structures ou les comportements qui s’y trouvent.

Agrandissons nos datasets.
Conversons un regard critique sur les prédictions.
Gardons en tête l’image du savant idiot.

Le reste n’est que littérature.

[*] : et de moins belles parfois, comme en témoigne notre nouvel ami commun

All Posts
×

Almost done…

We just sent you an email. Please click the link in the email to confirm your subscription!

OKSubscriptions powered by Strikingly