Expert problem-solving is driven by powerful languages for thinking about problems and their solutions. Acquiring expertise means learning these languages -- systems of concepts, alongside the skills to use them. We present DreamCoder, a system that learns to solve problems by writing programs. It builds expertise by creating programming languages for expressing domain concepts, together with neural networks to guide the search for programs within these languages. A ``wake-sleep'' learning algorithm alternately extends the language with new symbolic abstractions and trains the neural network on imagined and replayed problems. DreamCoder solves both classic inductive programming tasks and creative tasks such as drawing pictures and building scenes. It rediscovers the basics of modern functional programming, vector algebra and classical physics, including Newton's and Coulomb's laws. Concepts are built compositionally from those learned earlier, yielding multi-layered symbolic representations that are interpretable and transferrable to new tasks, while still growing scalably and flexibly with experience.
翻译:专家解决问题的驱动力是用于思考问题及其解决方案的强大语言。 获取专业知识意味着学习这些语言 -- -- 概念系统,以及使用这些语言的技能。 我们展示了DreamCoder,这是一个通过写程序来学习解决问题的系统。 它通过创建表达域概念的编程语言来建立专业知识, 与神经网络一起指导在这些语言中搜索程序。 “ 觉醒睡眠”的学习算法可以将语言与新的象征性抽象抽象扩展, 并用想象和重现的问题来培训神经网络。 DreamCoder 解决经典的感化编程任务和创造性任务, 如绘画和建设场景。 它重新发掘现代功能性编程、矢量代数和古典物理学的基本原理, 包括牛顿和库伦布的法律。 概念是从早期学到的概念中构建的, 产生多层次的象征性表述,可以解释, 并可以转移到新的任务, 同时仍然随着经验的增长而变得可扩展和灵活。