coucou747

Ce blog présente principalement les évolutions du compilateur metalang : les nouveaux backends, les nouvelles corrections de bugs, les nouvelles features, nouvaux tests, son utilisation dans le cadre du concours prologin.

le 22/04/2019

Réseaux de neurones ?

Les réseaux de neurones sont parfois abordés de façon étrange à la radio : Sur france culture par exemple, on avait un exemple flagrant d'incompréhension lié simplement au fait qu'ils n'avaient aucune équation sous les yeux.

Regardons un simple réseau de neurones que j'ai pu entrainer grâce à mon projet de réseaux de neurones sur carte graphiques en ocaml. On obtient donc un tableau exel avec en A2 et B2, deux booleans (représentés par -1 ou 1) et ensuite, en A12, B12, C12, les résultats du réseau de neurones qui représentent le or, and et xor, des cellules A2 et B2. Cette feuille représente véritablement un réseau de neurones déjà entrainé. On constate alors qu'il est impossible de comprendre pourquoi toutes ces constantes ont été choisies et très pénibles de savoir pourquoi ça fonctionne. La vérité c'est qu'on s'en fout. Ce qui compte, c'est de le tester et de vérifier qu'il fonctionne.

Si on regarde de plus près ces fonctions, on obtient pour xor :

On voit une fonction étrange, à deux paramètres, et on peut commencer par la tracer :

les voici sur desmos. On voit aisément que si false a pour valeur -1, et true a pour valeur 1, notre fonction représente xor (et sur desmos, on voit and et or.) On sait montrer que le réseau fonctionne parce-que les entrées ont du sens et sont peu nombreuses, mais on comprend aussi facilement que si le réseau était plus gros, on aurait pas plus de difficulté à comprendre comment le réseau fonctionne, par contre, on serait incapable de déterminer si il a assez appris, ou correctement appris.

On sait très bien expliquer pourquoi ça renvoie une valeur, mais on ne sait pas expliquer pourquoi l'apprentissage a choisi ces valeurs. Il aurait d'ailleur très bien pu choisir d'autres valeurs qui fonctionnent. On aurait même pu prendre un réseau de neurones plus grand, et obtenir le même résultat. Il ne s'agit pas réellement d'une boite noire, c'est au contraire une boite débile de simplicité : on a des additions, des multiplications et des tangentes hyperboliques. Par contre, comprendre comment ça fonctionne ne permet pas de faire la moindre prédiction ni la moindre conclusion utile.

Le véritable soucis, c'est que pour mes trois fonctions binaires, je peux tester tous les cas en quelques secondes, et certifier mon réseau de neurones comme correct : je sais qu'il a assez appris pour ne plus jamais se tromper. Pour une voiture autonome, c'est plus compliqué : déjà, la nature des entrées est très différente, ainsi que le nombre de cas possible. On ne peut pas tout énumérer, mais ça ne fait pas de l'algo une "boite noire". L'algorithme de calcul du réseau neuronal est simple et étudié depuis plus de 50 ans. On sait comment ça fonctionne, et on peut certifier qu'il fonctionne correctement, mais impossible de certifier qu'il répondra toujours correctement.

C'est là que le concept de boite noire intervient. Puisque le code du réseau ne permet pas de certifier qu'il aura toujours bon, alors on DOIT le considérer comme une boite noire (ce qui n'est bien sur pas exact). Et on doit alors rendre le processus d'apprentissage et de test le plus compréhensible possible, parce-que c'est de là qu'on pourra avoir confiance ou non dans notre intelligence artificielle.

On donne régulièrement aux lycéens des fonctions qui ressemblent à f(x) = arctan(0.7x+0.2), et c'est exactement la fonction d'un réseau de neurone à une cellule et un biais. C'est donc qu'ils peuvent l'analyser et que c'est tout sauf une boite noire.

Dans Catégories/Projets.

Sujets : #AI #neural network #ocaml #cuda #gpu