2 puntos por GN⁺ 2024-06-05 | 1 comentarios | Compartir por WhatsApp

Difusión en árboles de sintaxis para la síntesis de programas

Resumen general

  • Problema: los modelos de lenguaje grandes (LLM) generan código un token a la vez. En este proceso, falta retroalimentación basada en observar el resultado de ejecución del programa.
  • Solución: se propone un modelo neuronal de difusión que opera sobre árboles de sintaxis. De forma similar a los modelos de difusión de imágenes, revierte el ruido aplicado al árbol de sintaxis.
  • Método: en lugar de generar código desde cero, lo edita de forma iterativa manteniendo la validez sintáctica. Esto facilita combinarlo con búsqueda.
  • Aplicación: se aplica a tareas de gráficos inversos para convertir imágenes en programas que generan esas imágenes. Al combinarlo con búsqueda, permite escribir programas gráficos, verificar el resultado de ejecución y depurarlos.

¿Qué significa agregar ruido a un programa?

  • Agregar ruido: se selecciona un nodo aleatorio del árbol de sintaxis y se reemplaza por otro nodo del tipo correcto.
  • Reversión del ruido: después de agregar ruido, este se procesa en sentido inverso para volver al estado original.

Generación de programas mediante búsqueda

  • Uso de búsqueda: el modelo usa búsqueda para encontrar el programa óptimo que genere una imagen objetivo dada.
  • Eficiencia: puede encontrar el programa correcto con solo unas pocas capas de búsqueda.

Cita

  • Artículo: "Diffusion On Syntax Trees For Program Synthesis"
  • Autores: Shreyas Kapur, Erik Jenner, Stuart Russell
  • Publicación: arXiv, 2024

Agradecimientos

  • Apoyo técnico: Kathy Jang, David Wu, Cam Allen, Sam Toyer, Eli Bronstein, Koushik Sen, Pieter Abbeel

Licencia

  • Creative Commons Attribution-ShareAlike 4.0 International License: el código fuente de este sitio web puede usarse libremente, y se debe agregar un enlace al pie de la página.

Opinión de GN⁺

  • Lo interesante: editar código reflejando el resultado de ejecución del programa resulta más intuitivo que el enfoque tradicional de generación secuencial de código.
  • Por qué ayuda: es útil para tareas de gráficos inversos y, en particular, puede ser una herramienta potente para convertir bocetos dibujados a mano en programas.
  • Perspectiva crítica: el proceso de agregar y revertir ruido puede ser complejo, y se necesita validación adicional sobre rendimiento y eficiencia en aplicaciones reales.
  • Recomendación de productos relacionados: entre otros proyectos con funciones similares están modelos de generación de código como Codex de OpenAI.
  • Consideraciones para adoptar la tecnología: al implementar esta tecnología, conviene revisar cuidadosamente los datos de entrenamiento del modelo y su desempeño en el entorno real de uso.

1 comentarios

 
GN⁺ 2024-06-05
Comentarios de Hacker News
  • Racket y generación de pistas para MOOC: Se parece a Racket y a la forma de generar pistas en MOOC. Consiste en transformar y analizar el árbol sintáctico para llegar a la solución objetivo. Da curiosidad si esto podría combinarse con enfoques modernos de machine learning.

  • Algoritmos genéticos y transformación de subárboles: En los 90, Koza y Adami estudiaron a fondo la transformación de subárboles como parte de los algoritmos genéticos. La función de optimización es un poco distinta.

  • Generación de árboles de programa: Hay una referencia bibliográfica del año 2000 sobre generación de árboles de programa usando algoritmos genéticos. Faltan los puntos principales.

  • Markov Chain Monte Carlo: Markov Chain Monte Carlo no es algo nuevo en síntesis de programas. El trabajo de Josh Tenenbaum viene inmediatamente a la mente.

  • Demo de WebPPL: Hay varias demos en WebPPL, incluida la síntesis de naves espaciales 3D. También recomiendan libros relacionados y publicaciones del MIT Probabilistic Computing Project.

  • Optimización de compiladores/intérpretes: Da curiosidad cómo podría aplicarse a la optimización de compiladores o intérpretes. Queda la duda de si se podrían analizar partes ejecutadas a nivel ensamblador y derivar optimizaciones.

  • Cambios en tokens de programa: En los enfoques tradicionales se generan imágenes aleatorias y se usan métodos de optimización. Cuesta entender cómo los cambios en tokens de programa pueden ser diferenciables.

  • Integración con GitHub y herramientas de build: GitHub podría integrarse con herramientas de build comunes. Da curiosidad si sería posible compilar todos los proyectos compilados con llvm y aplicar un modelo de difusión sobre la representación intermedia.

  • Modelos de difusión y binarios: Da curiosidad si los modelos de difusión podrían funcionar a nivel binario. Queda la duda de si, al darles un prompt, podrían generar el binario final de un programa.

  • Integración con SDF: Me gustaría ver una integración con SDF.

  • Velocidad de renderizado de PDF: Los PDF renderizan lento por los comandos de dibujo generados programáticamente. Hace extrañar la sensación de un paper académico.

  • Beam search y difusión inversa: La idea de beam search es interesante. Da curiosidad cómo se integra la difusión inversa con beam search. Queda la duda de si en la etapa de difusión inversa se muestrean nodos m > k y solo se expanden los k nodos principales.