Une intelligence artificielle libre est-elle possible ?
Ces derniers temps, on a beaucoup parlĂ© dâintelligence artificielle sur LinuxFr.org. DâIA propriĂ©taires, et dâIA libres. Mais peut-on vraiment faire une IA libre ? La notion nâest pas sans poser quelques difficultĂ©s. Une (pas si) courte discussion du problĂšme.
Sommaire
- On appellera IA un réseau de neurones artificiels
- Pour comprendre le réseau de neurones, il est nécessaire de disposer de bases statistiques
- Le réseau de neurones
- Le but du logiciel libre est de rendre le pouvoir Ă lâutilisateur
-
Le réseau de neurones est difficilement compatible avec le libre
- Personne ne sait vraiment ce que fait un réseau de neurones
- Disposer de la description complĂšte dâun rĂ©seau de neurones ne permet pas de lâamĂ©liorer
- La dĂ©finition du code source dâun rĂ©seau de neurones est ambiguĂ«
- Cette ambiguïté fait courir un risque juridique sous certaines licences libres
- La dĂ©finition dâune IA open source ressemble furieusement Ă un constat dâĂ©chec
- Conclusion : quâattendre dâune IA libre ?
On appellera IA un réseau de neurones artificiels
Commençons par dĂ©finir notre objet dâĂ©tude : quâest-ce quâune IA ? Par « intelligence artificielle », on pourrait entendre tout dispositif capable de faire rĂ©aliser par un ordinateur une opĂ©ration rĂ©putĂ©e requĂ©rir une tĂąche cognitive. Dans cette acception, un systĂšme expert qui prend des dĂ©cisions mĂ©dicales en implĂ©mentant les recommandations dâune sociĂ©tĂ© savante est une IA. Le pilote automatique dâun avion de ligne est une IA.
Cependant, ce nâest pas la dĂ©finition la plus couramment employĂ©e ces derniers temps. Une IA a battu Lee Sedol au go, mais ça fait des annĂ©es que des ordinateurs battent les humains aux Ă©checs et personne ne prĂ©tend que câest une IA. Des IA sont employĂ©es pour reconnaĂźtre des images alors que reconnaĂźtre un chien nous semble absolument Ă©lĂ©mentaire, mais lâalgorithme de Youtube qui te suggĂšre des vidĂ©os pouvant te plaire parmi les milliards hĂ©bergĂ©es fait preuve dâune certaine intelligence et personne ne lâappelle IA. Il semble donc que le terme « IA » sâapplique donc Ă une technique pour effectuer une tĂąche plus quâĂ la tĂąche en elle-mĂȘme, ou plutĂŽt Ă un ensemble de techniques partageant un point commun : le rĂ©seau de neurones artificiels.
Dans la suite de cette dĂ©pĂȘche, jâutiliserai donc indiffĂ©remment les termes dâIA et de rĂ©seau de neurones1.
Pour comprendre le réseau de neurones, il est nécessaire de disposer de bases statistiques
Les statistiques (ou la statistique, on peut dire les deux, comme en Alexandrie), câest la branche des mathĂ©matiques qui sâintĂ©resse aux moyens, Ă partir de donnĂ©es observĂ©es et fondamentalement probabilistes, dâen tirer des conclusions gĂ©nĂ©ralisables (et idĂ©alement, de prĂ©dire lâavenir Ă partir du passĂ©).
La data science, câest la branche de lâinformatique qui sâintĂ©resse aux moyens, Ă partir de donnĂ©es emmagasinĂ©es sur lesquelles on ne fait pas dâhypothĂšse de mode de gĂ©nĂ©ration, dâen tirer des conclusions gĂ©nĂ©ralisables (et idĂ©alement, de prĂ©dire les donnĂ©es futures).
Ăa vous semble similaire ? Ăa lâest. Les deux champs vont avoir des divergences de vocabulaire, de langages (les stateux prĂ©fĂšreront R, les data scientists Python), de formation (les stateux sont plutĂŽt des universitaires, les data scientists plutĂŽt des informaticiens au niveau licence, mais ils ont les mĂȘmes masters et doctorats), mais fondamentalement, et surtout mathĂ©matiquement, câest la mĂȘme chose. Les connaissances en infĂ©rence statistique (notamment bayĂ©sienne, pour ceux Ă qui ça parle) se gĂ©nĂ©ralisent trĂšs bien Ă la data science.
Pour faire court, un statisticien est un data scientist qui se la pĂšte, alors quâun data scientist est un informaticien qui, nâĂ©tant pas assez bon pour survivre Ă la rude concurrence universitaire, a multipliĂ© son salaire par 10 ou 20 en allant vendre ses compĂ©tences statistiques Ă Facebook.
Les statistiques reposent sur la modélisation
En statistique, la maniĂšre la plus courante de rĂ©pondre Ă une question est de construire un modĂšle. Prenons une question simple : je dispose dâun jeu de donnĂ©es oĂč jâai enregistrĂ©, pour 1000 personnes, leur IMC et leur taux de cholestĂ©rol. Je souhaite savoir sâil y a un lien entre les deux. On souhaiterait, dans ce cas simple, rechercher une relation monotone, sans faire dâhypothĂšse sur le type de relation.
Un exemple : la régression linéaire
Une maniĂšre de rĂ©pondre Ă ma question est dâĂ©crire et de trouver les meilleurs A et B pour que la droite «âŻcolleâŻÂ» le mieux possible au nuage de points. On dĂ©montre que la meilleure droite est celle qui minimise un certain critĂšre, la somme des carrĂ©s des erreurs. Une fois quâon a la meilleure droite possible, on peut faire plein de choses avec :
- On peut rĂ©tro-prĂ©dire le taux de cholestĂ©rol des personnes dĂ©jĂ observĂ©es et voir de combien la prĂ©diction sâĂ©carte du rĂ©el, ce qui fournit une erreur moyenne de prĂ©diction ;
- On peut faire de mĂȘme en prĂ©disant juste le taux de cholestĂ©rol moyen pour tous les individus et comparer les erreurs moyennes de prĂ©diction, ce qui permet de voir de combien le modĂšle amĂ©liore la prĂ©diction (et donc de quantifier la quantitĂ© dâinfo apportĂ©e par la donnĂ©e IMC sur la variable cholestĂ©rol) ;
- On peut Ă©tudier le signe de A : si A est nĂ©gatif, prendre du poids fait baisser le cholestĂ©rol : si A est positif, prendre du poids augmente le cholestĂ©rol : si A est nul, le poids nâapporte pas dâinfo sur le cholestĂ©rol.
- Par contre, on ne peut rien dire de la causalitĂ©. Tout ce quâon a observĂ©, ce sont des personnes qui, au mĂȘme moment, avaient un IMC et un taux de cholestĂ©rol donnĂ©s. Impossible de dire sâils ont ce cholestĂ©rol parce quâils ont cet IMC, sâils ont cet IMC parce quâils ont ce cholestĂ©rol, ou sâils ont ce cholestĂ©rol et cet IMC parce quâils ont une troisiĂšme exposition.
- On peut enfin faire effectuer de la prĂ©diction Ă notre modĂšle : en lui passant une personne dont on ne connaĂźt que lâIMC, on peut estimer son taux de cholestĂ©rol et assortir cette prĂ©diction dâun niveau de certitude (ça demande un peu plus de maths, mais câest lâidĂ©e).
On peut vouloir ajouter une troisiĂšme variable, mettons le tabagisme. On Ă©crira alors :
Avec la variable tabac codĂ©e Ă 0 (non fumeur) ou 1 (fumeur). Noter que notre modĂšle est alors passĂ© en dimension 3 : on ne cherche plus Ă faire passer la meilleure droite par rapport au nuage de points en 2D, mais Ă faire passer le meilleur plan par rapport au nuage de points en 3D. Noter aussi quâon peut facilement inclure des variables qualitatives : il suffit de les coder 0 ou 1. On peut dâailleurs inclure des variables Ă n modalitĂ©s : il suffit de les recoder en n-1 sous-variables en 0-1 (la modalitĂ© de rĂ©fĂ©rence Ă©tant celle pour laquelle toutes les sous-variables sont Ă 0).
Les sont appelĂ©s des paramĂštres : câest en les faisant varier quâon ajuste le modĂšle aux donnĂ©es.
On peut ainsi ajouter un nombre quelconque de variables⊠Ou peut-ĂȘtre pas. En effet, on va finir par atteindre un seuil oĂč le meilleur hyperplan est tout simplement celui qui passe par tous les points ! Si jâai 50 individus et 50 paramĂštres, il est facile de choisir un plan qui passe par tous les individus. Câest ce quâon appelle le surapprentissage : le modĂšle a tout simplement appris le jeu de donnĂ©es par cĆur ! Le surapprentissage est un Ă©cueil des modĂšles trop complexes et un rĂ©seau de neurones est tout Ă fait capable de surapprendre.
Le réseau de neurones
Le neurone naturel
Les neurones sont les cellules du systĂšme nerveux. Elles sont spĂ©cialisĂ©es dans la transmission dâinformation.
Comme tu peux le voir sur cette image issue de Wikimedia (source), un neurone comprend un nombre quelconque de dendrites, un corps cellulaire, et un axone. Point crucial : lâaxone est unique. Il peut lui-mĂȘme transmettre de lâinformation Ă diffĂ©rents neurones en aval, mais il transmet la mĂȘme information. Or lâinformation, dans un neurone, peut entrer par les dendrites et par le corps cellulaire, mais elle ne peut ressortir que par lâaxone (on peut faire abstraction de la gaine de myĂ©line et des nĆuds de Ranvier, qui ont un rĂŽle central dans la vitesse de conduction de lâinformation mais qui ne changent rien aux calculs effectuĂ©s). Autrement dit, un neurone transmet la mĂȘme information Ă tous les neurones dâaval, et si ceux-ci en font un usage diffĂ©rent, câest uniquement liĂ© Ă leurs propres calculs en interne.
Le neurone formel
On peut modĂ©liser un neurone, par analogie avec le neurone naturel. Notre neurone formel pourra donc prendre un nombre quelconque dâentrĂ©es, mais comme un neurone naturel, il ne produira quâune seule sortie. Notre neurone est donc une fonction de ses entrĂ©es :
En pratique (mais ça nâa rien dâobligatoire), on prend souvent une fonction dâune combinaison linĂ©aire des entrĂ©es :
Avec une contrainte : la fonction (quâon appelle fonction dâactivation) doit ĂȘtre monotone (idĂ©alement strictement monotone), dĂ©rivable presque partout (câest nĂ©cessaire Ă lâoptimisation du rĂ©seau, quâon verra plus tard), dĂ©finie sur un intervalle suffisamment large pour quâon soit toujours dedans, et non linĂ©aire (sinon mettre les neurones en rĂ©seau nâa aucun intĂ©rĂȘt, autant faire directement une unique rĂ©gression linĂ©aire).
En pratique, on prend donc quelques fonctions classiques :
- La fonction binaire :
si
,
sinon
- La fonction logistique, une amélioration de la fonction binaire :
. Avantage : elle est strictement monotone, dĂ©rivable partout, et elle prend quand mĂȘme ses valeurs entre 0 et 1.
- La fonction Rectified Linear Unit (ReLU, quâon peut prononcer «âŻrelouâŻÂ») :
si
,
sinon. Avantage : elle est trÚs facile (donc rapide) à calculer et à dériver. On peut la rendre strictement monotone en la modifiant à la marge :
si
,
sinon, avec
.
La mise en réseau
Tout lâintĂ©rĂȘt du neurone formel rĂ©side dans sa mise en rĂ©seau. Un unique neurone ne fait pas mieux quâune rĂ©gression linĂ©aire. On construit donc un rĂ©seau de neurones. Pour ce faire, on va donc gĂ©nĂ©rer plusieurs neurones, chacun prenant en entrĂ©e la sortie de plusieurs neurones et produisant une sortie unique, qui sera Ă son tour utilisĂ©e en entrĂ©e par dâautres neurones. On ajoute un ensemble de neurones quâon pourrait qualifier de « sensitifs », au sens oĂč ils prennent en entrĂ©e non pas la sortie dâun neurone antĂ©rieur, mais directement lâinput de lâutilisateur, ou plutĂŽt une partie de lâinput : un pixel, un mot⊠Enfin, une sortie est ajoutĂ©e : elle produit le rĂ©sultat final.
Ătant donnĂ© que les neurones sont virtuels et nâont pas dâemplacement gĂ©ographique, il est assez logique de les reprĂ©senter en couches : la couche 0 est constituĂ©e des neurones sensitifs, la couche 1 prend en entrĂ©e les rĂ©sultats de la couche 0, et ainsi de suite. Classiquement, tous les neurones de la couche n+1 prennent en entrĂ©e les sorties de tous les neurones de la couche n.
Se pose alors la question : combien de neurones par couche, et combien de couches au total ?
On peut considĂ©rer deux types de topologies : soit il y a plus de neurones par couche que de couches : le rĂ©seau est plus large que long, on parlera de rĂ©seau large. Soit il y a plus de couches que de neurones par couche, auquel cas le rĂ©seau est plus long que large, mais on ne va pas parler de rĂ©seau long parce que ça pourrait se comprendre « rĂ©seau lent ». On parlera de rĂ©seau profond. Câest de lĂ que viennent les Deep et les Large quâon voit un peu partout dans le marketing des IA. Un Large Language Model, câest un modĂšle, au sens statistique, de langage large, autrement dit un rĂ©seau de neurones avec plus de neurones par couche que de couches, entraĂźnĂ© Ă traiter du langage naturel. On constate empiriquement que certaines topologies de rĂ©seau sont plus efficaces pour certaines tĂąches. Par exemple, Ă nombre de neurones constant, un modĂšle large fera mieux pour du langage. Ă lâinverse, un modĂšle profond fera mieux pour de la reconnaissance dâimages.
Le réseau de neurones est Turing-complet
Un rĂ©sultat thĂ©orique important est que les rĂ©seaux de neurones sont Turing-complets. Câest-Ă -dire que, pour tout programme que lâon peut coder et qui sorte une rĂ©ponse algorithmique, il existe un rĂ©seau de neurones qui donne le mĂȘme rĂ©sultat. La rĂ©ciproque est vraie aussi : ce qui est faisable avec un rĂ©seau de neurones est faisable en C ou dans un autre langage, au pire en recodant le rĂ©seau dans ce langage.
Le réseau de neurones présente un effet boßte noire important
Prenons maintenant un Ă©lĂ©ment dâinformation et essayons de suivre son trajet dans le modĂšle jusquâĂ la sortie. Dans une rĂ©gression linĂ©aire, câest assez facile : le poids de lâIMC va peser pour dans le rĂ©sultat final. Dans une forĂȘt alĂ©atoire, on peut toujours isoler les arbres oĂč apparaĂźt une donnĂ©e et essayer de regarder combien elle pĂšse. Câest fastidieux mais ça reste faisable. Dans un rĂ©seau de neurones, câest impossible. Chaque neurone de la couche 1 va passer un rĂ©sultat agrĂ©gĂ© Ă la couche 2, oĂč chaque donnĂ©e de la couche 0 ne compte plus que comme partie dâun tout. De mĂȘme, chaque neurone de la couche 2 va agrĂ©ger tous les rĂ©sultats de la couche 1. Il devient impossible dâindividualiser lâeffet dâune donnĂ©e ou mĂȘme celui dâun neurone.
Ainsi, mĂȘme si je connais lâintĂ©gralitĂ© du contenu du modĂšle, il mâest impossible de donner du sens Ă une partie du modĂšle, prise isolĂ©ment. Le modĂšle se comporte comme un bloc monolithique, et la seule maniĂšre dâĂ©tudier un nouvel exemple est de lui appliquer tout le modĂšle et de voir ce qui sort. Câest ce quâon nomme lâeffet boĂźte noire.
Attention : lâeffet boĂźte noire nâest pas liĂ© au nombre de paramĂštres du modĂšle. Si je fais de la gĂ©nĂ©tique, et que jâĂ©tudie 2000 mutations gĂ©nĂ©tiques individuelles (des SNP, pour single nucleotide polymorphism), je peux assez facilement ajuster un modĂšle de rĂ©gression logistique (qui est une variante de la rĂ©gression linĂ©aire oĂč on fait prĂ©dire non pas une variable quantitative, mais une probabilitĂ©) Ă 2000 paramĂštres (un pour chaque SNP). Chaque paramĂštre sera parfaitement comprĂ©hensible et il nây aura pas dâeffet boĂźte noire.
Il nâest pas non plus liĂ© Ă ta mĂ©connaissance des mathĂ©matiques, cher lectorat. Des statisticiens chevronnĂ©s se cassent les dents sur lâeffet boĂźte noire. Il est intĂ©gralement liĂ© Ă la structure du modĂšle. Certains types de modĂšles en ont, dâautres nâen ont pas. Les rĂ©seaux de neurones en ont.
Cet effet a une consĂ©quence perturbante : mĂȘme si on sait ce que fait un rĂ©seau de neurones, il est impossible de savoir comment il le fait ! On pourrait argumenter que ce nâest pas forcĂ©ment diffĂ©rent de ce que nous faisons : si on montre Ă un enfant de 3 ans une photo de chien, il saura dire que câest un chien, mais il ne saura pas dire pourquoi câest un chien. Cependant, on demande rarement Ă un programme dâĂȘtre rĂ©flexif, mais on demande toujours Ă son auteur de savoir comment il tourne. Câest un peu la base de la programmation.
Le réseau de neurones est un modÚle statistique
Reprenons : on a un paradigme (le rĂ©seau de neurones) capable dâeffectuer nâimporte quelle tĂąche pour laquelle il existe une solution algorithmique, Ă condition de le programmer correctement⊠Mais on ne sait pas le programmer ! Heureusement, il existe un contournement : on ne va pas le programmer, on va lâajuster, comme un modĂšle statistique. Ou lâentraĂźner, si on prĂ©fĂšre le terme de « machine learning ».
Tu tâen souviens, cher lecteur, un rĂ©seau de neurones est un ensemble de fonctions dont chacune prend en entrĂ©e diffĂ©rentes donnĂ©es avec des coefficients (les fameux ). On va commencer par initialiser lâapprentissage en donnant des valeurs alĂ©atoires Ă ces coefficients. Ensuite, on va soumettre Ă notre rĂ©seau de neurones des tas et des tas de donnĂ©es correctes, et quâon va comparer ce quâil prĂ©dit Ă ce quâon attend. La diffĂ©rence sâappelle lâerreur. Et Ă chaque itĂ©ration, on va identifier les neurones les plus gĂ©nĂ©rateurs dâerreur et les pĂ©naliser (rĂ©duire leur poids, ou plutĂŽt rĂ©duire leur poids dans les neurones oĂč câest nĂ©cessaire), tout en favorisant les meilleurs neurones. Les dĂ©tails de la technique (qui sâappelle la rĂ©tropropagation de lâerreur) dĂ©passent largement le cadre de cette courte introduction, mais lâessentiel est quâĂ la fin, on obtient un rĂ©seau capable de donner des rĂ©ponses proches de ce qui existait dans lâensemble des donnĂ©es correctes quâon lui a passĂ© et de gĂ©nĂ©raliser quand la demande est diffĂ©rente dâune donnĂ©e de lâensemble dâapprentissage. Avantage : en pratique, un rĂ©seau de neurones est capable de prendre en entrĂ©e nâimporte quel type de structure de donnĂ©es : image, texte, son⊠Tant que les neurones dâentrĂ©e sont adaptĂ©s et quâil existe un ensemble dâapprentissage suffisamment grand, câest bon.
Tous les modĂšles sont faux, certains sont utiles, et câest vrai aussi pour le rĂ©seau de neurones
Bien sĂ»r, il y a des limites. La premiĂšre est la complexitĂ© algorithmique. Un rĂ©seau de neurones nĂ©cessite de rĂ©aliser un nombre astronomique dâopĂ©rations simples : pour chaque couche, il faut, pour chaque neurone, calculer la somme des produits des coefficients avec toutes les sorties de la couche antĂ©rieure, soit multiplications, oĂč n est le nombre de neurones par couche et c le nombre de couches. Par exemple, pour un petit rĂ©seau de 10 couches de 20 neurones, plus une couche dâentrĂ©e, on rĂ©aliserait Ă chaque itĂ©ration
multiplications en virgule flottante, et encore, câest ici un tout petit rĂ©seau : un rĂ©seau comme ChatGPT a des neurones qui se comptent par millions, voire dizaines de millions !
Une autre limite est la prĂ©cision des rĂ©ponses. Le rĂ©seau de neurones Ă©tant un modĂšle statistique, il nâest capable que dâinterpoler, câest-Ă -dire trouver une rĂ©ponse Ă partir de cas similaires. Cette interpolation est rarement aussi prĂ©cise que celle que donnerait une rĂ©ponse formelle si elle existait : si Newton avait eu accĂšs Ă des rĂ©seaux de neurones, nous aurions une prĂ©diction du mouvement des planĂštes qui ne baserait sur aucune thĂ©orie, qui serait Ă peu prĂšs exacte mais insuffisamment prĂ©cise pour envoyer des sondes sur Mars. Quant Ă sâinterroger sur la prĂ©cession du pĂ©rihĂ©lie de Mercure, on oublie.
De maniĂšre gĂ©nĂ©rale, on peut sâinterroger sur ce qui amĂšne un rĂ©seau de neurones Ă se planter. On peut diviser les erreurs en plusieurs catĂ©gories :
- La question posĂ©e nâa aucun rapport avec les donnĂ©es passĂ©es en entrĂ©e. Par exemple : « Sachant que la derniĂšre personne que jâai croisĂ©e dans la rue avait 42 ans, indique-moi son genre ». Le modĂšle nâa pas assez dâinformation pour rĂ©pondre.
- La question posĂ©e nâa aucun rapport avec lâensemble dâapprentissage. Par exemple, demander Ă un modĂšle entraĂźnĂ© Ă reconnaĂźtre des photos de chien de reconnaĂźtre une voiture. En gĂ©nĂ©ral, ce problĂšme est rĂ©solu en contraignant le format des questions ; dans cet exemple, il suffirait de ne pas permettre Ă lâutilisateur de poser une question, juste de poster une photo et de recevoir une rĂ©ponse. Dâailleurs, on ne voit pas trĂšs bien pourquoi entraĂźner un tel modĂšle Ă traiter du langage.
- Lâensemble dâapprentissage est trop restreint/biaisĂ©. Lâexemple typique est le modĂšle qui prĂ©tendait reconnaĂźtre les dĂ©linquants Ă une simple photo et identifiait en fait tous les noirs : ben oui, ils Ă©taient majoritaires dans les dĂ©linquants de lâensemble dâapprentissage. Noter quâil existe des problĂšmes oĂč lâensemble dâapprentissage sera toujours trop restreint pour un certain niveau de prĂ©cision exigĂ©. Si on demande Ă un rĂ©seau de dire si un point donnĂ© est Ă lâintĂ©rieur ou Ă lâextĂ©rieur dâun flocon de Koch, il va falloir lui passer une infinitĂ© de donnĂ©es dâapprentissage pour quâil apprenne les cas limites juste par interpolation (alors quâavec un modĂšle formel, ça serait assez facile).
- Le modĂšle est parasitĂ© par une donnĂ©e annexe : câest une problĂ©matique assez spĂ©cifique du rĂ©seau de neurones. Lâexemple le plus classique est celui des images de mains : aprĂšs tout, le voisin le plus probable dâun doigt, câest un autre doigt. Lâamusant, câest que ce problĂšme serait rĂ©solu assez facilement en demandant au modĂšle de compter 4 doigts et un pouce. Mais comme on ne peut pas programmer directement un rĂ©seau de neuronesâŠ
- Enfin, si les motifs prĂ©cĂ©dents ont Ă©tĂ© Ă©cartĂ©s, je dois me demander si mon modĂšle nâest pas inadaptĂ© : soit quâil nâa pas assez de neurones, soit que la topologie nâest pas bonne. Plus de neurones permettent de traiter des donnĂ©es plus complexes et leur disposition permet dâaugmenter leur efficacitĂ©.
En dĂ©finitive, on peut voir le rĂ©seau de neurones comme un outil qui rĂ©sout approximativement un problĂšme mal posĂ©. Sâil existe une solution formelle, et quâon sait la coder en un temps acceptable, il faut le faire. Sinon, le rĂ©seau de neurones fera un taf acceptable.
Le but du logiciel libre est de rendre le pouvoir Ă lâutilisateur
On a beaucoup glosĂ©, et on continuera de le faire longtemps, sur la philosophie du Libre. Free Software Foundation dâun cĂŽtĂ©, Open Source Initiative de lâautre, les sujets de discorde ne manquent pas. Mais il faut au moins crĂ©diter lâOSI sur un point : avoir clarifiĂ© le fait que le Libre est avant tout un mouvement politique, au sens noble du terme : il vise Ă peser sur la vie de la citĂ©, alors que lâOpen Source vise avant tout Ă disposer de logiciels de qualitĂ©.
La premiÚre des libertés est celle de savoir ce que je fais
Ăa paraĂźt Ă©vident dans la vie de tous les jours : je sais ce que je fais. Si je dĂ©cide de prendre une pelle et de planter un arbre dans mon jardin, je sais que je suis en train de prendre une pelle et de planter un arbre dans mon jardin. Si je dĂ©cide de prendre un couteau et de le planter dans le thorax de mon voisin, je sais ce que je fais. Câest une libertĂ© fondamentale, au sens oĂč elle fonde toutes les autres. Si je ne sais pas ce que je fais, je ne peux signer un contrat, par exemple (câest dâailleurs le principe qui sous-tend le rĂ©gime de la tutelle en droit). Dâailleurs, comme toute libertĂ©, elle fonde une responsabilitĂ©. Si je ne savais pas ce que je faisais (et que je peux le prouver), je peux plaider lâabolition du discernement et Ă©chapper Ă ma responsabilitĂ© pĂ©nale, quelle que soit lâinfraction commise, mĂȘme les plus graves2
Dans la vie de tous les jours, donc, il est Ă©vident que je sais ce que je fais. Mais avec un ordinateur, câest beaucoup moins Ă©vident. Quand jâexĂ©cute Windows, je ne sais pas ce que je fais. Pas seulement parce que je ne connais pas la sĂ©quence de boot, mais de façon beaucoup plus fondamentale : parce que nâayant pas accĂšs au code source, je ne sais pas ce que fait le programme que jâexĂ©cute. Ce qui pose un problĂšme majeur de confiance dans le logiciel exĂ©cutĂ© :
- Confiance dans le fait que le programme fait bien ce que son programmeur a voulu quâil fasse (absence de bugs)
- Confiance dans le fait que le programmeur avait bien mon intĂ©rĂȘt en tĂȘte et pas seulement le sien (sincĂ©ritĂ© du programmeur, frĂ©quemment prise en dĂ©faut dans le logiciel non libre)
Dans le systĂšme des 4 libertĂ©s du logiciel libre, cette libertĂ© est la libertĂ© 1. Elle passe aprĂšs la libertĂ© 0 (libertĂ© dâexĂ©cuter le programme) et avant la libertĂ© 2 (libertĂ© de redistribuer le programme). On pourrait lĂ©gitimement discuter de sa prioritĂ© par rapport Ă la libertĂ© 0 (est-il raisonnable dâexĂ©cuter un programme dont on ne sait pas ce quâil fait ?) mais ça dĂ©passerait lâobjet de cette dĂ©pĂȘche.
Si je sais ce que je fais, je dois pouvoir modifier ce que je fais
ConsĂ©quence logique de la libertĂ© prĂ©cĂ©dente : si je nâaime pas ce que fait un programme, je dois pouvoir lâamĂ©liorer. Si je ne sais pas le faire moi-mĂȘme, je dois pouvoir payer quelquâun pour lâamĂ©liorer. LĂ encore, ça suppose lâaccĂšs au code source, ne serait-ce que pour savoir ce que fait le programme. Il sâagit de la libertĂ© 3 du logiciel libre.
Le réseau de neurones est difficilement compatible avec le libre
Personne ne sait vraiment ce que fait un réseau de neurones
On lâa vu, les rĂ©seaux de neurones prĂ©sentent un effet boĂźte noire important. DĂ©jĂ , la plupart des IA commerciales ne sont accessibles quâau travers dâune interface ou une API. Elles nâexposent que rarement les neurones. Mais mĂȘme pour une personne disposant de tous les neurones, autrement dit de la description complĂšte du rĂ©seau, lâeffet boĂźte noire est tel que le fonctionnement du rĂ©seau de neurones est inintelligible. Dâailleurs, sâil Ă©tait intelligible, il serait trĂšs vite simplifiĂ© !
En effet, on peut recoder tout rĂ©seau de neurones dans un langage plus rapide, dĂšs lors quâon comprend ce quâil fait (puisquâil est Turing-complet). Vu la consommation astronomique dâĂ©nergie des rĂ©seaux de neurones, sâil existait un moyen de comprendre ce que fait un rĂ©seau de neurones et de le traduire dans un autre langage, on le ferait trĂšs vite. Ce qui fournirait dâailleurs des rĂ©ponses Ă des questions thĂ©oriques ouvertes comme : quâest-ce que comprendre une phrase ? Comment reconnaĂźt-on un chien, un visage, un avion ?
Disposer de la description complĂšte dâun rĂ©seau de neurones ne permet pas de lâamĂ©liorer
On lâa vu : si je dispose de la totalitĂ© des neurones, je dispose de la totalitĂ© de la description du rĂ©seau de neurones. Mais comme je suis incapable de savoir ce quâil fait, je ne suis pas plus avancĂ© pour lâamĂ©liorer, quâil sâagisse de retirer un dĂ©faut ou dâajouter une fonctionnalitĂ©. Noter dâailleurs que ceci nâest pas forcĂ©ment impactant de la mĂȘme maniĂšre pour tous les aspects du rĂ©seau de neurones : si je nâai aucun moyen dâĂȘtre sĂ»r de lâabsence de bugs (câest mĂȘme le contraire ! Il y a forcĂ©ment des bugs, câest juste que je ne les ai pas trouvĂ©s ou quâils ne sont pas corrigeables), jâai en revanche peu dâinquiĂ©tude Ă avoir concernant la sincĂ©ritĂ© du programmeur : comme lui non plus ne maĂźtrise pas sa bestiole, pas de risque quâil soit insincĂšre3.
La dĂ©finition du code source dâun rĂ©seau de neurones est ambiguĂ«
Posons-nous un instant la question : quâest-ce que le code source dâun rĂ©seau de neurones ? Est-ce la liste des neurones ? Comme on lâa vu, ils ne permettent ni de comprendre ce que fait le rĂ©seau, ni de le modifier. Ce sont donc de mauvais candidats. La GPL fournit une dĂ©finition : le code source est la forme de lâĆuvre privilĂ©giĂ©e pour effectuer des modifications. Dans cette acception, le code source dâun rĂ©seau de neurones serait lâalgorithme dâentraĂźnement, le rĂ©seau de neurones de dĂ©part et le corpus sur lequel le rĂ©seau a Ă©tĂ© entraĂźnĂ©.
Cette ambiguïté fait courir un risque juridique sous certaines licences libres
Tu devines alors, cher lecteur, lĂ oĂč je veux en venir⊠Si le corpus comprend des Ćuvres non libres, tu nâas tout simplement pas le droit de le diffuser sous une licence libre ! Et si tu tâes limitĂ© Ă des Ćuvres libres pour entraĂźner ton modĂšle, tu risques fort dâavoir un ensemble dâapprentissage trop restreint, donc un rĂ©seau de neurones sans intĂ©rĂȘt.
Alors il y a quatre moyens de tricher.
Le premier, câest de tâasseoir sur la GPL et de considĂ©rer quâen distribuant les neurones, tu as fait le taf. La ficelle est grossiĂšre. Je viens de passer une dĂ©pĂȘche Ă te dĂ©montrer que câest faux, tu pourrais au moins me montrer un peu plus de respect.
Le deuxiĂšme, câest de distribuer sous une licence non copyleft, genre BSD ou WTFPL. Une licence qui ne nĂ©cessite pas de distribuer le code source. Certes, mais en fait tu ne fais pas du Libre.
Le troisiĂšme, câest de considĂ©rer le rĂ©seau de neurones comme une donnĂ©e, pas un exĂ©cutable. Donc pas de code source. La partie sous GPL serait alors lâinterface graphique, et le rĂ©seau, une donnĂ©e. Câest assez limite. Une donnĂ©e exĂ©cutable, ça sâapproche dangereusement dâun blob binaire.
Le quatriĂšme, câest de repenser complĂštement le paradigme du logiciel libre et de considĂ©rer quâil vise avant tout Ă rĂ©Ă©quilibrer les rapports de pouvoir entre programmeur et utilisateur, et quâen redistribuant les neurones, tu as fait le job. Sur les rapports de pouvoir, tu nâas pas tort ! Mais dâune part, ça ne tiendra pas la route devant un tribunal. Dâautre part, il persiste une asymĂ©trie de pouvoir : tu as accĂšs au corpus, pas lâutilisateur.
Quand bien mĂȘme on admettrait que le code source est lâensemble corpus + algorithme dâoptimisation + rĂ©seau de neurones de dĂ©part, lâoptimisation dâun rĂ©seau de neurones consomme autrement plus de ressources que la compilation dâun programme plus classique, des ressources qui sont loin dâĂȘtre Ă la portĂ©e du quidam classique. Ă quoi servirait un code source impossible Ă compiler ?
Enfin, mĂȘme cette dĂ©finition du code source pose problĂšme : elle nâest en fait pas beaucoup plus lisible que le rĂ©seau lui-mĂȘme. Ce nâest pas parce que jâai accĂšs aux centaines (de milliers) de textes sur lesquels un rĂ©seau a Ă©tĂ© entraĂźnĂ© que je peux prĂ©dire comment il va se comporter face Ă une nouvelle question.
Comment les boĂźtes qui font de lâIA non libre rĂ©solvent-elles ce dilemme ? Elles ne le rĂ©solvent pas
Câest presque enfoncer une porte ouverte que dire que lâIA pose de nombreuses questions de droit dâauteur, y compris dans le petit microcosme du non-libre. Cependant, les IA non-libres ont un avantage sur ce point : si le rĂ©seau de neurones ne permet pas de remonter au corpus initial (donc en lâabsence de surapprentissage), alors elles peuvent tranquillement nier avoir plagiĂ© une Ćuvre donnĂ©e. Tu ne me verras pas dĂ©fendre les pauvres auteurs spoliĂ©s, car jâai toujours considĂ©rĂ© que la nature mĂȘme de lâinformation est de circuler sans barriĂšres (Information wants to be free, tout ça) et que le droit dâauteur en est une, et particuliĂšrement perverse.
La dĂ©finition dâune IA open source ressemble furieusement Ă un constat dâĂ©chec
LâOSI a publiĂ© une dĂ©finition dâIA open source. Cette dĂ©finition mĂ©rite quâon sây attarde.
Premier point intĂ©ressant : aprĂšs des annĂ©es Ă tenter de se dĂ©marquer du Libre, notamment via la dĂ©finition de lâOpen Source qui tente de reformuler les 4 libertĂ©s sans recopier les 4 libertĂ©rs, lâOSI baisse les bras : est open source une IA qui respecte les 4 libertĂ©s.
DeuxiĂšme point intĂ©ressant : est open source une IA qui publie la liste des neurones, le corpus dâentraĂźnement et la mĂ©thode dâentraĂźnement. En fait, ça revient Ă ne pas choisir entre les neurones et leur mĂ©thode dâentraĂźnement. Soit, mais ça ne rĂ©sout pas le problĂšme de lâeffet boĂźte noire. Au mieux, ça revient Ă admettre quâil est le mĂȘme pour le programmeur et lâutilisateur.
Conclusion : quâattendre dâune IA libre ?
Il ne fait aucun doute que dĂ©velopper des IA libres exigera de nouvelles licences. La GPL, on lâa vu, expose Ă un risque juridique du fait de lâambiguĂŻtĂ© de la dĂ©finition du code source.
Il est Ă noter, dâailleurs, quâune IA repose rarement exclusivement sur son rĂ©seau de neurones : il y a systĂ©matiquement au moins un logiciel classique pour recueillir les inputs de lâutilisateur et les passer au rĂ©seau de neurones, et un second en sortie pour prĂ©senter les outputs. Ces briques logicielles, elles, peuvent tout Ă fait suivre le paradigme classique du logiciel libre.
En dĂ©finitive, cher lecteur qui ne dĂ©veloppes pas dâIA, je tâinvite surtout Ă te demander : quâattends-tu dâune IA ? Quâentends-tu quand on te parle dâIA libre ? Plus fondamentalement, lâIA serait-elle un des rares domaines oĂč il existe une distinction pratique entre libre et Open Source ?
Il nây a pas de façon simple de faire une IA libre, il nây a peut-ĂȘtre pas de façon du tout. Mais le principe du libre, câest que câest Ă lâutilisateur in fine de prendre ses dĂ©cisions, et les responsabilitĂ©s qui vont avec. Je nâespĂšre pas tâavoir fait changer dâavis : jâespĂšre modestement tâavoir fourni quelques clĂ©s pour enrichir ta rĂ©flexion sur le sens Ă donner au vocable IA open source quâon voit fleurir ici et lĂ .
-
Et je mettrai « artificiel » Ă la poubelle parce que Implicit is better than explicit, rien que pour embĂȘter Guido). â©
-
Bon, certaines infractions complexes Ă exĂ©cuter, comme le trafic de drogue ou le gĂ©nocide, requiĂšrent une certaine implication intellectuelle et sont donc peu compatibles avec lâaltĂ©ration du discernement, mais câest liĂ© au fait que lâinfraction elle-mĂȘme requiert un certain discernement. â©
-
Du moins au niveau du rĂ©seau de neurones lui-mĂȘme. Les entrĂ©es et les sorties peuvent tout Ă fait passer par une moulinette insincĂšre et codĂ©e dans un langage tout Ă fait classique. â©
Commentaires : voir le flux Atom ouvrir dans le navigateur