HOUDINI: Lifelong Learning as Program Synthesis

Lazar Valkov, Dipak Chaudhari, Akash Srivastava, Charles Sutton, Swarat Chaudhuri
3/31/2018
cs.LGcs.PLstat.ML

Official code: trishullab/houdini (53 stars, last commit 2025-03-24).

Abstract

We present a neurosymbolic framework for the lifelong learning of algorithmic tasks that mix perception and procedural reasoning. Reusing high-level concepts across domains and learning complex procedures are key challenges in lifelong learning. We show that a program synthesis approach that combines gradient descent with combinatorial search over programs can be a more effective response to these challenges than purely neural methods. Our framework, called HOUDINI, represents neural networks as strongly typed, differentiable functional programs that use symbolic higher-order combinators to compose a library of neural functions. Our learning algorithm consists of: (1) a symbolic program synthesizer that performs a type-directed search over parameterized programs, and decides on the library functions to reuse, and the architectures to combine them, while learning a sequence of tasks; and (2) a neural module that trains these programs using stochastic gradient descent. We evaluate HOUDINI on three benchmarks that combine perception with the algorithmic tasks of counting, summing, and shortest-path computation. Our experiments show that HOUDINI transfers high-level concepts more effectively than traditional transfer learning and progressive neural networks, and that the typed representation of networks significantly accelerates the search.

View on arXivView PDF

Code Implementations(1)

trishullab/houdiniOfficial100%

HOUDINI: Lifelong Learning as Program Synthesis

537CSS, PythonOct 26, 20181 years ago

Similar Papers

Cite this paper

@article{valkov2018houdini,
  title  = {HOUDINI: Lifelong Learning as Program Synthesis},
  author = {Lazar Valkov and Dipak Chaudhari and Akash Srivastava and Charles Sutton and Swarat Chaudhuri},
  year   = {2018},
  eprint = {1804.00218},
  archivePrefix = {arXiv},
  url    = {https://arxiv.org/abs/1804.00218}
}

Add a badge to your README

Shows whether official code is linked for this paper.

Code of Paper badge
[![Code of Paper](https://codeofpaper.com/badge/1804.00218.svg)](https://codeofpaper.com/paper/1804.00218)

Discussion