La matrice conditionnelle des inexactitudes pour un réseau de neurones et un ensemble de test de 500 programmes d'une longueur de 3 lignes. Chaque cellule contient la probabilité moyenne d'un résultat faussement positif (en gros caractères) et le nombre de programmes de test dont cette valeur est dérivée (en petits caractères, entre parenthèses). La saturation des couleurs est en corrélation avec la probabilité d'un faux positifLes programmeurs auront bientôt un bon assistant: un réseau neuronal intelligent qui peut effectuer des tâches de routine. De plus, avec l'aide d'un tel réseau de neurones, les gens peuvent créer des programmes sans même connaître la syntaxe d'un langage particulier et sans pouvoir réellement programmer. Il est nécessaire de composer un algorithme et de définir des tâches - et le réseau de neurones écrira du code pour les résoudre.
En conséquence, tout le travail deviendra beaucoup plus productif: «Les gens pourront créer des systèmes qui étaient impossibles à créer auparavant», a déclaré un expert indépendant
Armando Solar-Lezama du Massachusetts Institute of Technology, dans un
commentaire pour
New Scientist .
Des chercheurs de Microsoft et de l'Université de Cambridge ont développé un système appelé
DeepCoder , qui résout désormais correctement les problèmes simples des compétitions de programmation scolaire. DeepCoder utilise une technique appelée Inductive Program Synthesis, connue de nombreux développeurs. Elle prend des lignes de code d'autres programmes - et crée son propre programme unique. Il est important de garder à l'esprit que DeepCoder, comme les autres systèmes de synthèse de logiciels, utilise un langage spécifique au domaine (DSL) spécialisé pour une application spécifique. Il peut être appelé «mini-langage» ou «langage de programmation tronqué». Il ne contient que neuf fonctions de premier ordre:
TÊTE, DERNIÈRE, PRISE, GOUTTE, ACCÈS, MINIMUM, MAXIMUM, INVERSE, TRIER, SOMME
et cinq fonctions d'ordre supérieur:
MAP, FILTER, COUNT, ZIPWITH, SCANL1
La portée d'un langage spécifique au domaine est limitée par rapport aux langages de programmation à usage général.
Le choix des lignes de compilation du programme s'effectue après analyse des valeurs d'entrée et de sortie de chaque fragment de code. Dans le travail scientifique, vous pouvez étudier neuf exemples de programmes à 5 lignes écrits par le réseau neuronal DeepCoder. Par exemple, voici une solution au problème des bonbons (à gauche) avec une description textuelle (à droite) et des valeurs d'entrée (au centre):

En recherchant des lignes de code appropriées, DeepCoder dépasse l'homme: il est capable d'indexer et d'analyser beaucoup plus de code source que l'homme n'en est capable. Le système d'apprentissage automatique apprend à comprendre comment utiliser ces modèles - et constitue à l'avance la base. De plus, le réseau neuronal connectera les lignes trouvées de manière à ce qu'il ne se produise jamais de les connecter à une personne vivante. Par essais et erreurs, le réseau neuronal apprend progressivement à atteindre son objectif. Cette implémentation de la synthèse logicielle dans le système DeepCoder est appelée Learning Inductive Program Synthesis (LIPS).
Représentation schématique d'un codeur à couplage direct et d'un décodeur DeepCoderL'illustration ci-dessous montre comment le réseau de neurones DeepCoder prédit la probabilité que chaque fonction apparaisse dans le code source.

Tous ces avantages permettent à DeepCoder d'écrire des programmes beaucoup plus rapidement que ses prédécesseurs. Elle écrit un programme de trois lignes en une fraction de seconde, tandis que les systèmes précédents avaient besoin de plusieurs ou plusieurs dizaines de fois plus de temps pour essayer toutes les options possibles. Par exemple, le tableau montre la vitesse de génération de programmes à partir de trois lignes de code avec différentes tâches.

Les programmes à partir de cinq lignes de code sont générés un ordre de grandeur plus lentement. Le graphique de droite montre la dépendance de la vitesse à la durée du programme.

Au fur et à mesure que vous apprenez, le système comprend quelles combinaisons de codes fonctionnent et lesquelles ne fonctionnent pas. Elle s'améliore en programmation à chaque nouvelle tâche.
La technologie peut potentiellement être utilisée pour refactoriser et rechercher des bogues dans les programmes. Elle trouvera les mauvaises lignes et les remplacera par les bonnes lignes des autres programmes. Les auteurs pensent qu'avec son aide, il est facile de créer des programmes de routine dans le style du célèbre
IFTTT - pour automatiser les interactions de base entre les différents services Web. Même un non-programmeur peut faire des instructions simples comme sélectionner des photos sur Facebook et les trier selon des critères spécifiés. Ces programmes simples peuvent être créés en quelques minutes sans connaissances en programmation.
Bien sûr, de tels outils ne peuvent pas encore remplacer un vrai programmeur. Ils ne sont considérés que comme un outil auxiliaire. Les développeurs de DeepCoder eux-mêmes seront très utiles à l'avenir: il se déchargera du fardeau des opérations de routine et vous permettra de vous concentrer sur des tâches plus complexes et importantes.
Actuellement, DeepCoder est capable de résoudre des problèmes de programmation, en travaillant avec environ cinq lignes de code. Bien sûr, dans les langages de programmation avancés, cinq lignes de code vous permettent d'écrire un programme très utile, mais ce sont encore des choses de base assez simples. Les experts estiment qu'il est impossible de générer un programme complexe avec une grande quantité de code en utilisant la synthèse logicielle. D'un autre côté, avec l'aide humaine, cela est possible. Après tout, les grands programmes se composent d'un grand nombre de petits fragments.
Au moins au cours des prochaines années, la plupart des programmeurs ne seront pas confrontés à une perte d'emploi en raison de l'automatisation du codage. Mais les méthodes d'apprentissage automatique s'améliorent très rapidement. Il est étonnant de voir ce qui a été fait récemment dans ce domaine.