[center][/center]
25 mars 2012: Faskil fête ses 40 ans avec ses amis au Sous-Bock. La soirée fut bonne, passée à discuter de Hegel et Spinoza, du constructivisme allemand et de la maman de Dewax (qui lui était absent pour cause de reboot de serveur). L’alcool coule à flots et Faskil, passablement éméché, cherche à rentrer dans sa campagne profonde (Levallois, pas la Belgique). Il sort son téléphone, appelle chez lui et demande à sa voiture de venir le chercher. A peine 30 minutes plus tard, la Faskomobile arrive et notre héros s’endort comme une bouse sur la banquette arrière pour se réveiller devant chez lui, épuisé mais heureux.
Depuis l’annonce par Google de ses progrès dans la conduite autonome, un tel scénario est devenu bien plus plausible.
Comment ça marche ?
Pourquoi, alors que des robots savent faire rebondir des balles, tourner un stylo ou passer entre des canettes de Fanta à très haute vitesse, est-il difficile de leur demander de conduire une voiture à 50km/h en ville ?
Parce que, dans les premiers cas, la situation est bien définie et toujours la même. Au contraire, l’environnement urbain est très varié et la voiture sera constamment confrontée à des situations nouvelles. Il faut donc trouver un moyen d’enseigner à l’ordinateur comment réagir dans ces nouvelles situations.
Reconnaissance d’objets
[center]La première étape va être de comprendre un peu ce qu’il se passe. C’est-à-dire transformer ça:
en ça:
Dans cet exemple, la seule information dont on dispose à l’origine est une photo, ce qui n’est pas le cas pour la voiture de Google (qui a aussi des informations sur la distance de chaque objet grâce à des lasers, par exemple), mais le principe est exactement le même.
Il y a plusieurs décennies, on pensait que la seule manière d’arriver à un tel résultat était d’utiliser des règles: on demande à un expert de définir ce qu’est un piéton, une voiture, une route et on code tout ça en dur dans notre algorithme (imaginez une longue suite de “if”, de “or” et de “and”). Si l’idée est attrayante, elle montre très vite ses limites: à chaque fois qu’une nouvelle catégorie apparaît, il faut trouver un expert et le nombre de règles à prévoir est immense (imaginez qu’à forme identique, le fait qu’un objet soit sur la route ou sur l’eau change sa probabilité d’être une voiture, par exemple).
Pour pallier ces problèmes s’est développé l’apprentissage machine. Au lieu d’apprendre par règles, on va apprendre par l’exemple: on va engager des humains pour regarder beaucoup d’images et annoter les objets qu’ils y trouvent. Pas besoin d’être un spécialiste pour dire où se trouvent les humains, les voitures et les arbres sur une photo, on réalise cette tâche dans la vie de tous les jours (et donc Amazon Turk est un grand ami de l’apprentissage machine). Ensuite, on va “apprendre” à reproduire ces jugements humains.
Comment ça se passe en pratique ? Il va falloir trouver une fonction (une boîte noire) qui transforme les images originales en image segmentées. Imaginez un fichier de code avec certains paramètres laissés vides. En remplissant les endroits laissés vides par des nombres, on obtient une fonction. A chaque fois qu’on remplit les endroits vides par des nombres différents, on obtient une fonction différente. L’apprentissage consiste donc à trouver les nombres qui donnent la fonction qui se rapproche le plus des jugements humains (je ne rentre pas dans les détails, mais il existe des méthodes pour trouver ces nombres bien plus efficaces que d’en essayer plein au hasard). Le reste de la fonction (les endroits qui ne sont pas laissés vides) et le nombre d’endroits à remplir sont à l’appréciation du créateur et c’est ça qui déterminera la qualité finale. L’idée est d’avoir suffisamment de cases vides pour être capable de modéliser la complexité des situations rencontrées (sinon, on parlera de sous-apprentissage et notre fonction ne saura pas faire la différence entre des situations différentes), mais pas trop pour forcer la fonction à trouver les points communs entre tous les exemples pour trouver la bonne solution malgré son nombre réduit de degrés de liberté (sinon, on parlera de sur-apprentissage et notre fonction verra chaque situation comme totalement différente des autres, devenant incapable d’appliquer ce qu’elle a appris).
Cette vidéo montre des séquences qui ont été étiquetées à la main pour ensuite être utilisées pour apprendre une fonction de reconnaissance d’objets. Elle est d’ailleurs tirée d’un projet de Jamie Shotton, le chercheur derrière Kinect.
Utiliser l’information pour prendre des décisions de conduite
Une fois qu’on sait quels objets sont présents et leur position (on parle d’images segmentées), il faut en déduire la décision à prendre. De la même manière, on va créer une fonction qui prendra en entrée l’image segmentée et renverra en sortie la décision à prendre (accélérer, freiner, mettre le clignotant, klaxonner, etc). Et quels exemples utilise-t-on pour entraîner notre fonction à prédire des choses intelligentes ? Eh bien, les employés de Google qui conduisent, pardi. A chaque instant, l’ordinateur sait ce qu’il y a devant lui (grâce à la fonction apprise précédemment) et ce que fait le conducteur humain. Il peut donc apprendre quoi faire en fonction de la situation.
Et si jamais la fonction apprise n’est pas si bien que ça et que l’ordinateur fait des erreurs ? Le conducteur est là pour corriger la décision et le système prendra en compte cette correction pour s’améliorer.
Pourquoi Google ?
Comme je l’ai dit plus haut, la variété des situations rencontrées est immense, exponentielle même (au sens premier du terme). Si on veut que la voiture soit capable de réagir correctement dans toutes ces situations, il va falloir énormément de données pour entraîner les deux fonctions mentionnées plus haut. Et les données, Google en a un paquet, que ce soit des images ou des vidéos.
Ensuite, l’apprentissage machine est au coeur des moteurs de recherche. Savoir quel document vous voulez regarder à partir de quelques mots-clefs requiert de savoir où sont les éléments importants d’un document, si “être” est utilisé comme substantif ou comme verbe, ou encore la véritable orthographe du mot que vous avez épelé. Google posède donc déjà un vivier d’ingénieurs rompus à ces méthodes.
Enfin, Google a de l’argent. Suffisamment pour embaucher Sebastian Thrun, l’homme derrière la Stanford Racing Team qui a fini première du DARPA Grand Challenge et deuxième du Urban Challenge. Rappelez-vous, Stanford, c’est aussi l’université qui a créé STAIR, qui préfigurait déjà de ce qu’il était possible de faire en apprentissage.
Comment ça va se passer ?
Les techniques de conduite automatique existent déjà, dans des contextes très limités (où c’est beaucoup plus facile, cf les autres robots) comme le stationnement en créneau (je rappelle que ce n’est pas la complexité de la manoeuvre qui est problématique mais la variété des situations). Google a aussi bien joué le coup en annonçant que le seul accident survenu en 200 000 km n’était pas de leur faute. Même en France qui se démarque par sa défiance envers les nouvelles technologies (voir la psychose autour des antennes-relais, par exemple), je n’ai pas vu de réactions affolées à cette nouvelle incursion des ordinateurs.
Je pense donc qu’on va voir arriver prochainement des aides à la conduite dans les situations simples, comme sur autoroute ou dans les embouteillages. Après le limitateur de vitesse, on peut facilement envisager que la voiture reste automatiquement dans sa voie et double si le champ est libre.
Pour une conduite totalement automatique, il va falloir dépasser l’obstacle légal, notamment aux Etats-Unis où la société est plus procédurière qu’ailleurs. Qui sera responsable en cas d’accident ? Je penche pour le constructeur (notamment parce que le public verra cela comme un encouragement à assurer au maximum la sécurité) qui sera donc obligé de refléter les coûts induits sur le prix d’achat. Ce qui est intéressant, c’est que c’est un cercle vertueux: plus il y aura de voitures autonomes sur les routes, plus les situations seront prévisibles et plus le risque d’accident sera faible.
Personnellement, je pense que c’est l’une des très belles applications de l’apprentissage machine et je serais désolé de voir ces efforts anéantis par une horde d’alarmistes forcenés.