La resolución de problemas experta depende de potentes lenguajes de pensamiento, es decir, sistemas de lenguaje para reflexionar sobre los problemas y sus soluciones. Adquirir experiencia significa aprender estos lenguajes, tanto el sistema conceptual como las habilidades para usarlos. Presentamos DreamCoder, un sistema de aprendizaje que resuelve problemas escribiendo programas. Construye progresivamente experiencia creando lenguajes de programación para expresar conceptos de dominio, combinados con redes neuronales que guían el proceso de búsqueda de programas en estos lenguajes. Un algoritmo de aprendizaje “vigilia-sueño” alterna la expansión del lenguaje, añadiendo nuevas abstracciones simbólicas, y el entrenamiento de la red neuronal en problemas imaginados y reproducidos. DreamCoder es capaz de resolver tareas clásicas de programación inductiva, así como tareas creativas como dibujar imágenes y construir escenas. Redescubre los principios fundamentales de la programación funcional moderna, el álgebra vectorial y la física clásica, incluidas las leyes de Newton y la ley de Coulomb. Los conceptos se construyen composicionalmente a partir de contenido aprendido previamente, formando representaciones simbólicas de varias capas e interpretables que se transfieren a nuevas tareas al tiempo que se escalan de forma flexible y eficiente con la experiencia.
Un sueño de larga data de la inteligencia artificial (IA) es construir máquinas que aprendan como niños (1), es decir, partiendo de muy poco conocimiento y creciendo gradualmente hasta todo el conocimiento que poseen los adultos humanos. Sin embargo, este objetivo sigue siendo lejano, porque la inteligencia humana depende de muchas capacidades de aprendizaje que aún no han sido dominadas por los sistemas artificiales. Si bien las máquinas actuales suelen estar diseñadas para categorías únicas de tareas, los humanos aprenden a resolver una amplia variedad de problemas, desde la cocina hasta el cálculo y el diseño gráfico. Además, si bien el aprendizaje automático a menudo requiere grandes cantidades de datos y generaliza mal, los humanos a menudo logran una fuerte generalización con poca experiencia. Quizás la diferencia más notable es que los humanos construyen experiencia: adquirimos conocimientos que pueden comunicarse y ampliarse, generando constantemente nuevos conceptos sobre los existentes, volviéndonos mejores y más rápidos aprendices una vez que dominamos un dominio.
Este artículo presenta DreamCoder, un sistema de aprendizaje automático diseñado para acercarse a las capacidades humanas: descubrir de manera eficiente conocimiento interpretable, reutilizable y generalizable en una amplia gama de dominios. DreamCoder encarna un enfoque que llamamos