Introduction
Les réseaux de neurones sont de plus en plus utilisés pour générer du code dans des langages de programmation qui permettent une programmation générique et correcte, tels que Idris, Lean et Agda. Cependant, la plupart des modèles de pointe qui génèrent du code séparent le processus d'entraînement du processus de vérification de types.
Contexte Technique
Les modèles de langage sont entraînés pour prédire le prochain jeton dans un corpus d'entraînement, ce qui donne des fonctions de type LLM : List Token -> D (List Token), où D (List Token) est une distribution sur une liste de jetons. Les approches pour intégrer les types dans les réseaux de neurones incluent la vérification de types après l'entraînement, en utilisant des méthodes telles que Try ; Compile ; If Error Repeat et Constrained decoding.
Analyse et Implications
Ces approches ont des limites, car elles ne permettent pas aux modèles d'apprendre à produire des sorties typées de manière native. Les résultats montrent que les modèles qui utilisent des boucles de réessai peuvent faire des progrès, mais les performances sont améliorées lorsque les modèles sont entraînés en utilisant la structure du jeu, comme dans le cas d'AlphaZero. L'intégration des compilateurs de langages de programmation dépendamment typés dans l'entraînement des réseaux de neurones est un domaine qui n'a pas encore été exploré.
Perspective
La question clé est de savoir comment différencier à travers les systèmes de types, qui sont des objets discrets et non différentiables. La réponse à cette question pourrait permettre de développer des modèles de langage qui produisent des sorties typées de manière native, ce qui pourrait améliorer considérablement les performances dans des domaines tels que la programmation dépendamment typée.