
Membres de l'équipe fondatrice d'OpenAI : qu'est-ce que le logiciel 2.0 ?
TechFlow SélectionTechFlow Sélection

Membres de l'équipe fondatrice d'OpenAI : qu'est-ce que le logiciel 2.0 ?
Le jour où nous développerons une intelligence artificielle générale (IAG), ce sera forcément avec le logiciel 2.0.
Rédaction : Andrej Karpathy (membre fondateur d'OpenAI, ancien responsable du département IA chez Tesla)
Traduction : Communauté OneFlow, ywh1bkansf
Andrej Karpathy fait partie des premiers à avoir clairement expliqué pourquoi la vague de l’IA est véritablement importante. Il considère que l’IA est une nouvelle manière puissante de programmer les ordinateurs, et si un jour nous parvenons à développer une intelligence artificielle générale (AGI), ce sera nécessairement grâce au logiciel 2.0.
Voici ci-dessous le texte intégral de l'article publié par Andrej Karpathy en 2017 :
J'ai remarqué que certaines personnes considèrent parfois les réseaux neuronaux comme « simplement un outil parmi d'autres dans la boîte à outils de l'apprentissage automatique ». Ils ont leurs avantages et inconvénients, sont utiles dans certains domaines, et peuvent aider à gagner des compétitions Kaggle. Malheureusement, cette vision est totalement myope. Les réseaux neuronaux ne sont pas seulement un classifieur supplémentaire ; ils marquent le début d'un changement fondamental dans notre manière de développer des logiciels. C'est ce qu'on appelle le logiciel 2.0.
Nous sommes assez familiers avec le logiciel 1.0 : il est conçu à l’aide de langages informatiques (comme Python, C++, etc.). Il consiste en des instructions explicites écrites par des programmeurs pour les machines. En écrivant chaque ligne de code, le programmeur sélectionne un point particulier dans l'espace des programmes possédant un comportement souhaité.

En revanche, le logiciel 2.0 est développé à l’aide d’un langage plus abstrait, difficilement compréhensible par l’humain (par exemple, les poids dans un réseau neuronal). Personne ne peut directement participer à l’écriture de ce code, car cela impliquerait de manipuler des millions – voire des milliards – de poids, chose extrêmement complexe à faire manuellement (j’ai essayé).

À la place, nous définissons des objectifs concernant le comportement attendu du programme (par exemple, « correspondre aux paires entrée-sortie présentes dans le jeu de données », ou « gagner une partie de go »), et nous spécifions une structure de base du programme (comme l’architecture d’un réseau neuronal), ce qui permet de restreindre l’espace de recherche à un sous-ensemble exploitable. Nous utilisons ensuite toutes nos ressources informatiques disponibles pour explorer cet espace et trouver un programme fonctionnel.
Dans le cas des réseaux neuronaux, nous limitons cette recherche à un sous-ensemble continu de l’espace des programmes, et nous employons la rétropropagation et la descente de gradient stochastique comme méthode de recherche, qui s’avère étonnamment efficace.

Plus concrètement, le logiciel 1.0 transforme un code source humainement conçu (comme un fichier .cpp) en un binaire fonctionnel. Le code source du logiciel 2.0 comprend généralement deux éléments : 1) un jeu de données définissant le comportement attendu ; 2) une architecture de réseau neuronal fournissant une structure générale mais nécessitant des détails à remplir. L'entraînement d'un réseau neuronal revient donc à compiler ce jeu de données en un binaire opérationnel — le réseau final. Aujourd'hui, dans la plupart des applications pratiques, les architectures de réseaux neuronaux et les systèmes d'entraînement sont devenus progressivement standardisés et quasi-commodifiés. Ainsi, l'essentiel du travail actif de « développement logiciel » se ramène désormais à organiser, agrandir, ajuster et nettoyer des jeux de données étiquetées. Cela change radicalement le paradigme itératif du développement logiciel, divisant les équipes en deux groupes : les programmeurs du logiciel 2.0 (les annotateurs de données), chargés de modifier et enrichir les jeux de données, et une petite équipe technique qui maintient l'infrastructure d'entraînement ainsi que les interfaces d'analyse, de visualisation et d'annotation.
Il s'avère que, pour de nombreux problèmes du monde réel, collecter des données (ou plus largement, définir le comportement attendu) est bien plus simple que d’écrire explicitement un programme. Grâce à ces avantages, et à d’autres que je vais exposer, nous assistons à un vaste transfert industriel massif du logiciel 1.0 vers le logiciel 2.0. Le logiciel 1.0 a avalé le monde entier ; aujourd’hui, le logiciel 2.0 (l’IA) avale le logiciel 1.0.
La transformation en cours
Examinons quelques exemples concrets de ce changement dans différents domaines. Ces dernières années, nous avons abandonné l'idée d'écrire explicitement du code pour résoudre des problèmes complexes, en faveur du passage au logiciel 2.0.
-
Reconnaissance d'images : autrefois basée sur l'ingénierie de caractéristiques, avec un peu d’apprentissage machine à la fin (ex. SVM), elle repose désormais sur l’utilisation de grands jeux de données (comme ImageNet) et la recherche dans l’espace des architectures de réseaux convolutionnels pour découvrir des caractéristiques visuelles plus performantes. Récemment, nous ne faisons même plus confiance à nos propres architectures manuelles, et commençons à utiliser des méthodes similaires pour chercher automatiquement les meilleures architectures.
-
Reconnaissance vocale : auparavant composée de prétraitements intensifs, de modèles de mélange gaussien et de modèles de Markov cachés, elle repose presque exclusivement sur des réseaux neuronaux aujourd'hui. Une citation célèbre et humoristique de Fred Jelinek en 1985 illustre bien cela : « Chaque fois que je licencie un linguiste, les performances de mon système de reconnaissance vocale s'améliorent. »
-
Synthèse vocale : historiquement réalisée par diverses techniques de concaténation, elle est désormais dominée par de grands réseaux convolutionnels à l’état de l’art (comme WaveNet), capables de produire directement des signaux audio bruts.
-
Traduction automatique : autrefois mise en œuvre via des méthodes statistiques basées sur des phrases, elle est rapidement conquise par les réseaux neuronaux. Mon architecture préférée concerne l’entraînement multilingue : un seul modèle peut traduire n’importe quelle langue source vers n’importe quelle langue cible, avec une supervision très faible, voire aucune supervision du tout.
-
Jeux : pendant longtemps, les programmes de jeu étaient codés à la main. Mais désormais, AlphaGo Zero (un réseau convolutif observant directement l’état brut du plateau) est devenu le meilleur joueur de go. Je prévois des résultats similaires dans d'autres jeux comme DOTA 2 ou StarCraft.
-
Bases de données : même des systèmes traditionnels, jusque-là extérieurs au domaine de l’IA, montrent des signes précoces de transition vers le logiciel 2.0. Par exemple, dans le cas de « l’apprentissage de structures d’index », des réseaux neuronaux remplacent des composants centraux de gestion des données, atteignant des vitesses jusqu’à 70 % supérieures aux arbres B optimisés avec cache, tout en utilisant dix fois moins de mémoire.
Vous avez peut-être remarqué que beaucoup de ces travaux proviennent de Google. C’est parce que Google est actuellement en première ligne de ce grand passage à grande échelle du logiciel 2.0. Le croquis d’un « modèle universel » émerge : rassembler toutes les capacités statistiques dispersées dans divers domaines en un seul modèle global capable de comprendre le monde.
Les avantages du logiciel 2.0
Pourquoi migrer des programmes complexes vers le logiciel 2.0 ? Bien sûr, la réponse simple est que cela fonctionne mieux en pratique. Mais il existe de nombreuses autres raisons. Comparons les avantages du logiciel 2.0 (représenté par les réseaux convolutionnels) au logiciel 1.0 (représenté par des bibliothèques C++ de production) :
-
Calcul homogène : un réseau neuronal typique combine uniquement deux opérations : la multiplication matricielle et la fonction ReLU (unité linéaire rectifiée). En comparaison, les instructions dans un logiciel traditionnel sont nettement plus complexes et hétérogènes. Comme seule une petite partie du code (ex. multiplication matricielle) doit être implémentée en logiciel 1.0, la vérification de la justesse et des performances devient beaucoup plus facile.
-
Convivialité pour les puces : puisque l’ensemble d’instructions requis par les réseaux neuronaux est relativement petit, il est plus facile de les implémenter sur des puces spécialisées, comme des ASIC personnalisés ou des puces neuromorphiques. Quand des dispositifs intelligents à faible consommation seront partout, le monde en sera transformé. Par exemple, embarquer des réseaux convolutionnels pré-entraînés, des systèmes de reconnaissance vocale ou de synthèse WaveNet sur des appareils bon marché et compacts permettrait de connecter aisément d'autres objets.
-
Temps d’exécution constant : chaque itération avant (forward pass) d’un réseau neuronal typique nécessite un nombre d’opérations flottantes (FLOPs) très stable. Les multiples branches d’exécution présentes dans un code C++ complexe écrit à la main n’existent pas dans le logiciel 2.0. Bien sûr, vous pouvez avoir besoin de graphes dynamiques, mais le flux d’exécution reste fortement contraint. Même dans ce cas, on peut presque garantir l’absence de boucles infinies imprévues.
-
Consommation mémoire constante : liée au point précédent, l’absence d’allocation dynamique de mémoire rend presque impossible le swapping avec le disque dur, et exclut toute fuite de mémoire.
-
Haute portabilité : une série d’opérations de multiplication matricielle est bien plus facile à exécuter dans divers environnements informatiques qu’un binaire traditionnel ou un script.
-
Développement agile : si vous écrivez en C++ et qu’on vous demande d’aller deux fois plus vite (au détriment des performances), adapter le système n’est pas trivial. En revanche, avec le logiciel 2.0, il suffit de supprimer la moitié des chemins dans le graphe de calcul, puis de réentraîner, obtenant ainsi un résultat légèrement moins précis mais deux fois plus rapide. C’est magique. Inversement, avec davantage de données et de puissance de calcul, vous pouvez immédiatement améliorer les performances en élargissant le graphe de calcul et en réentraînant.
-
Fusion optimisée des modules : un logiciel classique est souvent divisé en modules communicant via des fonctions, API ou approches bout-en-bout. Dans le logiciel 2.0, même si deux modules interagissent ont été initialement entraînés séparément, il est facile de propager les gradients à travers tout le système. Imaginez que votre navigateur puisse concevoir automatiquement des instructions bas niveau pour accélérer le chargement des pages, ou qu'une bibliothèque de vision par ordinateur (comme OpenCV) puisse s'ajuster automatiquement à vos données spécifiques. Dans le logiciel 2.0, ce sont des fonctionnalités de base.
-
Mieux que vous : enfin, et surtout, dans de nombreux domaines spécialisés, le code produit par les réseaux neuronaux est supérieur à celui que vous ou moi pourrions écrire. Actuellement, c’est déjà le cas dans les domaines de l’image, de la vidéo et de la voix.
Les inconvénients du logiciel 2.0
Le logiciel 2.0 présente aussi des inconvénients. Une fois l’optimisation terminée, on obtient des réseaux très efficaces en pratique, mais difficiles à expliquer. Dans de nombreux domaines, on doit choisir entre un modèle compréhensible offrant 90 % de précision, ou un modèle incompréhensible atteignant 99 %.
Le logiciel 2.0 peut commettre des erreurs contre-intuitives, embarrassantes, voire pires encore, « échouer silencieusement ». Par exemple, si des données biaisées sont discrètement intégrées lors de l’entraînement, analyser et diagnostiquer la cause devient extrêmement difficile quand le volume de données atteint le million.
Enfin, de nouvelles propriétés étranges du logiciel 2.0 continuent d’émerger. Par exemple, l’existence d’exemples adverses et d’attaques accentue le problème de son manque d’interprétabilité.
Programmer en logiciel 2.0
Le code du logiciel 1.0 est écrit à la main. Celui du logiciel 2.0 est obtenu par optimisation selon des critères d’évaluation (ex. « classer correctement les données d’entraînement »). Tout programme dont le principe n’est pas évident mais dont la performance peut être régulièrement évaluée est susceptible de bénéficier de ce changement, car les solutions trouvées par optimisation surpassent souvent celles écrites par des humains.

La perspective adoptée est cruciale. Lorsque vous réalisez que les réseaux neuronaux ne sont pas simplement un classifieur efficace parmi d’autres dans la boîte à outils de l’apprentissage machine, mais plutôt le signe d’un nouveau paradigme de programmation émergent, les implications deviennent évidentes, et il est clair qu’il reste beaucoup à faire.
En particulier, nous avons inventé de nombreux outils facilitant le développement du logiciel 1.0 : des IDE puissants offrant coloration syntaxique, débogueurs, analyseurs, navigation symbolique, intégration Git, etc. Dans le logiciel 2.0, programmer revient à accumuler, organiser et nettoyer des jeux de données. Par exemple, quand un réseau échoue dans des cas extrêmes, on ne corrige pas le problème en écrivant du code, mais en ajoutant simplement plus de données représentatives de ces cas.
Qui développera le premier IDE dédié au logiciel 2.0 ? Il devrait couvrir tous les aspects du flux de travail autour des données : collecte, visualisation, nettoyage, annotation, génération. Peut-être qu’un tel IDE pourrait identifier automatiquement les images suspectées d'être mal étiquetées en fonction de la perte par échantillon, proposer des suggestions d’étiquettes selon les prédictions du modèle, ou recommander des échantillons à annoter en fonction de l’incertitude prédite.
De même, GitHub a été un site très réussi à l’ère du logiciel 1.0. Existe-t-il un potentiel équivalent pour le logiciel 2.0 ? Dans cette ère, les dépôts seraient des jeux de données, et les validations (commits) constituées de l’ajout ou modification d’étiquettes. Les outils traditionnels de gestion de paquets et de déploiement (pip, conda, docker) facilitent l’installation et le déploiement des logiciels. Comment partager, déployer, importer et exécuter efficacement des logiciels dans l’ère du logiciel 2.0 ? Et quel serait l’équivalent de conda dans les réseaux neuronaux ?
En résumé, le logiciel 2.0 gagnera en popularité dans tous les domaines où l’évaluation peut être effectuée à faible coût de manière répétée, et où les algorithmes sont difficiles à concevoir explicitement. En examinant l’écosystème du développement et la manière d’adapter ce nouveau paradigme, de nombreuses opportunités passionnantes se dessinent. À long terme, ce paradigme a un avenir prometteur, car il devient de plus en plus évident que, le jour où nous créerons une intelligence artificielle générale (AGI), ce sera forcément grâce au logiciel 2.0.
Bienvenue dans la communauté officielle TechFlow
Groupe Telegram :https://t.me/TechFlowDaily
Compte Twitter officiel :https://x.com/TechFlowPost
Compte Twitter anglais :https://x.com/BlockFlow_News










