Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Goal: We want to automatically write code from the kinds of specifications humans can easily provide, such as examples or natural language instruction. List Processing from IO: Text Editing from IO: Natural language + IO → code [1, 2, 3, 4, 5] → [2, 4] Max Nye → Nye, M. “Consider an array of numbers, [7, 8, 0, 9] → [8, 0] Luke Hewitt → Hewitt, L. find elements in the given array not divisible by two” [1, 2, 3, 4, 5] → [1, 3, 5] [7, 8, 0, 9] → [7, 9]
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Given: Goal: Write a program [1, 2, 3, 4, 5] → [2, 4] which maps inputs to [0, 6, 2, 7] → [0, 6, 2] outputs [5, 10, 5, 1, 8] → [10, 8] How might people solve problems like this?
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Given: Goal: Write a program [1, 2, 3, 4, 5] → [2, 4] which maps inputs to [0, 6, 2, 7] → [0, 6, 2] outputs [5, 10, 5, 1, 8] → [10, 8] How might people solve problems like this? People use a flexible trade-off between pattern recognition and reasoning
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Easy problem: Spec: [1, 2, 3, 4, 5] → [2, 4] [0, 6, 2, 7] → [0, 6, 2] [5, 10, 5, 1, 8] → [10, 8] Solution:
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Easy problem: Spec: [1, 2, 3, 4, 5] → [2, 4] [0, 6, 2, 7] → [0, 6, 2] [5, 10, 5, 1, 8] → [10, 8] Solution: filter(lambda x: x%2==0, input)
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Easy problem: Spec: [1, 2, 3, 4, 5] → [2, 4] [0, 6, 2, 7] → [0, 6, 2] [5, 10, 5, 1, 8] → [10, 8] Solution: filter(lambda x: x%2==0, input) Fast, using pattern recognition
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama More difficult problem: Spec: [3, 4, 5, 6, 7] → [4, 7] [10, 8, 7, 3, 2, 1] → [10, 7, 1] [5, 1, 2, 13, 4] → [1, 13, 4] Solution:
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama More difficult problem: Spec: [3, 4, 5, 6, 7] → [4, 7] [10, 8, 7, 3, 2, 1] → [10, 7, 1] [5, 1, 2, 13, 4] → [1, 13, 4] Solution: filter(<SOMETHING>, input) (Fast, using pattern recognition)
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama More difficult problem: Spec: [3, 4, 5, 6, 7] → [4, 7] [10, 8, 7, 3, 2, 1] → [10, 7, 1] [5, 1, 2, 13, 4] → [1, 13, 4] Solution: filter(<SOMETHING>, input) filter(lambda x: x%3==1, Symbolic reasoning input) (Fast, using pattern recognition)
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama More difficult problem: Spec: [3, 4, 5, 6, 7] → [4, 7] [10, 8, 7, 3, 2, 1] → [10, 7, 1] [5, 1, 2, 13, 4] → [1, 13, 4] Solution: filter(<SOMETHING>, input) filter(lambda x: x%3==1, Symbolic reasoning input) (Fast, using pattern recognition) (Slow)
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Very difficult problem: Spec: [2, 5, 0, 16, 12] → 0 [4, 23, 11, 9, 25] → 25 [3, 29, 30, 14, 16] → 14
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Very difficult problem: Spec: [2, 5, 0, 16, 12] → 0 [4, 23, 11, 9, 25] → 25 [3, 29, 30, 14, 16] → 14 [1, 7, 6, 9, 5] → 7 [5, 5, 1, 8, 8, 12, 4] → 12 [0, 4, 8, 5, 1] → 0 [3, 7, 2, 9, 1] → 9 [1, 0, 3, 7, 3, 8] → 0
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Very difficult problem: Spec: [2, 5, 0, 16, 12] → 0 [4, 23, 11, 9, 25] → 25 [3, 29, 30, 14, 16] → 14 Solution: <SOMETHING> input[input[0]] Symbolic reasoning (Slow)
Q: How do we model this? A: Program sketches filter( [3, 4, 5, 6, 7] Pattern filter(<HOLE>, Symbolic → [4, 7] lambda x: recognition reasoning [10, 8, 7, 3, 2, 1] input) x%3==1, → [10, 7, 1] (e.g., neural network) (e.g., guess and check) input) Program sketch (program specification) Full program Flexible trade-off between pattern recognition and reasoning Solar-Lezama et al, 2008, Murali et al, 2017
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Our system: SketchAdapt Learned neural network ... .25 .05 .02 .03 .25 .30 Neural Production probabilities recognizer Neural [3, 4, 5, 6, 7] → [4, 7] Symbolic sketch filter(lambda x: [10, 8, 7, 1] → [10, 7, 1] filter(<HOLE>, input) enumerator generator [5, 1, 13, 4] → [1, 13, 4] x%3==1, input) Program specification Program sketch Full program
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Our system: SketchAdapt Learned neural network ... .25 .05 .02 .03 .25 .30 Neural Production probabilities recognizer Neural [3, 4, 5, 6, 7] → [4, 7] Symbolic sketch filter(lambda x: [10, 8, 7, 1] → [10, 7, 1] filter(<HOLE>, input) enumerator generator [5, 1, 13, 4] → [1, 13, 4] x%3==1, input) Program specification Program sketch Full program Sketch generator: RNN that proposes program sketches (c.f. RobustFill) Devlin et al, 2017 Balog et al, 2016
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Our system: SketchAdapt Learned neural network ... .25 .05 .02 .03 .25 .30 Neural Production probabilities recognizer Neural [3, 4, 5, 6, 7] → [4, 7] Symbolic sketch filter(lambda x: [10, 8, 7, 1] → [10, 7, 1] filter(<HOLE>, input) enumerator generator [5, 1, 13, 4] → [1, 13, 4] x%3==1, input) Program specification Program sketch Full program Sketch generator: Symbolic synthesizer: RNN that proposes enumerator that fills in program sketches sketches, guided by (c.f. RobustFill) neural recognizer Devlin et al, 2017 (c.f DeepCoder) Balog et al, 2016
Ours Pattern recognition only (neural network) Results: list processing Reasoning only (symbolic enumeration) SketchAdapt can recognize familiar problems and generalize to unfamiliar problems Trained on length 3 programs SketchAdapt Length 3 test programs: List Processing: length 3 test programs 100 % of problems solved 80 60 40 20 SketchAdapt (ours) Synthesizer only (Deepcoder) Generator only (RobustFill) 0 10 1 10 2 10 3 10 4 10 5 Number of candidates evaluated per problem
Ours Pattern recognition only (neural network) Results: list processing Reasoning only (symbolic enumeration) SketchAdapt can recognize familiar problems and generalize to unfamiliar problems Trained on length 3 programs SketchAdapt Length 3 test programs: Length 4 test programs: List Processing: length 3 test programs List Processing: length 4 test programs 100 SketchAdapt (ours) Synthesizer only (Deepcoder) 50 Generator only (RobustFill) % of problems solved % of problems solved 80 SketchAdapt 40 60 30 40 20 20 10 SketchAdapt (ours) Synthesizer only (Deepcoder) Generator only (RobustFill) 0 0 10 1 10 2 10 3 10 4 10 5 10 1 10 2 10 3 10 4 10 5 Number of candidates evaluated per problem Number of candidates evaluated per problem
Natural language + IO examples → Code
Natural language + IO examples → Code Requires less data than pure neural approaches: AOgROisS 100 2ur mRGeO % Rf test SrRgrDms sROveG GenerDtRr RnOy (RRbust)iOO) 80 6ynthesizer RnOy (DeeSFRGer) 60 40 SketchAdapt 20 0 2000 4000 6000 8000 79214 (fuOO GDtDset) 1umber Rf trDining SrRgrDms useG
Natural language + IO examples → Code Requires less data than pure neural approaches: Generalizes to unseen concepts: AOgROisS 100 2ur mRGeO % Rf test SrRgrDms sROveG GenerDtRr RnOy (RRbust)iOO) 80 6ynthesizer RnOy (DeeSFRGer) 60 40 SketchAdapt 20 0 2000 4000 6000 8000 79214 (fuOO GDtDset) 1umber Rf trDining SrRgrDms useG
Learning to Infer Program Sketches Maxwell Nye, Luke Hewitt, Josh Tenenbaum, Armando Solar-Lezama Come see our poster: Today (Thurs) 06:30 - 09:00 PM @ Pacific Ballroom #182 input head tail sum +1 -1 .25 .03 .02 .06 .40 .05 ... [1, 3, -4, 3]-> 3 [-3, 0, 2, -1]-> 2 Count >0 (Map (HOLE) ) Count >0 (Map +1 input) [7,-4,-5, 2]-> 2
Recommend
More recommend