19 points par GN⁺ 2025-01-07 | 1 commentaires | Partager sur WhatsApp
  • Je n’avais absolument pas l’intention de travailler dans l’IA/ML.
  • C’est simplement en utilisant des outils nécessaires à mon travail que je me suis naturellement mis à utiliser l’IA et le ML, jusqu’à finir par entrer dans ce domaine (professeur associé à la CMU).
  • À l’occasion de la nouvelle année, retour sur les principaux projets IA/ML auxquels j’ai participé depuis 2000.

Les instructions if et les nombres aléatoires : mes débuts en programmation

  • Débuts avec les jeux vidéo :
    • Inspiré par les Tamagotchi, j’ai tenté de développer un jeu d’animal virtuel en VB6.
    • Mise en place d’une logique simple avec des timers et des conditions :
      • augmentation du niveau de faim toutes les 10 secondes ;
      • si la faim dépassait un certain seuil, baisse de la santé toutes les 3 secondes ;
      • si la santé atteignait 0, l’animal s’effondrait.
    • Résultat : un jeu monotone et peu amusant.
  • Développement de jeux au lycée :
    • Création d’un jeu de tir spatial en 2D :
      • le joueur repousse des vagues d’ennemis tout en récupérant des power-ups.
    • Les schémas d’apparition des ennemis étaient implémentés avec une longue instruction if, basée sur des nombres aléatoires et des statistiques de partie (temps de jeu, nombre de tirs, HP, etc.).
    • Résultat :
      • le jeu semblait un peu plus dynamique et imprévisible ;
      • mais l’intérêt ne durait pas longtemps et les joueurs arrêtaient vite.
  • Exploration des concepts d’IA :
    • Au milieu des années 2000, j’ai acheté le livre Programming Game AI by Example pour apprendre à implémenter de l’IA dans les jeux.
    • Je n’ai pas pu l’exploiter immédiatement, mais il m’a beaucoup servi dans des projets ultérieurs.
  • Les expériences de cette période ont servi de base pour expérimenter des mécaniques de jeu plus complexes et plus intéressantes.

Machines à états et fonctions d’ordre supérieur : le développement de jeux à l’université

  • Évolution des jeux :
    • À l’université, j’ai franchi un cap dans le développement de jeux et créé des titres joués par des millions de personnes.
    • Certains ont même réussi à générer des revenus.
    • À mesure que mes compétences en programmation mûrissaient, j’ai pu appliquer concrètement ce que j’avais appris dans les livres.
  • Application technique :
    • Machine à états finis (Finite State Machine) :
      • utilisée pour implémenter les comportements des ennemis.
    • Factory pattern :
      • pour la création et la gestion des objets.
    • Fonctions d’ordre supérieur (Higher-order Functions) :
      • architecture conçue pour pouvoir combiner les comportements des ennemis et des armes ;
      • exemple :
        • une arme oscillait de 25 degrés à gauche et à droite tout en tirant des projectiles dans un cône étroit ;
        • les projectiles guidaient légèrement leur trajectoire vers une cible proche, avec 1 % de probabilité de ricochet.
  • Vitalité du jeu :
    • Ajout progressif d’éléments dynamiques en fonction de l’état du jeu et des entrées du joueur.
    • Usage de l’aléatoire et de la combinatoire pour introduire de la variété.
    • Cette approche en couches s’appliquait non seulement au comportement des ennemis, mais aussi aux sprites, effets de particules, effets sonores, projectiles, animations, etc.
  • Résultat :
    • les jeux sont devenus plus vivants et plus amusants ;
    • mais j’ai fini par réaliser que ce n’était pas de l’IA, seulement une combinaison bien conçue d’instructions if et d’appels de fonctions.
  • On pouvait donner l’impression qu’un jeu était « vivant », mais à ce stade, il s’agissait toujours d’une logique et de fonctions conçues à la main.

Logique du premier ordre, représentation des connaissances, machines à vecteurs de support et réseaux de neurones : premières expériences en master

  • Début du master :
    • Après avoir obtenu mon diplôme, je me suis inscrit en master à la dernière minute.
    • Le choix de cours était limité, et j’ai suivi des cours d’IA et de réseaux de neurones.
    • Déception par rapport aux cours que j’aurais préféré suivre, comme celui sur les compilateurs :
      • contenu centré sur une théorie très abstraite, sans pratique ni implémentation ;
      • longues discussions autour des définitions.
  • Cours d’IA :
    • Utilisation du manuel Artificial Intelligence: A Modern Approach (Third Edition).
    • Apprentissage de concepts comme la planification, les agents, la logique du premier ordre et la représentation des connaissances.
    • J’y ai acquis un nouveau vocabulaire pour penser les problèmes, mais avec difficulté à l’appliquer concrètement.
  • Cours sur les réseaux de neurones :
    • Étude théorique des perceptrons, des machines à vecteurs de support (SVM), des réseaux feedforward, des modèles de Hopfield, de la rétropropagation (backpropagation), etc.
    • Manque d’indications claires pour la pratique :
      • la réponse du professeur, « cherchez un package MATLAB », m’a frustré.
  • Développement d’un programme de visioconférence à bas débit :
    • Détection des visages et extraction de régions avec OpenCV :
      • classification de l’état des coins de la bouche, de la position du sourcil gauche, du fait que l’œil droit soit ouvert ou non, etc.
      • collecte dans une base de données de plusieurs centaines d’images de visages annotées ;
      • transmission des états binaires classifiés via des sockets, puis rendu d’un avatar avec OpenGL.
    • Résultat :
      • très sensible aux variations d’éclairage, difficile à ajuster, et lent à entraîner ;
      • OpenCV était difficile à utiliser et le programme pénible à modifier.
  • Bilan :
    • J’ai énormément appris à travers les essais et erreurs.
    • En janvier 2013, j’ai mis en ligne une première vidéo de démo :
  • Cette période a été une étape importante de croissance, où j’ai appris à transformer la théorie en implémentation concrète pour résoudre de vrais problèmes.

Arbres de décision, clustering et algorithmes de recommandation : expériences pendant le doctorat

  • Objectif de recherche :
    • Tenter de résoudre les problèmes suivants en analysant les journaux d’un éditeur de code :
      • identifier si un programmeur est bloqué ou perdu dans le code ;
      • prédire quel fichier il explorera ensuite ;
      • recommander précisément du code pertinent.
  • Méthodes statistiques utilisées :
    • Algorithme C4.5 : génération d’arbres de décision.
    • K-means et DBSCAN : clustering d’événements.
    • Apriori et filtrage collaboratif : recherche d’associations entre événements.
    • Résultat :
      • des méthodes simples, mais étonnamment puissantes ;
      • dans la plupart des cas, elles se révélaient suffisantes face à des réseaux de neurones plus complexes.
  • Résultats obtenus :
    • publication d’articles, plusieurs stages, et création d’outils pour développeurs ;
    • soutenance réussie du doctorat.
  • Ressources associées :
    1. Article : analyse de données sur la manière dont les développeurs cherchent de l’information
      Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF))
    2. Compte rendu de stage chez Microsoft : expérience de création d’un bot de code review
      When users never use the features they asked for
  • Pendant le doctorat, l’usage de techniques statistiques m’a permis de résoudre des problèmes concrets et d’obtenir des résultats significatifs à la fois dans le monde académique et en pratique.

Interfaces utilisateur intelligentes : début des recherches comme professeur

  • Définition d’une nouvelle orientation de recherche :
    • En 2018, en tant que professeur en tenure track, j’ai choisi les outils intelligents pour développeurs (Intelligent Developer Tools) comme thème de recherche.
    • Au départ, la notion restait floue, mais j’ai commencé par un projet utilisant des modèles prédictifs pour identifier et corriger à l’avance les incompréhensions des programmeurs.
  • Première proposition de recherche :
    • Objectifs du projet :
      1. utiliser des techniques d’analyse de programme et des modèles prédictifs pour identifier les incompréhensions que les programmeurs débutants ont du comportement de leur programme ;
      2. corriger ces incompréhensions et expliquer la logique sans perturber le programmeur ;
      3. générer du code de test capable de détecter des changements involontaires du comportement du programme afin d’éviter de futures incompréhensions.
    • Résumé :
  • Deuxième projet :
    • Recherche sur la prédiction des besoins d’information des programmeurs et la génération en temps réel d’interfaces utilisateur.
    • Exemple :
      • pour un programmeur qui explore l’historique Git, fournir une visualisation recommandée d’un ensemble de commits.
  • Intégration des recherches :
  • Résultats et limites :
    • Le projet a bien démarré avec un financement obtenu, mais j’ai quitté mon poste de professeur avant que la recherche n’entre pleinement en vitesse de croisière.
  • Cette période a marqué un tournant important, en concrétisant mes recherches sur les interfaces utilisateur intelligentes et en structurant une vision de grande ampleur.

Synthèse de programmes et grands modèles de langage (LLMs) : l’expérience chez Microsoft

Conclusion

  • Ces 25 années ont été passionnantes.
  • Et pour la suite ? Continuer à enseigner, apprendre et construire.

1 commentaires

 
GN⁺ 2025-01-07
Avis Hacker News
  • J’étais dans une équipe IA, mais j’évitais de l’appliquer sans raison vraiment convaincante. Il fallait se demander si l’on cherchait à résoudre un problème utilisateur, si un LLM était nécessaire, ou si quelques instructions if suffisaient. Il faut aussi être certain que le langage naturel est une interface appropriée
    • Cette approche pragmatique du domaine de l’IA paraît rafraîchissante. J’ai déjà créé un outil où un simple modèle de régression obtenait de meilleurs résultats qu’un réseau de neurones. Il était difficile d’éviter la résistance de l’équipe quand on refusait de tout miser sur l’IA
  • J’ai vécu un parcours similaire pendant 14 ans, et je me suis toujours demandé en quoi ce serait différent aujourd’hui
    • Nous avons grandi avec l’industrie et avons pu apprendre progressivement des choses de plus en plus complexes. Les diplômés d’aujourd’hui se retrouvent face à des décennies de complexité dès leur premier poste
  • J’ai récemment vu quelqu’un quitter l’UTK, et le billet de blog qu’il a écrit m’a fait repenser à l’idée de partir dans le monde académique après les études supérieures
  • Une page web qui n’est pas encombrée de publicités et de pop-ups donne une impression de fraîcheur. Le texte est propre, bien organisé, avec une structure simple
  • Pour beaucoup, l’IA est une aventure amusante qui permet de créer des choses étonnantes. Je suis d’accord pour dire que les résultats sont impressionnants. Mais il est triste que des scientifiques ne réfléchissent pas davantage à l’impact plus large de leur travail sur la société. À mesure que leur statut social s’élève, leurs créations transforment en profondeur les structures de la société. L’IA est l’un des éléments dangereux, et le fait que les grandes entreprises attirent les gens en glorifiant l’intelligence est un signe avant-coureur de catastrophe