Le dernier chapitre de l’intelligence artificielle et de la programmation

Source originale : RPSC

Source de l’image : Généré par Unbounded AI

Plus tôt cette année, Matt Welsh a annoncé que la programmation touchait à sa fin. Il a écrit dans ACM Communications :

Je crois que l’idée traditionnelle d'«écrire des programmes » est en train de mourir, en fait, pour toutes les applications sauf très spécialisées, telles que nous les connaissons, la plupart des programmes logiciels seront remplacés par des systèmes d’IA entraînés. Dans certains cas où seuls des programmes « simples » sont nécessaires (après tout, tout ne nécessite pas des modèles de centaines de milliards de paramètres fonctionnant sur des clusters GPU), les programmes eux-mêmes seront générés directement par l’IA, plutôt que codés à la main.

Quelques semaines plus tard, dans un discours, Wales a élargi ses observations de mort. Ce n’est pas seulement l’art de la programmation qui va à la tombe, mais l’informatique dans son ensemble. Toute l’informatique est « condamnée ». (L’image ci-dessous est une capture d’écran du discours.) )

Les livreurs de ces tristes messages ne semblent pas être submergés par le chagrin. Bien que Welsh soit devenu professeur et praticien en informatique (à Harvard, Google, Apple et ailleurs), il semble impatient de passer à l’étape suivante. « De toute façon, écrire du code est nul! » », a-t-il déclaré.

Je ne suis pas très optimiste quant à l’avenir de la post-programmation. Tout d’abord, je suis sceptique. Je ne pense pas que nous ayons franchi le seuil pour que les machines apprennent à résoudre des problèmes de calcul intéressants par elles-mêmes. Je ne pense pas que nous en soyons encore proches, ou que nous allions dans la bonne direction. De plus, s’il s’avère que mon point de vue est faux, mon impulsion n’est pas d’acquiescer mais de résister. D’une part, je n’accueille pas favorablement notre nouveau seigneur de l’IA. Même s’ils s’avèrent être de meilleurs programmeurs que moi, je continuerai toujours à utiliser mon éditeur de code et mon compilateur, merci. « La programmation est nulle? » Pour moi, c’est depuis longtemps une source de joie et d’inspiration pour moi. Je trouve aussi que c’est un outil précieux pour comprendre le monde. Je ne suis jamais sûr de le comprendre jusqu’à ce que je sois capable de réduire une idée au code. Pour bénéficier de cette expérience d’apprentissage, j’ai dû écrire le programme au lieu de simplement dire quelques mots magiques et d’invoquer un génie de la lampe IA d’Aladdin.

Grand modèle de langage

L’idée que les machines programmables pourraient écrire leurs propres programmes est profondément enracinée dans l’histoire de l’informatique. Charles Babbage a fait allusion à cette possibilité dès 1836 lorsqu’il a discuté de son projet de machine analytique. Lorsque Fortran a été introduit en 1957, son nom officiel était « FORTRAN Automatic Coding System ». Son objectif déclaré est que les ordinateurs « codent les problèmes pour eux-mêmes et produisent des programmes aussi bons (mais sans erreurs) que les codeurs humains ».

Fortran n’élimine pas les astuces (ou erreurs) de programmation, mais il rend le processus moins fastidieux. Les langages ultérieurs et d’autres outils ont apporté d’autres améliorations. Et le rêve d’une programmation entièrement automatisée n’a jamais été déçu. Les machines semblent être mieux adaptées à la programmation que la plupart. Les ordinateurs sont méthodiques, liés à des règles, fastidieux et littéraux – tous ces traits (bons ou mauvais) sont associés à des programmeurs experts.

Ironiquement, les systèmes d’IA maintenant prêts à assumer des tâches de programmation ne sont curieusement pas comme les ordinateurs. Leurs personnalités ressemblent plus à Deanna Troi qu’au commandant Data. La cohérence logique, le raisonnement causal et l’attention particulière aux détails ne sont pas leurs points forts. Ils ont des moments incroyablement brillants où ils semblent réfléchir à des pensées profondes, mais ils ont aussi le potentiel d’un échec étonnant – des erreurs flagrantes et effrontées de la raison. Ils me rappellent une vieille boutade : les gens font des erreurs, et il faut un ordinateur pour vraiment gâcher les choses.

Le dernier système d’IA s’appelle le Big Language Model (LLM). Comme la plupart des autres inventions récentes en IA, elles sont construites sur des réseaux de neurones artificiels, une structure multicouche inspirée de la structure du cerveau. Les nœuds d’un réseau sont similaires aux neurones biologiques, et les connexions entre les nœuds agissent comme des synapses, qui sont les points de connexion où les signaux sont transmis d’un neurone à un autre. Le réseau d’entraînement peut ajuster la force ou le poids de la connexion. Dans un modèle de langage, la formation se fait en forçant une grande quantité de texte dans le réseau. Lorsque le processus est terminé, les poids de jointure encodent des statistiques détaillées sur les caractéristiques linguistiques du texte de formation. Dans le plus grand modèle, le nombre de poids est de 100 milliards ou plus.

Dans ce cas, le terme modèle peut être trompeur. Le terme ne fait pas référence aux modèles réduits ou miniatures, tels que les modèles réduits d’avions. Au lieu de cela, il se réfère à des modèles prédictifs, comme les modèles mathématiques couramment trouvés en science. Tout comme les modèles atmosphériques prédisent le temps de demain, les modèles linguistiques prédisent le mot suivant dans une phrase.

Le modèle de langage à grande échelle le plus célèbre est ChatGPT, qui a été rendu public l’automne dernier et a attiré une grande attention. Abréviation GPT Gee Pee Tee: Ma langue trébuche constamment sur ces trois syllabes qui riment. D’autres produits d’IA ont des noms mignons, tels que Bart, Claude, Llama; J’aimerais pouvoir renommer GPT dans le même esprit. Je l’appellerais Geppetto, et il fait écho au modèle des consonnes. GPT signifie Generative Pre-Trained Transformer; La version chat du système est équipée d’une IHM conversationnelle. ChatGPT a été développé par OpenAI, qui a été fondée en 2015 pour libérer l’IA du contrôle d’une poignée de riches entreprises technologiques. OpenAI a accompli cette mission avec succès au point qu’elle est devenue une riche entreprise technologique.

ChatGPT est à la fois admirable et choquant pour sa formulation, sa capacité à bien parler, sa maîtrise de l’anglais et d’autres langues. Le chatbot peut imiter des auteurs célèbres, raconter des blagues, écrire des lettres d’amour, traduire de la poésie, écrire du spam, « aider » les étudiants à faire leurs devoirs et concocter de la désinformation pour la désinformation politique. Pour le meilleur ou pour le pire, ces compétences linguistiques représentent des avancées technologiques étonnantes. Les ordinateurs qui avaient autrefois du mal à construire une phrase compréhensible sont soudainement devenus maîtres des mots. Ce que dit le TPG peut être vrai ou non, mais il est presque toujours bien formulé.

Peu de temps après la sortie de ChatGPT, j’ai été surpris de constater que sa maîtrise du langage s’étendait aux langages de programmation. L’ensemble d’apprentissage du modèle semble inclure non seulement plusieurs langages naturels, mais aussi une grande quantité de code source de programme provenant de référentiels publics tels que GitHub. Sur la base de cette ressource, GPT est capable d’écrire de nouveaux programmes basés sur des commandes. J’ai trouvé cela surprenant parce que les ordinateurs sont si pointilleux et implacables sur leur contribution. Bien que les ordinateurs aient parfois de petites erreurs telles que des fautes d’orthographe, les lecteurs humains ont du mal à comprendre une phrase. Mais si l’ordinateur reçoit une entrée avec ne serait-ce qu’une virgule ou une parenthèse incompatible, il vomira brouillé. Les modèles linguistiques ayant des propriétés potentiellement statistiques ou probabilistes semblent peu susceptibles de maintenir la précision requise au-delà de quelques lignes.

Je me suis encore trompé sur cette question. Une innovation clé dans les grands modèles linguistiques, le mécanisme d’attention, résout ce problème. Lorsque j’ai commencé à expérimenter avec ChatGPT moi-même, j’ai rapidement découvert qu’il pouvait en effet générer des programmes sans erreurs de grammaire négligentes.

Mais d’autres problèmes ont suivi.

Gravir les échelons du mot

Lorsque vous vous asseyez pour discuter avec une machine, vous êtes immédiatement confronté à une question embarrassante: « De quoi devrions-nous parler? » Je cherche un sujet qui mesure équitablement les capacités de programmation ChatGPT. Je veux un problème qui peut être résolu par des moyens informatiques, mais cela ne nécessite pas beaucoup d’arithmétique, ce qui est considéré comme l’une des faiblesses des grands modèles linguistiques. J’ai choisi le jeu d’anagrammes inventé par Lewis Carroll il y a 150 ans et analysé en profondeur par Donald E. Knuth dans les années 90 du 20ème siècle.

Dans la transcription ci-dessous, chaque échange de mon côté est marqué BR; La rosette est le logo OpenAI qui spécifie la réponse de ChatGPT.

Quand j’ai vu ces phrases se dérouler à l’écran – le chatbot les tapant mot pour mot, un peu erratique, comme s’il s’arrêtait pour trier mes pensées – j’ai été immédiatement époustouflé par la capacité anglaise du système. GPT énumère toutes les caractéristiques de base de l’échelle de mots dans une prose simple et puissante: c’est un jeu ou un puzzle où vous allez de mot en mot en changeant une lettre à la fois, chaque barreau de l’échelle doit être un mot anglais, et le but est de trouver la séquence la plus courte possible du mot de départ au mot cible. Moi-même, je ne peux pas mieux l’expliquer. Le plus utile est l’exemple de travail de COLD-> WARM.

Ce ne sont pas seulement les phrases individuelles qui donnent l’impression de capacité linguistique. Les phrases sont organisées en paragraphes, qui sont enchaînés ensemble pour former un discours cohérent. C’est super!

Il convient également de noter la capacité du robot à gérer les entrées floues et bâclées. Ma requête initiale a été formulée comme une question oui ou non, mais ChatGPT l’a correctement interprétée comme une demande: « Dites-moi ce que vous savez sur le mot échelle. » Ma deuxième instruction ignore tous les indices typographiques indiquant que LEAD et GOLD doivent être compris comme des mots, pas comme du métal. Le chatbot était censé me fournir des recettes d’alchimie, mais il a fourni les citations manquantes.

Cependant, en mettant de côté toute cette complexité linguistique et rhétorique, ce que je voulais vraiment tester, c’était la capacité du programme à résoudre le problème de l’échelle des mots. Les deux exemples de la transcription ci-dessus peuvent être trouvés sur le Web, ils sont donc susceptibles d’apparaître dans les données de formation de ChatGPT. En d’autres termes, les grands modèles de langage peuvent simplement se souvenir des solutions au lieu de les construire. J’ai donc soumis une mission encore plus difficile :

À première vue, ChatGPT semble avoir triomphé à nouveau, résolvant un puzzle que je suis sûr qu’il n’a jamais rencontré auparavant. Mais regardez de plus près. MARSH -> MARIS NÉCESSITE UNE SUBSTITUTION DE DEUX LETTRES, TOUT COMME PARIL -> APRIL. Le statut de MARIS et PARIL en tant que « mots valides » peut également être remis en question. Je me suis plaint :

Pleurage! Le robot offre des confessions et des excuses glissantes, mais l’échelle « correcte » est plus folle que jamais. On dirait que nous jouons au Scrabble avec Humpty Dumpty dans la comptine Mother Goose et que nous déclarons également « Je dis APRCHI est un mot, c’est un mot! » Ensuite, dispersez toutes les tuiles.

Il ne s’agit pas d’un échec distinct et unique. Toutes mes tentatives pour résoudre l’échelle des mots avec ChatGPT ont dérapé, mais pas toujours de la même manière. Dans un cas, j’ai demandé une échelle de REACH à GRASP. Les experts en IA proposent cette solution :

REACH -> TEACH -> PEACH -> PEACE -> PACES -> PARES -> PARSE -> PARSE -> PARSE -> PARSE -> PARKS -> PARKS -> PARKS -> PARKS -> PARES -> GRASP.

Et ceci :

ÉPÉE -> SWARD -> RÉCOMPENSE -> RETIRAGE -> RETIRAGE -> RETIRÉ -> REDREW -> REDREW -> RETIRAGE -> REMBOURSÉ -> RÉPARATION -> PAIX

Maintenant, nous babillons comme des petits enfants qui viennent d’apprendre à compter: « Un, deux, trois, quatre, quatre, trois, quatre, quatre, sept, bleu, dix! » "

Tous les résultats que j’ai montrés jusqu’à présent sont documentés avec ChatGPT version 3.5. J’ai également essayé la nouvelle version améliorée 4.0, qui est sortie en mars. Le robot mis à jour dégage la même confiance aimable, mais je crains qu’il ait les mêmes tendances, tombant dans une incohérence occasionnelle:

L’échelle commence bien avec quatre étapes, en suivant toutes les règles. Mais ensuite, l’IA est distraite. PASSER DE PLAGE À PAGES NÉCESSITE UNE SUBSTITUTION DE QUATRE LETTRES. ENSUITE, IL Y A PASES, QUI N’EST PAS UN MOT (POUR AUTANT QUE JE SACHE) ET N’EST PAS NÉCESSAIRE ICI DE TOUTE FAÇON, PUISQUE LES SÉQUENCES PEUVENT ALLER DIRECTEMENT DES PAGES AUX PARES. Plus de stupidité a suivi. Pourtant, j’apprécie la note d’information sur PLAGE.

Récemment, j’ai également eu la chance d’essayer Llama 2, un LLM publié par Meta (personnes Facebook). Bien que ce modèle ait été développé indépendamment du TPG, il semble avoir certaines des mêmes bizarreries psychologiques, telles que l’établissement de règles et leur ignorance. Lorsque j’ai demandé une échelle reliant REACH et GRASP, le lama 2 a suggéré ceci:

REACH -> ENSEIGNER -> DEACH -> LEACH -> PAROLE -> ASSIS -> PIEDS -> GRASP

Prophétie et Code Singe

Matt Welsh mentionne deux modes de fonctionnement pour les systèmes informatiques construits sur de grands modèles de langage. Jusqu’à présent, nous avons travaillé dans ce que j’appelle le mode prophétique, où vous posez une question et l’ordinateur renvoie une réponse. Vous fournissez une paire de mots, et le système trouve une échelle qui les relie et effectue tous les calculs nécessaires pour y arriver. Vous livrez une boîte à chaussures pleine de documents financiers et l’ordinateur remplit votre formulaire 1040. Vous compilez des données climatiques historiques et l’ordinateur prédit la température moyenne mondiale en 2050.

L’alternative aux oracles d’IA est l’AI Code Monkey. Dans le second mode, la machine ne répond pas directement à vos questions ni n’effectue vos calculs ; Au lieu de cela, il crée un programme qui peut s’exécuter sur un ordinateur conventionnel. Au lieu d’une échelle de mots de votre bot, vous renvoyez un programme qui génère une échelle de mots, écrite dans le langage de programmation de votre choix. Au lieu de remplir une déclaration de revenus complète, vous obtenez un logiciel de préparation de déclarations de revenus; Les modèles climatiques remplacent les prévisions de température.

Essayons-le avec ChatGPT 3.5:

Vous pouvez utiliser la fonction wordLadder pour résoudre des énigmes d’échelle. Voici un exemple d’utilisation :

Son résultat est le suivant :

Notez qu’il s’agit d’une démonstration de base, et pour les échelles plus grandes ou les scénarios plus complexes, des optimisations ou des algorithmes supplémentaires peuvent être nécessaires, tels que la recherche en largeur.

Encore une fois, un coup d’œil rapide à la sortie montre que la performance a été réussie. ChatGPT semble parler aussi couramment Java que l’anglais. Il connaît la syntaxe des instructions if, while et for, ainsi que toutes les règles de ponctuation et de parenthèses pointilleuses. Les programmes générés par machine semblent combiner tous ces composants pour accomplir une tâche spécifiée. Faites également attention au grand nombre de commentaires explicatifs, qui sont certainement à notre avantage, pas à cela. De même, les noms de variables descriptives (currentWord, newWord, ladder).

ChatGPT inclut également de manière proactive des instructions pour exécuter le programme sur un exemple spécifique (MARS à AVRIL), et il imprime le résultat qui correspond à la réponse donnée dans notre échange précédent. Cette sortie est-elle générée par l’exécution du programme ? ChatGPT ne dis-le pas explicitement, mais il prétend que si vous exécutez le programme comme indiqué, vous obtiendrez les résultats affichés (en toute gloire ridicule).

Nous pouvons tester cette déclaration en chargeant le programme dans un navigateur Web ou un autre environnement d’exécution Java. La conclusion : attrapé ! Le programme s’est exécuté, mais n’a pas produit le résultat spécifié. LE RÉSULTAT RÉEL DU PROGRAMME EST: MARS -> AARCH -> AVRIL -> AVRIL -> AVRIL. Cette séquence n’est pas si étrange car elle suit la règle de ne changer qu’une seule lettre à la fois, et tous les « mots » ont exactement cinq lettres. D’autre part, aucun « mot » intermédiaire ne peut être trouvé dans les dictionnaires anglais.

IL EXISTE UN ALGORITHME SIMPLE QUI GÉNÈRE DES SÉQUENCES MARS -> AARCH -> APRCH -> APRIH -> AVRIL. Il suffit de parcourir le mot de départ étape par étape de gauche à droite, en changeant la lettre dans chaque position pour correspondre à la lettre correspondante dans le mot cible. En suivant cette règle, n’importe quelle paire de mots de cinq lettres peut être organisée en étapes en cinq étapes maximum. MARS > AVRIL ne prend que quatre étapes car le R au milieu n’a pas besoin d’être changé. Je ne peux pas imaginer un moyen plus facile de créer une échelle de mots – en supposant, bien sûr, que vous êtes prêt à faire en sorte que n’importe quel mélange de lettres compte pour un seul mot.

Le programme créé par ChatGPT peut utiliser cette routine rapide et sale, mais il fait quelque chose de beaucoup plus fastidieux: il construit toutes les échelles possibles, dont la première est le mot de départ, et continue à étendre ces échelles jusqu’à ce qu’il tombe sur celle qui contient le mot cible. Il s’agit d’un algorithme de force brute inutile. Chaque lettre du mot de départ peut être modifiée de 25 façons. Ainsi, un mot de 5 lettres a 125 successeurs possibles. Lorsque vous atteignez l’échelle à cinq marches, il y a 190 millions de possibilités. (LES EXEMPLES QUE J’AI FOURNIS ICI, TELS QUE MARS-> AVRIL ET REACH-> GRAMP, ONT UNE LETTRE INVARIANTE, DE SORTE QUE LA SOLUTION NE PREND QUE QUATRE ÉTAPES.) Essayer de calculer la solution complète en cinq étapes a épuisé ma patience. )

Code Monkey de 4e génération

Essayons le même exercice de codage avec ChatGPT 4. Compte tenu du même indice, le nouveau bot répond comme suit :

Le programme a la même structure globale (une boucle while avec deux boucles imbriquées à l’intérieur) et utilise la même stratégie algorithmique (générer toutes les chaînes qui sont différentes d’un mot donné en un seul endroit). Mais la version GPT-4 a une grande nouveauté : la reconnaissance d’une liste de mots est essentielle. Avec ce changement, nous avons enfin l’espoir de générer une échelle de vrais mots.

Bien que GPT-4 reconnaisse la nécessité d’une liste, il ne fournit qu’un espace réservé, la séquence de 10 mots qu’il configure pour l’exemple REACH-> GRASP donné ci-dessus. Les talons de cette liste de mots sont de peu d’utilité, pas même pour régénérer la fausse échelle « REACH-to-GRASP ». Si vous essayez de le faire, le programme signalera qu’aucune échelle n’existe. Il n’y a rien de mal à ce résultat, car 10 mots donnés ne constituent pas un chemin efficace pour changer une seule lettre par étape.

Même si les mots de la liste sont choisis avec soin, le vocabulaire de 10 est très insignifiant. Générer des listes de mots plus grandes semble être une tâche facile pour les modèles de langage. Après tout, LLM est formé sur un énorme corpus de textes, où presque tous les mots anglais sont susceptibles d’apparaître au moins une fois, tandis que les mots communs apparaissent des millions de fois. Le robot ne peut-il pas prendre un échantillon représentatif de ces mots? La réponse est clairement non. Bien que l’on puisse dire que GPT a « lu » tout ce texte, il ne stocke pas ces mots sous une forme facilement accessible. (Il en va de même pour les lecteurs humains.) Pouvez-vous faire une liste des 10 mots de cinq lettres les plus courants dans votre vocabulaire en revenant sur une vie d’expériences de lecture?

Lorsque j’ai demandé à ChatGPT 4 de générer une liste de mots, il s’est excusé: « Je suis désolé pour la confusion, mais en tant qu’IA développée par OpenAI, je ne peux pas accéder directement à la base de données de mots ou obtenir la possibilité d’obtenir des données de sources externes ... » J’ai donc essayé quelques astuces et j’ai demandé au robot d’écrire une histoire de 1000 mots, puis de trier les mots de l’histoire par fréquence. L’astuce a fonctionné, mais l’échantillon était trop petit pour être d’une grande utilité. Tant que je m’y tiens, je pourrais peut-être obtenir une liste acceptable de GPT, mais je prends un raccourci. Après tout, je ne suis pas une IA développée par OpenAI, et j’ai accès à des ressources externes. Je me suis approprié une liste de 5 757 mots anglais de cinq lettres compilée par Knuth pour son expérience d’échelle de mots. Avec cette liste, les programmes écrits en GPT-4 trouveront le diagramme d’échelle à neuf marches suivant:

REACH -> PÊCHE -> PAIX -> LIEU -> PLAN -> PLANS -> GLANS -> VERRE -> HERBE -> GRASP

Ce résultat correspond exactement à la sortie du propre programme d’échelle de Knuth, qu’il a publié il y a 30 ans dans Stanford Graphbase.

À ce stade, je dois admettre qu’avec un peu d’aide extérieure, ChatGPT a finalement répondu à ma demande. Il écrit un programme qui peut construire une échelle de mots valide. Mais j’ai encore des réserves. Bien que GPT-4 et Knuth écrivent des programmes qui produisent la même sortie, les programmes eux-mêmes ne sont pas équivalents, ni même similaires.

Knuth a abordé ce problème dans la direction opposée, en commençant non pas par une collection de toutes les chaînes de cinq lettres possibles (qui sont inférieures à 12 millions), mais avec sa liste beaucoup plus petite de 5 757 mots anglais courants. Il construit ensuite un graphe (ou réseau) où chaque mot est un nœud, et les deux nœuds sont reliés par des arêtes si et seulement si les mots correspondants diffèrent d’une lettre. L’illustration suivante montre un fragment d’un tel diagramme.

Dans le diagramme, une échelle de mots est une série d’arêtes allant du nœud de départ au nœud cible. La meilleure échelle est le chemin le plus court, traversant le moins de côtés. Par exemple, le meilleur chemin de la laisse à la pêche est la laisse -> lixiviation -> atteindre -> retch, mais il y a aussi des chemins plus longs tels que leash -> leach -> plage -> pêche -> reach -> retch. Pour trouver le chemin le plus court, Knuth a utilisé un algorithme conçu par Edsger W. Dijkstra dans les années 50 du 20ème siècle.

Le programme d’échelle de mots de Knuth nécessite un investissement initial pour convertir une simple liste de mots en un graphique. D’autre part, il évite de générer inutilement des milliers ou des millions de chaînes de cinq lettres qui ne peuvent pas être des éléments de ces dernières. Pour résoudre le problème REACH-> GRASP, le programme GPT-4 a produit 219 180 chaînes de ce type; Seulement 2 792 d’entre eux (un peu plus de 1%) sont de vrais mots.

Si les différentes procédures d’échelle de mots que je décris sont soumises par des étudiants, alors je donnerai une note d’échec à la version sans liste de mots. Le programme GPT-4 avec la liste passera, mais par souci d’efficacité et d’élégance, je ne donnerai au programme Knuth que les notes les plus élevées.

Pourquoi les chatbots préfèrent-ils des algorithmes inférieurs ? Vous pouvez simplement rechercher sur Google « programme d’échelle de mots » pour obtenir des indices. Presque tous les résultats les mieux classés provenaient de sites comme Leetcode, GeeksForGeeks et RosettaCode. Ces sites sont clairement destinés à répondre aux besoins des demandeurs d’emploi et des concurrents dans les concours de programmation, avec des solutions qui nécessitent de générer les 125 variantes d’une lettre de chaque mot, tout comme les programmes GPT. Parce qu’il y a tellement de sites de ce type – il semble y en avoir des centaines – ils sont plus importants que d’autres sources, comme le livre de Knuth (si le texte apparaît dans l’ensemble de formation). Cela signifie-t-il que nous devrions blâmer Leetcode pour le mauvais choix d’algorithme, pas GPT? Au lieu de cela, je voudrais souligner les faiblesses inévitables du protocole, dont les plus courantes sont la bonne réponse par défaut.

Chaque fois que je pense que de grands modèles de langage sont écrits pour tous nos logiciels, une autre préoccupation connexe me hante. D’où viennent les nouveaux algorithmes ? Le modèle linguistique universitaire pourrait être créatif en remixant des éléments de projets existants, mais je ne vois pas comment il pourrait inventer quelque chose de complètement nouveau et meilleur.

** Assez du mot échelle! **

J’admets que je suis allé trop loin, torturant ChatGPT avec trop de variantes d’un problème particulier (et non pertinent). Peut-être que les modèles de langage des collèges fonctionnent mieux sur d’autres tâches de calcul. J’en ai essayé plusieurs, avec des résultats mitigés. Je veux juste discuter de l’un d’entre eux, et je trouve les efforts de ChatGPT plutôt poignants.

Avec ChatGPT 3.5, je demande la valeur du 100ème nombre de Fibonacci. Notez que ma question a été posée en mode Oracle ; Je demande ce chiffre, pas un programme qui le calcule. Néanmoins, ChatGPT écrit volontairement un programme de Fibonacci, puis rend la sortie de ce programme.

L’algorithme implémenté par ce programme est mathématiquement correct; Elle provient directement de la définition de la suite de Fibonacci, qui est un membre d’une suite commençant à {0, 1}, chaque élément suivant étant égal à la somme des deux premiers éléments. La réponse donnée est également correcte : 354224848179261915075 s’agit bien du 100e nombre de Fibonacci. Alors, quel est le problème? C’est la phrase du milieu : « Lorsque vous exécutez ce code, il produira le 100e nombre de Fibonacci. » Ce n’est pas vrai. Si vous exécutez le code, vous obtiendrez la mauvaise valeur 354224848179262000000. Les versions récentes de Java fournissent le type de données BigInt pour résoudre ce problème, mais BigInt doit être explicitement spécifié, ce que les programmes ChatGPT ne font pas. La raison de cette anomalie est que Java utilise l’arithmétique à virgule flottante, même pour les valeurs entières. Selon la norme IEEE à virgule flottante, l’entier maximal pouvant être représenté sans perte de précision est 253−1; Le 100e nombre de Fibonacci est d’environ 268. C’est ce que j’appelle la pensée poignante: ChatGPT donne la bonne réponse, mais la méthode qu’il prétend utiliser pour calculer cette réponse ne la fournit pas. Le bot a dû trouver la valeur correcte par d’autres moyens, mais la manière exacte n’a pas été révélée.

Donner la même tâche à ChatGPT 4.0 nous emmènera dans un voyage encore plus étrange. Dans l’interaction suivante, j’ai activé Code Interpreter, un plugin ChatGPT qui permet au système de tester et d’exécuter une partie du code qu’il écrit. Apparemment, le robot a profité de cette fonctionnalité, en proposant d’abord un programme qui a échoué pour des raisons inconnues:

Ici, ChatGPT est écrit en Python, le principal langage de programmation pris en charge par Code Interpreter. La première tentative d’écriture d’un programme était basée sur l’exponentiation des matrices de Fibonacci:

Il s’agit d’une méthode bien connue et efficace, et le programme l’implémente correctement. Cependant, pour des raisons mystérieuses, l’interpréteur de code ne peut pas exécuter le programme. (Le code fonctionne bien dans un environnement Python standard et renvoie la bonne réponse.) )

À ce stade, le robot tournera dans une direction complètement nouvelle et décollera, suggérant que la valeur de Fibonacci requise soit calculée par une identité mathématique appelée formule de Binet. Il avait écrit des expressions mathématiques, mais a ensuite changé d’avis. Il prévoit correctement le problème de la précision numérique: étant donné une valeur exacte de la racine carrée de 5, la formule produira un résultat exact, mais ce n’est pas faisable.

Alors maintenant, ChatGPT a adopté une stratégie différente, en utilisant le même algorithme itératif que la version 3.5. Cette fois, nous avons eu la bonne réponse car Python (contrairement à Java) n’a aucun problème à gérer les grands entiers.

J’ai été impressionné par cette performance, non seulement par la bonne réponse, mais aussi par la courageuse persévérance du système. Malgré les problèmes de ChatGPT, il a persévéré, intrigué par des difficultés inattendues mais a refusé d’abandonner. « Eh bien, cette méthode matricielle devrait fonctionner. Mais, quoi qu’il en soit, essayons la formule Binet... Oh attendez, j’oubliais... Quoi qu’il en soit, il n’est pas nécessaire d’être si sophistiqué à ce sujet. Faisons-le d’une manière évidente et lente. J’ai l’impression que c’est une approche très humaine de la résolution de problèmes. Il est étrange de voir ce comportement dans les machines.

Records de réussite et d’échec

Ma petite expérience m’a fait douter de l’affirmation selon laquelle les oracles d’IA et les singes de code d’IA sont sur le point d’évincer les programmeurs humains. J’ai vu un certain succès, mais plus un échec. Ce triste bilan a été compilé sur des tâches de calcul relativement simples dont les solutions sont bien connues et largement publiées.

D’autres ont fait une évaluation plus large et plus approfondie de la génération de code LLM. Dans la bibliographie à la fin de cet article, j’énumère cinq de ces études. J’aimerais résumer brièvement certains des résultats qu’ils ont rapportés.

Il y a deux ans, Mark Chen et plus de 50 collègues d’OpenAI ont déployé beaucoup d’efforts pour mesurer la précision de Codex, un fork de ChatGPT 3 dédié à l’écriture de code. (Codex est depuis devenu le moteur qui alimente GitHub Copilot, « l’assistant du programmeur ».) ) a créé un ensemble de 164 tâches qui peuvent être effectuées en écrivant des programmes Python. Ces tâches sont principalement des exercices de manuels, des concours de programmation et des types dans la littérature (stupéfiante) sur la façon de bien réussir dans le codage des entretiens d’embauche. La plupart des tâches peuvent être effectuées avec seulement quelques lignes de code. Exemple : Calculez le nombre de voyelles dans un mot donné, déterminez si un entier est premier ou composé.

L’équipe du professeur Chen a également réfléchi aux critères permettant de définir le succès et l’échec. Étant donné que le processus LLM n’est pas déterministe (la sélection des mots est basée sur la probabilité), le modèle peut générer un programme défectueux à la première tentative, mais finira par produire la réponse correcte si la tentative est autorisée à continuer. Un paramètre appelé température contrôle le degré d’incertitude. À température zéro, le modèle choisit toujours le mot le plus probable à chaque étape; Au fur et à mesure que la température augmente, le hasard est introduit, permettant le choix de mots improbables. Chen et al. Envisagez la possibilité de ce changement en adoptant trois critères de réussite :

pass@1: LLM génère le bon programme à la première tentative

pass@10 : Au moins un des 10 programmes générés est correct

pass@100 : Au moins un des 100 programmes générés est correct

Pass@1 tests sont effectués à température nulle, de sorte que le modèle donne toujours la meilleure estimation. pass@10 et pass@100 essais sont effectués à des températures plus élevées, ce qui permet au système d’explorer un plus large éventail de solutions potentielles.

Les auteurs ont évalué plusieurs versions du Codex sur l’ensemble des 164 tâches. Pour la version la plus grande et la plus puissante du Codex, le taux de pass@1 est d’environ 29%, le taux de pass@10 est de 47% et le pass@100 atteint 72%. Devrions-nous être impressionnés ou choqués lorsque nous voyons ces chiffres? Est-il utile de célébrer le fait que le Codex a raison à la première tentative presque un tiers du temps (lorsque la température est réglée à zéro)? Ou si vous étiez prêt à passer au crible 100 plans proposés pour trouver le bon, le taux de réussite a grimpé à près des trois quarts? Mon opinion personnelle est la suivante: si vous considérez la génération actuelle de LLM comme un effort pionnier dans un programme de recherche à long terme, les résultats sont encourageants. Mais si vous pensez que la technologie peut immédiatement remplacer un logiciel codé à la main, il y a peu d’espoir. Nous sommes encore loin du niveau de fiabilité nécessaire.

D’autres études ont donné des résultats globalement similaires. Fredrico Cassano et al. Évaluer les performances de plusieurs LLM générant du code dans une variété de langages de programmation; Ils font état d’un large éventail de taux de pass@1, mais seulement deux dépassent 50%. Alessio Buscemi a testé ChatGPT 3.5 sur 40 tâches de codage, nécessitant des programmes écrits en 10 langues et répétant chaque requête 10 fois. Sur 4 000 essais, 1 833 ont produit du code pouvant être compilé et exécuté. Liu Zhijie et al. Leur évaluation de ChatGPT est basée sur des questions publiées sur le site Web de Leetcode. Jugez les résultats en soumettant le code généré à un processus automatisé de notation Leetcode. Le taux d’acceptation moyen pour toutes les questions variait de 31% pour les programmes écrits en C à 50% pour les programmes Python. Liu et al. Autre observation intéressante: ChatGPT a obtenu des scores bien pires sur les questions publiées après septembre 2021 (date limite pour la formation de GPT). Ils spéculent que le robot pourrait être mieux en mesure de résoudre des problèmes antérieurs parce qu’il a déjà vu une solution pendant l’entraînement.

Un article récent publié par Li Zhong et Zilong Wang va au-delà de la question fondamentale de l’exactitude du programme et considère la robustesse et la fiabilité. Le programme généré répond-il correctement à une entrée mal formée ou à des erreurs externes, par exemple lorsque vous essayez d’ouvrir un fichier qui n’existe pas? Même si l’invite de LLM comprenait un exemple montrant comment gérer correctement de tels problèmes, Zhong et Wang ont constaté que le code généré ne le faisait pas 30 à 50% du temps.

En plus de ces résultats frustrants, j’ai moi-même plus de doutes. Presque tous les tests sont effectués via des extraits de code courts. Un LLM qui a des difficultés à écrire un programme de 10 lignes peut avoir plus de difficulté à écrire un programme de 100 lignes ou 1 000 lignes. En outre, une simple note de réussite / échec est une mesure très approximative de la qualité du code. Considérez le test de primalité dans la suite de benchmarks de groupe de Chen. C’est l’un des programmes écrits dans le Codex:

Ce code est évalué correctement – il devrait être correct car il ne classe jamais à tort les nombres premiers en nombres composés et vice versa. Cependant, lorsque n est grand, vous n’avez peut-être pas la patience ou la vie d’attendre un verdict. L’algorithme tente de diviser n par chaque entier entre 2 et n−1.

LLM praticité non conventionnelle

Il est encore tôt pour les grands modèles de langage. ChatGPT a été publié il y a moins d’un an; La technologie sous-jacente n’a que six ans environ. Bien que je sois à peu près sûr de prétendre que LLM n’est pas prêt à conquérir le monde du codage, je ne peux pas prédire avec une telle confiance qu’ils ne le feront jamais. Ces modèles vont certainement s’améliorer et nous les utiliserons mieux. Il existe déjà une industrie émergente qui offre des conseils d’ingénierie « juste à temps » comme moyen de tirer le meilleur parti de chaque requête.

Une autre façon d’améliorer les performances LLM peut être de former un hybride avec un autre système informatique équipé d’outils de logique et de raisonnement plutôt que d’outils d’analyse de langage pur. À la veille de sa mort récente, Doug Lenat a proposé de combiner LLM avec Cyc, une énorme base de données de bon sens qu’il a passé quatre décennies à construire. Stephen Wolfram travaille sur l’intégration de ChatGPT dans Wolfram|Dans Alpha, Wolfram|Alpha est une collection en ligne de données et d’algorithmes organisés.

Pourtant, certains des obstacles qui entravent la génération de cours LLM semblent difficiles à surmonter.

Les modèles de langage travaillent leur magie d’une manière simple: dans le processus d’écriture d’une phrase ou d’un paragraphe, LLM choisit le mot suivant en fonction du mot précédent. C’est comme écrire un SMS sur votre téléphone : vous tapez « Je te verrai... » et le logiciel suggère des continuations alternatives : « demain », « bientôt », « plus tard ». En LLM, chaque candidat se voit attribuer une probabilité, qui est calculée sur la base de l’analyse de tout le texte de l’ensemble de formation du modèle.

Il y a plus d’un siècle, le mathématicien russe A. A. Markov a exploré pour la première fois l’idée de générer du texte à partir de cette analyse statistique. Son processus est maintenant connu sous le nom de modèle n-gramme, où n est le nombre de mots (ou de caractères ou d’autres symboles) à prendre en compte lors du choix de l’élément suivant de la séquence. J’ai longtemps été fasciné par le processus du n-gramme, mais principalement à cause de ses possibilités comiques. (Dans un article publié il y a 40 ans, je l’appelais « l’art de transformer la littérature en charabia ».) ")

Bien sûr, ChatGPT et d’autres LLM récents sont plus que des n-métamodèles. Leur réseau neuronal capture des caractéristiques statistiques linguistiques bien au-delà d’une séquence de n symboles consécutifs. Le mécanisme d’attention, qui suit les dépendances entre les symboles sélectionnés à des distances arbitraires, revêt une importance particulière. Dans les langues naturelles, ces moyens sont utiles pour maintenir la cohérence du sujet et du verbe, ou pour associer des pronoms à l’objet auquel ils se réfèrent. Dans les langages de programmation, le mécanisme d’attention assure l’intégrité des structures syntaxiques en plusieurs parties, telles que si... alors... sinon, et il conserve les parenthèses correctement appariées et imbriquées.

Cependant, même avec ces améliorations, LLM est essentiellement un outil pour construire un nouveau texte basé sur la probabilité que des mots apparaissent dans le texte existant. Dans ma façon de penser, ce n’est pas penser. C’est quelque chose de plus superficiel, en se concentrant sur les mots plutôt que sur les idées. Compte tenu de ce mécanisme rudimentaire, j’ai été à la fois surpris et perplexe par tout ce que LLM était capable de réaliser.

Pendant des décennies, les architectes de l’IA ont cru que la véritable intelligence, qu’elle soit naturelle ou artificielle, nécessitait un modèle mental du monde. Afin de comprendre ce qui se passe autour de vous (et à l’intérieur de vous), vous devez avoir une intuition sur la façon dont les choses fonctionnent, comment elles s’imbriquent, ce qui se passe ensuite, la cause et l’effet. Lynant insiste sur le fait que la connaissance la plus importante est la connaissance que vous acquérez bien avant de commencer à lire. Vous apprenez la gravité en tombant. Lorsque vous constatez qu’une tour de blocs de construction est facile à démolir mais difficile à reconstruire, vous comprenez l’entropie. Avant que le langage ne commence à prendre racine, vous apprendrez la douleur, la peur, la faim et l’amour dans la petite enfance. Le cerveau dans la boîte ne peut pas accéder à cette expérience parce qu’il ne peut pas accéder directement à l’univers physique ou social.

Il y a deux cent cinquante ans, l’horloger suisse Pierre Jacquet-Droz construisait un automate mécanique capable d’écrire avec une plume. Cet appareil d’horlogerie a des centaines de cames et d’engrenages et est habillé comme un petit garçon assis sur un tabouret. Après l’activation, le garçon a trempé le stylo dans l’encre et a écrit un court message - notamment l’aphorisme cartésien « Je pense, donc je suis ». Comme c’est drôle! Mais même au 18ème siècle, personne ne croyait que les poupées graffiti pensaient vraiment. Les sceptiques LLM placent ChatGPT dans la même catégorie.

Je vais vous dire laquelle de ces théories de mentalité LLM contrastées est correcte? Je ne suis pas. Aucune de ces deux options ne m’a plu. Si Bender et d’autres ont raison, alors nous devons faire face au fait qu’un gadget sans capacité de raison ou de ressentir, sans expérience de l’univers physique ou de l’interaction sociale, sans conscience de soi, écrit des articles universitaires, écrit des chansons de rap, donne des conseils aux amoureux. La connaissance, la logique, les émotions ne valent rien; La langue glissante est tout. C’est une proposition subversive. Si ChatGPT peut nous tromper avec ce spectacle inconscient, peut-être que nous sommes aussi des menteurs, et leurs voix et leur colère n’ont aucun sens.

D’un autre côté, si Sutskever a raison, alors une grande partie de l’expérience humaine qui nous est chère – le sens de la personnalité qui évolue lentement à mesure que nous grandissons et vivons – peut être apprise en lisant ces mots sur Internet. Si c’est le cas, alors je n’ai pas à endurer la douleur indicible du collège, je n’ai pas à faire toutes les erreurs stupides qui causent tant de chagrin et de difficulté; Il n’est pas nécessaire de blesser mon estime de soi en entrant en collision avec le monde. J’aurais pu lire tout cela dans le confort de mon fauteuil; Juste des mots peuvent m’amener à un état de maturité avec un esprit clair sans éprouver toutes les pierres d’achoppement et la douleur dans la vallée qui façonne mon âme.

J’ai encore deux opinions (ou peut-être plus de deux!) sur le statut et l’impact des grands modèles de langage sur l’informatique. )。 Les passionnés d’IA ont peut-être raison. Ces modèles peuvent prendre le dessus sur la programmation ainsi que sur de nombreux autres types de travail et d’apprentissage. Ou ils peuvent échouer, comme avec d’autres innovations prometteuses en matière d’IA. Je ne pense pas qu’il faille attendre trop longtemps pour obtenir une réponse.

Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • Commentaire
  • Partager
Commentaire
0/400
Aucun commentaire
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)