Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

DeepCoder : l'IA développée par Microsoft Research capable de coder
En assemblant des bouts de codes récupérés dans des programmes existants

Le , par Stéphane le calme

44PARTAGES

8  0 
En collaboration avec les chercheurs de l’université de Cambridge, Microsoft a développé une intelligence artificielle baptisé DeepCoder qui peut créer de nouveaux programmes grâce au machine learning en assemblant des bouts de codes récupérés dans des programmes existants. DeepCoder peut prendre en compte les exigences définies par le développeur, parcourir une large base de données contenant des snippets de code et livrer les lignes de code nécessaire pour résoudre le problème défini par le développeur.

« L’approche consiste à entraîner un réseau de neurones à prédire des propriétés du programme qui a généré les sorties suite à des entrées. Nous utilisons les prédictions du réseau de neurones pour augmenter les techniques de recherche de la communauté de langages de programmation, y compris la recherche énumérative et un solveur SMT », ont expliqué les chercheurs.

Plus loin, ils avancent que « concevoir un système IPS (Inductive Program Synthesis) nécessite de résoudre deux problèmes. Tout d'abord, le problème de recherche: pour trouver des programmes cohérents, nous devons rechercher sur un ensemble approprié de programmes possibles. Nous devons définir l'ensemble (c'est-à-dire, l'espace de programme) et la procédure de recherche. Deuxièmement, le problème de classement: s'il y a plusieurs programmes cohérents avec les exemples d'entrées-sorties, lesquels devrions-nous retourner ? Ces deux problèmes dépendent des spécificités de la formulation du problème. Ainsi, la première décision importante dans la formulation d'une approche de synthèse de programme est le choix d'un langage spécifique au domaine ».

Le système s’améliore au fur et à mesure qu’il s’exerce, déterminant quels fragments de code fonctionnent mieux ensemble et quand utiliser un fragment de code à la place d’un autre. Parce qu’il « apprend », le système peut retourner des résultats de plus en plus vite.

« Le potentiel d'automatisation que ce type de technologie offre pourrait vraiment apporter une énorme réduction des efforts nécessaires pour développer un code », a estimé Armando Solar-Lezama du Massachusetts Institute of Technology, qui n'a pas été impliqué dans ce projet. « Tout à coup, les gens pourraient être beaucoup plus productifs. Ils pourraient concevoir des systèmes qu'ils n’auraient pas pu concevoir auparavant », a-t-il espéré.

De plus, cette approche pourrait permettre aux non-codeurs de simplement décrire une idée de programme et laisser le système se charger de la conception, a estimé Marc Brockschmidt, l'un des créateurs de DeepCoder de Microsoft Research à Cambridge.

Ce type de système pourrait avoir de nombreuses applications. En 2015, les chercheurs du MIT ont créé un programme qui a automatiquement corrigé les bogues logiciels en remplaçant les lignes de code défectueuses par des lignes de code qui fonctionnaient pour d’autres programmes. Brockschmidt a assuré que les futures versions pourraient faciliter le développement de programmes de routine qui puisent des informations sur des sites Web, ou le développement de programmes permettant de catégoriser automatiquement des photos de Facebook, par exemple, sans que le développeur n’ait à écrire une seule ligne de code.

Quant à savoir si ces systèmes mettront les développeurs au chômage, Solar-Lezama n’y croit pas. Selon lui, étant donné que la synthèse automatisée de programmes pourrait s’occuper des parties les plus fastidieuses de la programmation, les développeurs seront alors en mesure de se consacrer à une partie plus sophistiquée.

À l'heure actuelle, DeepCoder n’est capable que de résoudre des problèmes de programmation impliquant environ cinq lignes de code. « Générer une grosse portion de code tout d’un coup est difficile et potentiellement irréaliste », a-t-il assuré. « Toutefois, les grosses portions de code sont obtenues en mettant ensemble plusieurs portions plus modestes de code ».

Source : article (au format PDF)

Et vous ?

Que pensez-vous de DeepCoder ?

Voir aussi :

L'unité de Microsoft dédiée à l'IA apporte aux développeurs des API, pour faire de la modération de contenu et améliorer la reconnaissance vocale
Jeu de poker : l'IA de l'université Carnegie Mellon terrasse ses quatre adversaires humains, une victoire historique face à des joueurs de haut niveau
Microsoft acquiert Maluuba, l'entreprise spécialisée dans la recherche IA pour rendre les machines capables de penser et communiquer comme les hommes

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Traroth2
Membre chevronné https://www.developpez.com
Le 24/02/2017 à 12:09
Jolie performance technique...

"Quant à savoir si ces systèmes mettront les développeurs au chômage, Solar-Lezama n’y croit pas"

La question est très mal posée. Évidemment qu'une technologie de ce genre ne va pas mettre tous les développeurs au chômage, et pas du jour au lendemain. Mais ça peut assez rapidement déboucher sur des technologies qui faciliteront le travail de développement (en commençant par suggérer du code, par exemple, ou en détectant des bugs bien plus efficacement que les outils d'analyse statique actuels), ce qui accélérera le processus de développement, et mécaniquement, on aura besoin de moins de développeurs. Donc, oui, ça va mettre des développeurs au chômage dans les prochaines années.
3  0 
Avatar de Aurelien Plazzotta
Membre extrêmement actif https://www.developpez.com
Le 24/02/2017 à 21:30
Le point de basculement est atteint une fois que les systèmes automatisés sauront créer d'autres systèmes automatisés.
Ce n'est pas seulement les développeurs qui sommes menacés alves1993, c'est nous : citoyens.

N'est-ce pas sur developpez.com qu'une actualité citant Bill Gates où ce dernier déclarait que dans 20 ans, 80% de la population mondiale subirait de très grandes difficultés à signer un contrat de travail ?
2  0 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 27/02/2017 à 5:39
Citation Envoyé par egann538 Voir le message
D'autre part, j'attends de voir apparaître le programme capacle de générer des spécifications précises et compréhensibles du 1er coup, ainsi que celui qui sera capable de penser à tous les scénarios permettant de tester la solution
Soyons raisonnable. Même un humain n'en est pas capable. Mais faire une spécification qui est capable d'identifier les besoins les plus triviaux serait un bon départ. Et je pense qu'il y aurait de quoi faire en partant des systèmes de synthèse automatique de texte.
2  0 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 27/02/2017 à 15:36
Citation Envoyé par egann538 Voir le message
Si pour contourner cela, on souhaite mettre en place une façon d'écrire des spécifications de bas niveau, compréhensible par une IA, et pour un programme d'une complexité moyenne, cela demandera tout autant de travail que d'écrire le programme soi-même. Une illustration ici.
Une illustration qui n'est qu'une métaphore et qu'on peut interpréter sous 2 angles :
1. Pessimiste : peu importe les avancées, on devra toujours se "limiter" à ce que peut faire la machine.
2. Optimiste : la notion même de code va évoluer pour se rapprocher de notre langage naturel, le rendant lui-même implémentable.

Ne t'en déplaise, si l'humour de ton illustration construit sur le premier, c'est bel et bien le second le plus réaliste. Les langages de programmation ont évolué pour passer du binaire, qui n'a aucun sens pour l'humain, à l'assembleur, qui s'assimilent à des fonctions du processeur, puis aux langages style C, qui intègrent des fonctions bien plus variées et avancées, avant d'atteindre des langages actuels qui permettent de faire de la programmation objet fournissant des concepts assimilables bien plus à des concepts du langage courant qu'à ceux, bas niveau, du processeur. L'évolution est donc claire : il ne s'agit pas de descendre plus bas niveau pour être compréhensible par la machine, mais de faire monter celui de la machine jusqu'au notre.

Là où je suis d'accord avec ton illustration, c'est que les spécifications tendent à être de plus en plus précises, complètes et claires, notamment grâce à des méthodes telles que développées en ingénierie des exigences (Requirements Engineering en anglais, le domaine où j'ai fait ma thèse). Ces méthodes tendent à rendre les spécifications si précises qu'il devient tout à fait pertinent de les assimiler à du "code", mais cela reste encore trop haut niveau pour les machines actuelles. Mais c'est ce vers quoi on tend. Donc il faut bien comprendre que pour y arriver, le but n'est pas de se réduire à ce que la machine peut faire, mais de bien comprendre le processus de communication humain, comprendre ses besoins et tendances, et établir des méthodes qui permettent d'atteindre le degré de précision souhaité. Ton illustration est comique, mais c'est tout.
1  0 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 02/03/2017 à 16:12
Selon ce que tu entends par IA et par l'idée que ce soit elle qui le code, on sait déjà le faire. Un exemple avec l'optimisation d'hyperparamètres (wiki anglais).
1  0 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 11/03/2017 à 13:48
Désolé Aiekick mais, si ton raisonnement n'est pas mauvais à première vue, il n'est cependant pas pertinent car on a déjà créé des IA qui découvrent des choses qu'on n'a pas réussi à découvrir nous-même, comme le théorème des quatre couleurs. Donc inutile d'avoir une IA qui crée une IA pour avoir cela. Quant à l'IA qui code des IA, si mon exemple des hyperparamètres ne te parle pas, peut-être que la programmation génétique sera plus convaincante. Donc peu importe comment je le regarde, ton "un jour" est pour moi déjà passé, et on attend toujours la révolution promise.

Par ailleurs, une machine qui tourne pour trouver on ne sait pas quoi, on n'en fait rien. Il faudra toujours un être humain pour lui dire ce qu'il faut chercher, voire lui donner des orientations à favoriser dans son investigation. La machine ne peut que trouver un nouveau moyen d'atteindre un but déjà identifié, et non découvrir un nouveau but, qui nécessite une notion de besoin/envie que la machine n'a pas. Dit autrement, n'importe quelle machine peut prendre un "nouveau" but en en prenant un de manière aléatoire, mais ça n'en fera pas pour autant un but aux yeux de son utilisateur, qui a d'ailleurs autre chose à faire que d'évaluer la pertinence d'une suite infinie de buts aléatoires. Pour que ce soit pertinent, il faut qu'en plus d'être nouveau ce soit utile, et là on entre dans la notion de machine créative (en), l'ennui étant que la notion d'utilité se limite par définition à une utilité humaine, tout simplement car il n'y a pas de machine sans utilisateur humain pour la vouloir. Tu pourras donc rêver de tout ce que tu voudras avec ton IA qui code des IA, mais :
- si ton IA code une nouvelle entité pour son utilisateur, ce sera toujours à l'humain de juger de son utilité (et donc si oui ou non c'est qualifiable d'IA)
- ce jugement se fera au rythme de l'être humain (on peut certes compter sur de l'apprentissage automatique, mais ça ne change pas ma conclusion, car l'apprentissage amène à mimer l'humain, y compris avec ses défauts, et il faut générer les donnés sur lesquelles apprendre, ce qui est très coûteux)

L'évolution induite par l'IA restera donc limitée en vitesse par les capacités physiques (et très probablement sociales aussi) humaines à intégrer, juger et exploiter les nouvelles données trouvées par l'IA. La seule façon pour l'IA de passer outre ces limites, c'est de travailler pour elle-même, et donc de lui donner une notion de besoin/envie indépendante d'un quelconque utilisateur. Mais dans ce cas, le raisonnement est d'autant moins pertinent car rien ne garantie qu'elle se mette à coder des IA, vu qu'il y a des tas d'autres choses à faire.
1  0 
Avatar de alves1993
Membre confirmé https://www.developpez.com
Le 24/02/2017 à 13:34
Beau travail de la part M$.
Je suppose que dans 10 ans mon poste de développeur sera menacé par ce genre d'outils.
0  0 
Avatar de ParseCoder
Membre averti https://www.developpez.com
Le 24/02/2017 à 14:01
Autant ça pourrait marcher et être utile pour du code "boilerplate", autant pour le reste je n'y crois pas trop.
Est ce que expliquer au système ce qu'il doit coder ne consiste pas justement à coder sous une autre forme, dans un autre langage? Et de toute façon on ne pourra pas faire une confiance aveugle dans ce genre de système, il faudra encore relire et tester ce code.
0  0 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 24/02/2017 à 14:08
Ils n'ont pas peur des problèmes de licences, ceux-là, à vouloir copier du code sur le Web.
1  1 
Avatar de Songbird
Expert confirmé https://www.developpez.com
Le 24/02/2017 à 18:24
Ils n'ont pas peur des problèmes de licences, ceux-là, à vouloir copier du code sur le Web.
Bof, quelques millions de plus ou moins dans leur budget, ça ne doit pas avoir grande importance.

Sinon je trouve l'idée vraiment très intéressante, avoir un assistant logiciel de la sorte pour générer des pans de codes peu critiques pourrait peut-être faire la différence à l'échelle d'une entreprise. Reste quand même à voir si le code suggéré n'est pas moins performant que celui rédigé par un humain.
0  0