❌

Vue normale

Reçu avant avant-hier

Une intelligence artificielle libre est-elle possible ?

26 février 2025 à 20:47

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

    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 CholestĂ©rol = A\times IMC + B 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 \beta 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.

    Neurone naturel

    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 f (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 : f(x) = 0 si x < 0, 1 sinon
    • La fonction logistique, une amĂ©lioration de la fonction binaire : f(x) = \frac{1}{1 + e^{-x}}. 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 ») : f(x) = 0 si x<0, x sinon. Avantage : elle est trĂšs facile (donc rapide) Ă  calculer et Ă  dĂ©river. On peut la rendre strictement monotone en la modifiant Ă  la marge : f(x) = \epsilon\times x si x<0, x sinon, avec 0<\epsilon << 1.

    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 \beta_{IMC} 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 \beta 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 \beta_i). 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 c\times n^2 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 10\times 20^2 = 4000 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Ă .


    1. Et je mettrai « artificiel Â» Ă  la poubelle parce que Implicit is better than explicit, rien que pour embĂȘter Guido). â†©

    2. 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. â†©

    3. 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

    ❌