[BidClub_]
Machine Learning Street Talk · · 87 min

Francois Chollet - ARC reflections - NeurIPS 2024

Francois CholletTim Scarfe

Podcast
TL;DR
  • ARC Prize 2024 showed that better ideas can neutralize a 1,000-fold compute advantage. Kaggle submissions ran for under 12 hours on one P100—roughly $10—while frontier-model entries could spend $10,000, yet both reached about 55%; even per task, the frontier track used roughly 200 times more compute. Chollet’s investable framing is blunt: “Compute is really a multiplier for ideas,” so raw compute is not a substitute for better methods.

  • The two successful paradigms were deep learning-guided program synthesis and test-time training, but they adapt in fundamentally different ways. Static LLM transduction stays below roughly 10% on ARC; fine-tuning on each task’s demonstrations lifts it into the 50%-55% range and “probably even 60% soon.” Chollet accepts that as legitimate generalization, yet prefers systems that construct verifiable programs through search: “I don’t think it’s a good idea to try to use gradient descent as a replacement for a programming process.”

  • ARC 1 is nearing benchmark saturation without anything in the field being close to meaningful AGI. The best 2020 submission scored 20%, but an ensemble reached 49%; in 2024, one submission reached about 55% and the full ensemble 81%, close to the 85% target, while humans would score roughly 97%-99%. That gap between benchmark conquest and intelligence is why Chollet calls ARC “a compass towards AGI,” not a test for it, and plans ARC 2 with more diverse, less redundant tasks and stronger leakage controls.

  • The competition supports a hybrid architecture because perception and algorithms fail on opposite task classes. Neural transduction handles fuzzy, structurally continuous recognition; symbolic induction handles discrete procedures and can be executed against demonstrations. Chollet’s preferred stack therefore starts with verifiable induction, falls back to transduction, and shares representations across both: “There are problems where vector spaces are the right data structure and problems where symbolic discrete programs are the right data structure.”

  • Chollet interprets o1—explicitly as speculation—as test-time search over chains of thought, making it a genuine break from static inference. The system appears to explore branches, backtrack and edit until it constructs a near-optimal natural-language program; token volume and latency make a single forward pass “certainly not plausible” in his view. Accuracy should improve logarithmically with search compute, which makes compute-normalized benchmark reporting essential.

  • His theory of intelligence centers on adapting to novelty, then converting repeated solutions into reusable abstractions. Human System 2 reasoning is, in this account, iterated fuzzy intuition constrained into a symbolic artifact, while consciousness supplies the self-consistency check that prevents the process from becoming “hallucinating” or “dreaming.” This also explains why today’s agents fail when they chain unreliable guesses, yet improve when human-designed workflows provide decomposition and “strong guardrails.”

  • After leaving Google, Chollet is building a research company around deep learning-guided program synthesis and ultimately human-level AGI. The proposed product vision is programming through natural language, drawings and input-output examples, with the system actively asking users to resolve ambiguity; reusable abstractions would then circulate through a new lifelong, distributed learning architecture. He remains clear that frontier models, “not even o1,” are not there yet—but the end state would let non-programmers offload software complexity rather than merely autocomplete code.

Digest · the substance, structured for research

1. ARC Prize helped move the field beyond pre-training-only AGI

  • Chollet’s central reflection on 2024 is a narrative reversal: the earlier prescription was “100× larger models, 100× more data,” with AGI expected to emerge from scale. The newer realization is that something akin to System 2 reasoning must be explicitly added through test-time search, program synthesis or related mechanisms.

  • ARC Prize succeeded because it met latent demand from researchers who already suspected “plain LLMs weren’t gonna get to AGI.” Its popularity made that intuition concrete, but Chollet rejects treating the score as a binary AGI indicator: the benchmark is a research tool designed to direct attention toward strong generalization.

  • That stance is not a conversion to pure symbolism. Chollet has worked with deep learning since roughly 2013, evangelized it through Keras from 2014 and has advocated deep learning-guided program synthesis since 2017: “I’ve always been a deep learning guy.” His proposal augments neural pattern recognition with discrete reasoning rather than replacing it.

2. A $10 submission matched $10,000 of frontier-model compute

  • The private Kaggle track required self-contained notebooks because its tasks could not be sent to third-party APIs. Each submission received less than 12 hours on a VM with one P100 GPU—about $10 of compute—while preserving the fully private test set.

  • The public frontier-model track used 400 public-evaluation tasks plus 100 semi-private tasks sent to providers including OpenAI and Anthropic. Entries could consume $10,000 in API credits: 1,000 times the total budget and, because more tasks were evaluated, roughly 200 times more compute per task.

  • The result surprised Chollet: both tracks scored around 55%. Systems spending $10 delivered the same headline accuracy as systems spending $10,000, demonstrating that “compute is really a multiplier for ideas” and that vastly higher spending cannot rescue a comparatively inefficient method.

  • Unlimited compute could still brute-force ARC if the search language were suitable; Chollet estimates it might take hundreds of millions of dollars of compute to crack the entire dataset. That would be theoretically valid but “an extremely inefficient and extremely stupid idea,” making score without compute disclosure increasingly meaningless.

3. Test-time training is legitimate, but program search is more structured

  • Two approach families worked. Deep learning-guided program synthesis used LLMs to generate and iteratively debug code, with DSL-based synthesis remaining underexplored; test-time training instead fine-tuned a pre-trained ARC model on each new task’s demonstration pairs before directly predicting its output grid.

  • Without adaptation, static LLM transduction remains below roughly 10% because it can only fetch and reapply pre-trained patterns. Per-task fine-tuning recombines latent knowledge into a task-specific model, pushing accuracy into the 50%-55% range and, Chollet believes, “probably even 60% soon.”

  • Scarfe’s pushback was that task-specific augmentation and fine-tuning might violate developer-aware generalization by relying on human specialization. Chollet disagreed: the demonstrations provide the supervision autonomously, while human awareness of ARC’s format is no more disqualifying than the format-specific machinery inside program induction.

  • His preference remains discrete adaptation. Test-time training makes gradient descent perform the recombination and stores the task solution in modified weights; program search stores it in an explicit program. Human ARC reasoning seems closer to function composition than gradient descent, making o1-like search more attractive to him.

  • Chollet’s caveat on deploying test-time training at frontier scale is not primarily infrastructure: serving could be re-engineered, but the method needs clear input-target pairs, which ARC has and most real-world problems do not.

4. Architecture tweaks merely relocate the intelligence problem

  • Scarfe suggested future transformers might overcome failures on copying, counting and out-of-distribution algorithmic inputs, making transduction viable. Chollet agreed architecture changes can embed strong structural priors and allow gradient descent to discover solutions that generalize much farther.

  • The catch is that a human engineer must first understand the causal structure and encode an architecture “isomorphic” to it. Fully autonomous novelty adaptation would therefore require a machine that identifies the structure and generates the architecture itself—a problem Chollet considers at least as hard as general program search.

  • Some solutions were roughly 10 percentage points lower on the semi-private set than on the public evaluation. Program-synthesis solutions showed no comparable decline and scored essentially the same across both sets.

  • Chollet was nevertheless intrigued by Symbolica’s proposed route: use a symbolic process to turn a task definition into a specialized deep learning architecture, then train it. He called the approach “very, very original” and knew of no one else pursuing the same construction.

5. ARC 1 can be cracked long before intelligence is solved

  • In Kaggle’s first ARC competition in 2020, the winning Icecuber entry scored only 20% using basic brute-force program enumeration. Combining all submissions, however, yielded 49%—evidence that nearly half the private set was accessible to brute-force enumerators four years before 2024’s advances.

  • In 2024, the best single submission reached about 55%, still well below the 85% bar; Chollet estimates a human seeing the private set would score around 97%, 98% or 99%. Yet an ensemble of every 2024 submission reached 81%, despite none of those systems—or their ensemble—being meaningfully close to AGI.

  • The conclusion is uncomfortable but useful: scale can saturate a benchmark by combining narrow coverage. ARC 1 lacked enough task diversity, contained some redundancy and was not consistently challenging enough, so benchmark success increasingly measures coverage and brute-force reach rather than the generalization capability it was meant to isolate.

6. ARC 2 is designed to resist overfitting and leaderboard leakage

  • ARC 2 was not improvised after the 2024 results. Chollet publicly announced it in early 2022, after the 2020 competition exposed ARC 1’s weaknesses, and began crowdsourcing tasks with Lab42 in Davos before expanding and filtering the collection.

  • Human testers have attempted the tasks, producing difficulty data from solve rates and numbers of attempts. The goal is three difficulty-calibrated sets—public, semi-private and fully private—so a non-overfit public score should predict performance on the other two.

  • Reusing one private set across competitions let submitters repeatedly observe scores, creating gradual information leakage and, with enough submissions, the possibility of reconstructing test content. ARC 2 will return semi-private scores during competition and run the fully private evaluation only at the end, when producing the final leaderboard.

  • That design also enables apples-to-apples comparisons between constrained Kaggle systems and frontier models such as o1 Pro on identical tasks, even when their compute budgets differ. Chollet expected release “early next year,” after final human testing.

7. Perception and algorithms demand different representations

  • One of 2024’s most revealing findings was that program induction and neural transduction solved “substantially different sets of tasks.” Transduction excelled on perceptual pattern recognition; explicit programs excelled where the transformation was discrete, algorithmic and easy to state procedurally.

  • Chollet’s letter-A analogy carries the distinction: a visually trained system recognizes varied handwritten As immediately, but writing a symbolic algorithm to recognize them is tremendously difficult. Scarfe’s thought experiment conceded that a Python program equivalent to an MNIST network exists; its simplest representation would probably “look a lot like what the current net is doing.”

  • Induction should therefore come first when it fits, because a candidate program can be executed against every demonstration and formally checked. Transduction is an unverifiable guess; majority voting assumes wrong guesses scatter across answers while correct guesses converge, an assumption that raises confidence but never supplies proof.

8. Multiple views and latent programs offer practical hybrid routes

  • Omni-ARC used one model for program writing, program interpretation, transduction, input generation and other ARC-related tasks. Looking at a problem from several angles makes the network more likely to recover its “true shape” while transferring information among complementary objectives.

  • This multitask design also regularizes neural representations. A network trained through one modality can latch onto noisy correlations; forcing the same representation to support several views lets evidence from one task counter noise learned from another.

  • Chollet highlighted Clément Bonnet and his colleague’s work as one of his favorite competition papers. Their VAE learns a latent space of programs, then performs gradient descent through that space at test time—a form of “deliberation in latent space” distinct from both discrete search and weight fine-tuning.

  • Scarfe raised whether gradient search required a smooth, relatively homogeneous or convex landscape. Chollet said gradient descent needs a relatively smooth surface and that the VAE’s structured latent space is key. His proposed extension is to decode promising points into symbolic programs, run them against demonstrations and conduct local discrete search—turning latent guesses into verifiable artifacts.

9. Programs should be searched as graphs, not emitted as token strings

  • If Chollet spent a year on ARC, he would pursue deep learning-guided program synthesis—but not today’s default of token-by-token code generation. “Programs are not sequences of tokens”; they are graphs of operators, and synthesis should be a tree search in which neural models guide branching and targeted graph edits.

  • Humans do not mentally enumerate many ARC programs. They first describe grids through objects, properties, relationships and especially causal structure; that task model constrains the candidate space so sharply that only a handful of programs need consideration. Sufficiently strong modeling might “almost entirely remove the need for search.”

  • Scarfe compared this evolution to commercial LLM software moving from embedded chatbots toward models that orchestrate low-level tools. Chollet agreed: graph search lets the model modify a program locally and deliberately, while regenerating a token sequence makes the same targeted intervention much harder.

  • Kevin Ellis’s remixing route—starting from 100 handcrafted solutions, generating instances and using retrieval to combine concepts—addresses sparse ARC data rather than search structure. Chollet expects dense synthetic sampling to help LLMs, but warned that it leads to severe overfitting, matching the observed semi-private drop.

10. Reasoning is novelty adaptation disciplined by consciousness

  • Chollet separates replay from adaptation. Applying a memorized multiplication algorithm is one kind of reasoning and suits LLMs; confronting novelty requires recombining existing building blocks into a new model on the fly. The useful question is therefore not “can they reason?” but “can they adapt to novelty?”

  • Abstraction follows repeated novelty: when the same recombination recurs across successful solutions, the system can refactor it into a reusable building block. The next related problem then takes fewer steps and less energy. A fixed DSL is consequently limiting; the system must continually enrich its own language, whether atop a DSL or Python.

  • Chollet does not think reasoning has an intrinsic score. One must define a goal and observe behavior; given a goal, the best model is probably the simplest one that retains the causal factors needed to achieve it. Generalization power—the amount of novelty a system can adapt to—is one possible operational measure.

  • At the cognitive level, Chollet thinks fuzzy pattern recognition is fundamental. System 2 emerges when intuition is applied iteratively inside a structured artifact: a chess player guesses which branches matter, unfolds only selected moves and focuses on selected board regions, combining continuous judgment with discrete simulation.

  • Unconstrained iteration drifts into hallucination or dreaming—“repeatedly intuiting what comes next” without regard for the past. His theory is that consciousness supplies the self-consistency guardrail, bringing past and anticipated future into a present “nexus point”; explicit step-by-step reasoning therefore requires awareness.

  • He also argues that human efficiency is not merely a matter of cheap operations: neurons are more energy-hungry than transistors, yet humans can solve ARC using only a few calories because they use comparatively few neural operations. He expects AGI when AI reaches comparable energy efficiency.

11. o1 points toward search, while the new company targets the full stack

  • Chollet stressed that he had no insider information about o1. His best hypothesis is test-time tree search over possible chains of thought, including branch evaluation, backtracking and editing, until the model produces a plausibly near-optimal natural-language program. He called the resulting novelty adaptation “a genuine breakthrough” beyond classical deep learning.

  • Scarfe raised the competing theory that process supervision occurs during training but inference is one forward pass. Chollet called that “certainly not plausible”: tokens, latency and compute clearly indicate search. Training may resemble AlphaZero-style learning to reproduce strong chains, while inference still searches chain-of-thought space; accuracy then improves logarithmically with compute.

  • Current agents remain constrained by compounded error: an LLM is a useful “guessing machine,” but chaining many fallible guesses rapidly reduces reliability. Scarfe’s AI Scientist example showed decomposition producing much better work than one-shot paper generation; Chollet agreed because human programmers supplied the orchestration and “strong guardrails” that convert iterated System 1 into System 2.

  • Having left Google a few weeks earlier, Chollet was forming a company and research lab with a friend, hiring a team and making deep learning-guided program synthesis his full-time work. He wants solutions and benchmarks to co-evolve, aims explicitly at human-level AGI, and will not enter the ARC Prize he runs.

  • His product vision is programming from input-output pairs, natural language, drawings or visual data-flow graphs. The AI would surface ambiguous cases, ask the user which output is correct and collaboratively refine the program; frontier systems, “not even o1,” do not yet support software complexity at a human engineer’s level.

  • Beyond a single assistant, he anticipates “a completely new type of architecture”: many instances solving problems for different users, detecting commonalities and circulating them as reusable building blocks through lifelong distributed learning. Chollet declined to identify the exact implementation—“I can’t really tell you exactly what we’re building”—but framed that abstraction loop as the engine of increasing capability.

Francois Chollet

I've never been in the purely symbolic camp. If you go back to my earliest writing about why we need program synthesis, I was saying we need deep learning-guided program synthesis. We need a merger of intuition and pattern recognition with discrete, step-by-step reasoning and search in one single data structure.

I've said very repeatedly for the past 8 years or so that human cognition really is a mixture of intuition and reasoning, and that you're not going to get very far with only one of them. You need the continuous kind of abstraction that's provided by vector spaces and deep learning models in general, as well as the more discrete, symbolic kind of abstraction provided by graphs and discrete search.

Tim Scarfe

So why do your detractors see you as a symbolist when you're clearly not?

Francois Chollet

I'm not sure. I've been into deep learning for a very long time, since basically 2013. I started evangelizing deep learning very heavily around 2014, and back then the field was pretty small. Especially with Keras, I think I've done quite a bit to popularize deep learning and make it accessible to as many people as possible.

I've always been a deep learning guy. When I started thinking about the limitations of deep learning, I was not thinking in terms of replacing deep learning with something completely different. I was thinking of augmenting deep learning with symbolic elements.

Tim Scarfe

What is your definition of reasoning?

1. Reasoning Means Novelty

Francois Chollet

I don't really have a single definition for reasoning. I think it's a pretty loaded term, and you can mean many different things by that. But there are at least 2 ways in which I see the term being used, and they're actually pretty different.

For instance, if you're just memorizing a program and then applying that program, you could say that's a form of reasoning. Let's say in school you're learning the algorithm for multiplying numbers, for instance. While you're learning that algorithm, and then when you're tested, you're actually applying the algorithm. Is that reasoning? I think yes, that's one form of reasoning.

It's the kind of reasoning that LLMs and deep learning models in particular are very good at. You're memorizing a pattern, and at test time you're fetching the pattern and reapplying it. But another form of reasoning is when you're faced with something you've never seen before and you have to recompose, recombine the continuous building blocks you have access to—your knowledge, and so on—into a brand-new model and do so on the fly.

That is also reasoning, but it's a very different kind of reasoning, and it internalizes very different kinds of capabilities. I think the important question about deep learning models and LLMs in particular is not whether they can reason. There's always some sense in which they are doing reasoning. The more important question is whether they can adapt to novelty.

There are many different systems that could just memorize programs provided by humans and then reapply them. What's more interesting is whether they can come up with their own programs and their own abstractions on the fly.

Broadly speaking, I think programming from input-output pairs will be a widespread programming paradigm in the future, and that will be accessible to anyone because you don't need to write any code. You're just specifying what you want the program to do, and then the computer programs itself.

If there's any ambiguity in what you meant—and there will always be ambiguity, especially if the instructions are provided by a nontechnical user—you don't have to worry about it because the computer will ask you to clarify. It'll tell you, “Okay, so I created basically the most plausible program given what you told me, but there's some ambiguity here and there. What about this input? Currently I have this output. Does that look right? Do you want to change it?”

As you change it iteratively, you are creating this correct program in collaboration with the computer.

Tim Scarfe

Is there just a massive new type of architecture we need to build for this?

2. Lifelong Learning Needs New Architecture

Francois Chollet

Yeah, I think we're going to need a completely new type of architecture to implement lifelong distributed learning, where you have many instances of the same AI solving many different problems for different people in parallel and looking for commonalities between the problems and commonalities between the solutions.

Any time they find sufficient commonality, they just abstract these commonalities into a new building block, which goes back into the system and makes the system more capable and more intelligent.

Tim Scarfe

I think I've got it now. So what you're building is a globally distributed AGI on the basis that we find a good solution to ARC.

Francois Chollet

Well, I can't really tell you exactly what we're building, but it's going to be cool.

Tim Scarfe

Yeah, it sounds pretty cool. What's your theory on how o1 works?

3. o1 Turns Search Into Reasoning

Francois Chollet

We can only speculate. I'm not sure how it really works, but what seems to be happening is that it is running a search process in the space of possible chains of thought, trying to evaluate which branches in the tree work better, potentially backtracking and editing if the current branch is not working out.

It ends up with this very long and sophisticated, and plausibly near-optimal, chain of thought, which represents basically a natural-language program describing what the model should be doing. In the process of creating this program, the model is adapting to novelty.

I think something like o1 is a genuine breakthrough in terms of the generalization power that you can achieve with these systems. We are far beyond the classical deep learning paradigm.

Tim Scarfe

So we're now at the end of the ARC Prize, and you just released a technical report about it. Can you reflect on the competition?

4. ARC Prize Changes the Narrative

Francois Chollet

I think we learned a lot, and overall it's been a big success. In 2024, we've seen a huge shift in the narrative around AI. Previously, the mainstream narrative was that we could just train larger models on more data—100× larger models, 100× more data—and get something that's basically AGI.

More recently, in the past year or so, there's been this realization that we were going to need something akin to System 2 reasoning: it is not something that will simply emerge from pre-training larger models on larger datasets. You need to add it to the system somehow.

Of course, you can use test-time search, program synthesis, and these sorts of techniques to do it. I think ARC Prize was really part of that narrative shift.

It's also part of the reason why ARC Prize has been very popular, with lots of teams entering, lots of people talking about it, and using it as a kind of reference for whether we might have achieved AGI or not. Which, by the way, is not what ARC is intended to be. It's not intended to be an indicator of whether we have AGI.

It's really just intended to be a tool—a research tool that gets you to think about the right problems and focus on the right directions. The reason why it's been successful is because there was a latent demand for something like this.

Many people had this intuition that plain LLMs weren't going to get to AGI, that we needed something more—either as a replacement for LLMs or some kind of superstructure around them—that would implement System 2.

And there was this intuition floating around, and I think lots of people just latched onto ARC Prize as a concrete sign that their intuition was right.

Tim Scarfe

So there were 2 flavors of the ARC Prize. There was a compute-restricted one, and there was the main one. Can you reflect on the difference between the 2 in terms of the entries?

Francois Chollet

Sure. We had the main track for the competition on Kaggle, and this was only for submissions that were self-contained. The reason is primarily that we needed to keep the private test set fully private. We cannot send it to a third-party server via an API.

On this track, people are submitting notebooks, effectively, that have to run on a VM in less than 12 hours, and the VM has just 1 P100 GPU. This is equivalent to a total of roughly $10 worth of compute per submission.

Then we had the public leaderboard, which was targeted at frontier models. It was evaluated on a different set of tasks because we cannot evaluate on the private test set without leaking it to a third-party server. Instead, it is evaluated on an entirely new set of tasks, which we call the semiprivate test set.

It is semiprivate because it is not published anywhere, so it is not public. But it is also not entirely private, since we are actually sending the task data via the API to OpenAI, Anthropic, and so on. Each submission on that leaderboard can use up to $10,000 in API credits. So that is 1,000 times more compute than the private leaderboard.

On a per-task basis, it is actually a little bit less because we are evaluating on more tasks. We are evaluating on the 400 tasks from the public evaluation and the 100 from the semiprivate evaluation, which is really what we are looking at. On a per-task basis, that is about 200 times more compute.

What was really remarkable, and frankly quite shocking, is that the scores you end up seeing on the public leaderboard track what you are seeing on the private leaderboard. In both cases, we are at about 55%.

This tells you that it is not just about throwing more compute at the benchmark. Compute is really a multiplier for ideas. Of course, if you have infinite compute, you can solve the benchmark in a very stupid way, such as via brute-force search. But having better ideas gives you dramatically more leverage for your compute.

That is why we end up with solutions consuming $10 worth of compute that are doing around 55%, while solutions consuming $10,000 worth of compute are doing exactly the same. They are just not nearly as compute-efficient.

Tim Scarfe

Which was the most successful method that worked across the board?

5. Induction Versus Transduction

Francois Chollet

There were really 2 categories of approaches that worked well. One is deep-learning-guided program synthesis, which is my favorite approach personally and what I have been advocating for many years.

Most people nowadays are doing deep-learning-guided program synthesis using LLMs. They are using LLMs to generate code and to iteratively debug code. Some people are trying to do deep-learning-guided program synthesis using building blocks from a DSL. I think this is a very underexplored approach, but I think it should be an effective one.

The other category of approaches has been test-time training, where you use an LLM to directly try to predict the solution given a task description. You are looking at a set of demonstration pairs and then looking at an input grid, and you are directly trying to generate the output grid. This is a process that we call transduction, as opposed to induction.

Program synthesis is program induction. You are trying to write down the program that will map the input grids to the output grids. In transduction, you are just trying to directly predict the output grid.

If you try to do this with LLMs and stay within the classical deep-learning paradigm, where you have a big model that is pretrained on tons of data and then, at inference time, it is static, you really cannot adapt to any meaningful amount of novelty. You are stuck memorizing patterns and, at test time, fetching and reapplying the patterns that you have memorized.

To go beyond that, people have started using test-time training. The idea is that you start by pretraining a base model. It knows about ARC and ARC tasks. Then, at inference time, on each new task that you see, you try to fine-tune the base model on the demonstration pairs, basically trying to recombine the knowledge contained within latent space into a new model adapted to the task at hand.

If you do not do this test-time adaptation, LLM-based transduction models are stuck below roughly 10% accuracy. But if you start doing test-time training, you unlock a dramatically higher level of generalization, and you can go well into the 50% or 55% range, probably even 60% soon.

Tim Scarfe

The big question is whether that is in the spirit of the challenge or not. I have done some interviews on this transduction with active fine-tuning, where you take the test instances, do some dataset generation and augmentation, fine-tune the model, and do really well.

Certainly, as a methodology to broadly generalize to lots of tasks, it is good. But the problem is that it still has human supervision. You have stressed from the very beginning, in your measure of intelligence, that we need developer-aware generalization. That simply means that we cannot have a human supervisor specializing the thing for every downstream task.

We need to make a system that can itself generalize to tasks that the developer of the system was not aware of. By that metric, do you feel that it is not in the spirit of ARC?

Francois Chollet

No. I think it is a completely legitimate way to approach a challenge. I also think it represents a very significant breakthrough in generalization power and in the ability of these models to adapt to something they have not seen before.

I do not think the supervision we are talking about is really done by humans. You are using the demonstration pairs to fine-tune the model, so this is actually fairly autonomous. Of course, this needs to have been programmed by a human who is aware of the task format. But the same would be true for a program-induction-type approach.

I think it is very much in the spirit of the challenge. Further, I think it does demonstrate a legitimate breakthrough in generalization.

Tim Scarfe

Pressing on the legitimacy thing, it stands to reason that we do some kind of active inference.

Francois Chollet

Of course. Yes.

Tim Scarfe

We are always adapting to novelty, building new models, and so on and so forth. So what is the difference between transductive active fine-tuning and what we do?

Francois Chollet

I am not sure what we do exactly. Of course, we are doing active inference. What does that mean exactly? What algorithms and data structures are we leveraging? We do not know, so I cannot really tell you what the difference is.

I will say one thing. When you are doing test-time training with an LLM, you are letting a gradient-descent process do the knowledge recombination. To adapt to novelty, it is necessary to take the knowledge that you have and recombine it in some way. There are multiple different things you could be doing to achieve that.

You could be doing a program search, where the thing that is adapted to the new task is a program, and you are building this program via a search process. You could also do something like what the o1 model from OpenAI is doing, which is very similar to that. You are effectively doing a search in the space of chains of thought, and you are writing down this chain of thought, which is basically a natural-language program for the model to execute.

You are doing this search via an AlphaZero-style search process, like a tree-search process. That is one approach. You can also use discrete program search to write down the program, and the program is the artifact that models the task at hand.

Or you can try to modify the weights of the model and modify its representations to create a new model adapted to the task. In this case, the artifact adapted to the task is the model itself. That is what test-time training does, and it does so via gradient descent.

My take is that I do not think humans adapt to novelty by recombining what they know via gradient descent specifically. I think the level at which we represent knowledge, especially in the context of solving ARC puzzles, is much more abstract and symbolic in nature. The way we combine it is much closer to function composition than to what you can achieve with gradient descent.

In short, I do not think it is a good idea to try to use gradient descent as a replacement for a programming process.

I’m actually more of a fan of what a system like o1 is doing than trying to do this test-time training.

Tim Scarfe

We’ll get to o1 in a second, but there are folks who are really bullish on this transduction thing. I think you and I agree that the reason it doesn’t work in principle is because language models are just finite-state automata. They don’t have this compositional generalization, even in principle, right?

But we know there’s evidence that transformers on their own can’t do basic things like copying and counting and all of these kinds of things. Some people are bullish because they think we could improve the architecture so that it could do those kinds of things, and then a transductive approach might work in the future. Would you rule that out?

Francois Chollet

No, I think that’s entirely plausible. As you point out, even given lots of data, there are many algorithmic tasks that you cannot train a transformer to do. Or even if you can, it will learn a solution that does not generalize very well. It will work on inputs that are pretty close to what it’s been trained on, but if you try an input that’s very far away from the training distribution, it will just fail.

People who think we can move past these limitations are saying that we can make architecture tweaks. They are right. It is always possible to take a deep learning model and modify the architecture to bake into it some strong structural prior about the algorithmic problem that you’re trying to solve. Then you can actually use gradient descent to find a solution that will generalize.

The way this works is by asking a human engineer to first understand the task at hand and convert that understanding—that symbolic understanding—into a better architecture: an architecture that, in some important ways, is isomorphic to the causal structure of the problem.

Of course, if you want to autonomously adapt to novelty, you cannot require a human engineer to intervene in writing your architecture. The process has to be fully autonomous. The question is, can you create an architecture-search or architecture-generation machine that will take a problem, identify the key elements of the problem structure that you need to bake into your architecture, and then generate the architecture?

If you can do that, then sure, maybe you can leverage that to achieve trans-structuralization. But I think that problem is at least as difficult as program search in the general case.

It’s also pretty overfit, as it turns out. On the public leaderboard, we are evaluating on the public evaluation set, but we’re also evaluating on this semi-private evaluation set. The reason we’re doing that is to test for overfitting. Some solutions might be overfit to the public evaluation, and that was actually the case for their solution.

The score was something like 10 percentage points lower on the semi-private set. Other solutions—solutions based on program synthesis in particular—didn’t feature that drop at all. They were actually scoring exactly the same on both sets. So it tells you that whatever they did was, in some important way, overfit to the data that they had.

Tim Scarfe

Can we touch on that as well? You said that when you take an ensemble of all of the original Kaggle 2020 competition results, it got to about 49%.

Francois Chollet

That’s right.

Tim Scarfe

Tell me more.

6. ARC 2 Fixes Benchmark Flaws

Francois Chollet

In the very first ARC-AGI competition on Kaggle, back in 2020, the highest score by a single submission was only 20%. That was the winner, Icecuber, and it was doing basic brute-force program enumeration.

But if you looked at all of the submissions in the competition and assembled them together, you would see a high score of 49%, which would have been state of the art until very recently. That was, again, 4 years ago. What that tells you is that about half of the private test set is easily brute-forceable, because every single entry in the competition back then, in 2020, was doing some kind of brute-force program enumeration.

That is not AGI. That is not the sort of solution that we are looking for. The fact that doing this kind of stuff at scale could get you 49% is a very strong sign that the benchmark is flawed.

Today, if you look at the 2024 competition, the state of the art for any single submission is about 55%. You could say, “Okay, so we are very far from solving the benchmark, since the bar is 85%.” We also know that humans can solve very close to 100%. If I showed you the private test set, you’d probably do something like 97%, 98%, or 99%.

If you take an ensemble of everything that was submitted in the competition in 2024, you would get to a high score of 81%, which is pretty close to what we are looking for. I don’t think anything that was tried in the competition this year is really close to AGI in a meaningful sense, and the ensemble of everything is still not close to AGI.

It just shows that scale—brute-force compute scale—will eventually crack the challenge. What that says is that the benchmark is flawed and is now close to saturation, and that we need something else. That’s why we’re working on ARC 2.

ARC 2 is not exactly a novel idea. It’s not a reaction to the results that we got in 2024. I first publicly announced ARC 2 in early 2022, so a while back. It was a reaction to the 2020 competition results. I was aware that the benchmark had flaws: it was not quite diverse enough in terms of task diversity, not every task was quite unique, and there was some amount of redundancy. It might not have been challenging enough, either. So I wanted to do V2.

Back in 2022, in partnership with Lab42 in Davos, we started crowdsourcing a bunch of new tasks. Since then, we’ve kept making a lot more new tasks, and we’ve started filtering them and trying to analyze which ones were difficult for humans, which ones were difficult for AI, and so on.

We’ve collected a lot of human testing data as well. We hired people to actually try to solve the tasks, and that gives you a lot of information about how many attempts they use for different tasks and how many people solved each task. You can turn this information into a kind of human-facing difficulty rating. Then you can try to cross-correlate it with what AI can do.

We’re going to be releasing ARC 2 early next year. It’s going to address all of the flaws of ARC 1. It’s going to have slightly more data and leverage 3 sets: the public evaluation, of course; the semi-private evaluation; and the private evaluation.

One problem with the first few competitions on Kaggle is that we’ve been reusing the same private test sets across every competition. Anytime anyone made a submission, they could immediately see their score on the private evaluation. This can lead to some amount of information leakage about the private test set over time.

In fact, there are very well-documented techniques for how you can start to reconstruct the contents of the private evaluation, given enough submissions. We want to avoid this in the competition next year.

The way we’re doing this is that we’re going to be evaluating on the semi-private evaluation during the competition. When you submit something, you get your semi-private evaluation score, and only at the very end of the competition, to create the final leaderboard, are we actually going to run the submissions on the fully private test set.

Another nice thing about doing that is that it enables you to make direct, apples-to-apples comparisons between the Kaggle leaderboard and the public leaderboard with all the frontier models. Of course, it’s not going to be the same amount of compute, but the scores are going to be apples to apples. You’ll be able to say, “Okay, so my AI on this test set is scoring as well as, I don’t know, o1 Pro or whatever.”

Tim Scarfe

The Kaggle 2021 49%—when you take the aggregate—first of all, which ones were more brute-forceable? I suppose one way of looking at it is that, certainly with the mosaic patterns, there’s an exponential number of combinations in the solution space. But of course, in the compositional space, it might be brute-forceable.

We’re also starting to see with the induction and transduction methods that they can solve different types of problems. Maybe when you do human evaluations as well, humans can solve different types of problems, and there are all these overlapping Venn diagrams. How do you think about that?

7. Induction Meets Transduction

Francois Chollet

Yes. It’s actually one of the most interesting findings of the 2024 competition: program induction and doing transduction with deep learning models, typically an LLM, lead to solving substantially different sets of tasks.

And so this was surprising to me, but in retrospect, it makes sense, especially if you start looking at the tasks and analyzing what makes them different. There are some tasks that are very perceptual in nature. They are effectively pattern-recognition problems, and this is the kind of task that you solve well with transduction methods. There are other tasks that are much more algorithmic and much more discrete in nature. You cannot provide an easy solution based on pattern recognition, but it is very easy to write down an algorithm to produce a solution.

Conversely, if you look at puzzles that are very perceptual, it is very challenging to write solution programs for them. The program would have to formalize a lot of perceptual concepts that make intuitive sense for us but are actually very difficult to express in program form. Imagine trying to recognize the letter A, for instance. If you are just looking at letters, you can immediately see it. If you have some pretraining visual knowledge of the shape of letters, this is a trivial problem: you just recognize letters using pattern recognition. But if you try to write down an algorithm that would take a handwritten A and tell you whether it is an A, for instance, it is actually a tremendously difficult problem.

Tim Scarfe

A couple of thoughts on that. First of all, on that Kevin Ellis paper—the induction-transduction paper—maybe for political reasons, it feels like they wanted to find an inductive, explicit function. In their ensemble method, they first searched for inductive functions by brute-forcing it, and then fell back to transduction. The thought occurs to me that, just because we cannot write a Python program to recognize a digit, surely such a Python program could exist. Shouldn't we be thinking about making models generate such a program? Maybe the reason they cannot is because nothing like that is in distribution.

Francois Chollet

I think the reason why it is difficult is that we are talking about an input space that is structurally continuous and where decision boundaries are fuzzy, basically. You are talking about a problem that is fundamentally a pattern-recognition problem, and neural networks are intrinsically a good data structure for approaching this type of problem, whereas discrete symbolic programs are not. I really think it depends on what problem you are looking at. There are problems where vector spaces are the right data structure and problems where symbolic, discrete programs are the right data structure.

Tim Scarfe

I guess an interesting thought experiment is that there must exist a Python program that does what an MNIST model does.

Francois Chollet

Sure.

Tim Scarfe

What is the simplest possible representation of that program? Would it still be ridiculously complicated?

Francois Chollet

I think the simplest representation of that program would look a lot like what the current neural network is doing, to be honest.

Tim Scarfe

Right. Yeah, I think that is the clincher, isn't it? There is no way of decomposing it into a much simpler version.

Francois Chollet

Yeah, I think it really depends on the nature of the problem. For some problems, program synthesis is just a bad idea, and perceptual problems are certainly in this category. Conversely, for some problems, trying to use a pattern-recognition machine is just a bad idea—problems that are algorithmic in nature.

Tim Scarfe

How do you think we could effectively combine induction and transduction methods?

Francois Chollet

Well, the way Kevin Ellis and his team are doing it in their paper is that they start with induction and fall back on transduction when it does not work. I think that is a very smart strategy because induction is formally verifiable. You can try to run your candidate program on the demonstration pairs that you have access to and see, first of all, whether it runs and whether it gets you the right result. If it does, you can have a fairly high degree of confidence that it is going to generalize.

Whereas, when you are doing transduction, it is more like guessing where the answer might be, and you do not really have any way to verify that it is the right guess. One thing you can do is increase the sample size. You can make many independent guesses and then look at which answers come up most often. But you are basically making the assumption that wrong guesses are all going to be wrong for different reasons, so you will end up with different wrong answers, whereas correct guesses are all going to be correct for the right reasons. The correct answer will show up more often. But you really have no way to make sure, with 100% certainty, that your guesses are correct. So it is much smarter to start with induction, because then you can have a high degree of confidence that the solution you have is the right solution, and then fall back when it simply does not work. Basically, induction is the method you should prefer, and you should only use transduction if it is not working.

Tim Scarfe

Should we think of them as being completely different? Hypothetically, if you used a shared model for doing induction and transduction, do you think there could be some crossover between them?

Francois Chollet

Absolutely. In fact, this is something that some people in the competition have tried. They are using, as you said, the so-called Omni-ARC approach, where the team is using the same model to solve a range of different ARC-related tasks. That includes writing down the program, interpreting programs, doing transduction, generating more input grids, and so on. All these different tasks are handled by a single model, and that does lead to learning better representations for the concepts that you find in ARC.

Tim Scarfe

Can you give me some more intuition on that? In a sense, you can get the network to think about the symbolic version at the same time as the solution space.

Francois Chollet

The basic intuition is that, if you look at the same problem from different angles, you are more likely to come up with the true shape of the problem. This is especially true if your data structure of choice is a neural network, because neural networks have a tendency to latch onto noisy statistical regularities. If you are only targeting one problem and using only one input modality, you are much more likely to overfit to elements of noise within that problem.

But if you are forcing the same representations to work across many different views of the problem, it acts as a regularization mechanism. First of all, you get better information about the problem because there is some knowledge transfer and information exchange between things like trying to predict the output grid and trying to generate more input grids, for instance. But it also acts as a regularization mechanism, where the noise that you might be learning with one of the modalities is countered by what you are learning with another modality.

Tim Scarfe

Another approach from Clément Bonnet, I think his name is, is searching the latent space better. Not necessarily brute-forcing, but actually searching the latent space for quite a while before you present a prediction. What do you think about that?

Francois Chollet

Yeah, this is actually one of my favorite papers submitted in the competition. It is a very original idea: you learn a latent space of programs, and then, at test time, you need some adaptation to the problem at hand. You need some recombination of your knowledge. While some people use test-time training and some people use search, what Clément Bonnet and his colleague Mark Farnay [?] are doing is very original.

They are learning this latent space of programs, and then, at test time, they are doing gradient descent in latent program space. They are essentially moving around latent program space to find the point that best matches the task. I think this is a great idea. There are many ways, I think, to improve the idea, but it is a very original take on test-time adaptation that is neither search nor fine-tuning. So I like it a lot.

Tim Scarfe

Would you still call that process thinking? Is thinking a System 2 process, or would you call that thinking as well?

Francois Chollet

It is a form of test-time search, except it is not discrete search. It is based on gradient descent. So, sure, I do not see why you could not implement some form of System 2 processing with that.

Tim Scarfe

Yeah. I wonder whether that breaks the analogy with human thinking—that it is doing perceptual deliberation.

It's quite an interesting category.

Francois Chollet

It is doing deliberation in latent space, yes.

Tim Scarfe

Yeah.

Francois Chollet

I think one way to improve the process is that you could also try to decode your latent programs back into a symbolic, discrete form, and then you can start doing local discrete search around the decoded programs. The benefit of that approach is that you would have the ability to actually run the programs and verify whether they work.

As long as you stay in latent space, even if you're doing gradient-descent-guided search within latent space to find the best possible point that represents a target program, you are very much limited to guessing. You have no way to assert that what the latent space is telling you matches the reality on the ground. So the ability to decode back into real program space and run these programs would be a very good addition to the system.

Tim Scarfe

Are there any potential issues with that approach? I guess it helps if the latent structure is quite homogeneous and the modes are easy to find. Could it be improved?

Francois Chollet

What do you mean by that exactly?

Tim Scarfe

He does gradient search over the latent space—

Francois Chollet

Yeah.

Tim Scarfe

—and finds some optimal position, and then does the inference from there. But wouldn't that work very well if it were quite a convex space, but not so well if it were a very heterogeneous space?

Francois Chollet

Of course. In order to be able to do gradient descent, you need a relatively smooth surface. But I think that's why they're using a VAE. I'm not sure if they've tried just directly learning a program embedding space where one point is one program.

As it turns out, this is not what they are doing. They are using a VAE, and the reason why is because, when you're using a VAE, you are learning much more structured, much smoother latent spaces. I think this is key to making test-time gradient descent work.

Tim Scarfe

So, other unexplored avenues of ARC. Maybe a better way to ask this is: if you yourself spent a year working on ARC, what would you do?

Francois Chollet

I would be doing deep-learning-guided program synthesis. I think the way people are doing deep-learning-guided program synthesis today is wrong.

Everyone is leveraging LLMs, which of course makes sense because they are these very powerful tools. They contain a lot of useful knowledge, and they can be applied to any problem. We've invested billions and billions of dollars into creating these tools, so not using them would feel like you're missing out on a lot of power.

But I think it is not the right approach to treat program synthesis as just token-by-token code generation. I think the right way to think about a program is as a graph of operators, and program search—program synthesis—is basically a tree-search process. I think you're better off trying to use deep learning models, and in particular LLMs, to guide that tree-search process. This is not something that many people are trying today, but I think this would be closer to the right approach.

Another thing that people are not doing today but should be is that, if you look at the way humans solve ARC puzzles, they are not trying many different solution programs in their mind. They're only trying a few. I think humans have the capability to first describe a model with their thinking and use this model, basically describing a grid, for instance, in terms of the objects it contains, their properties, and their relationships with other objects, with a focus on causal relationships in particular.

You can use these descriptive models to constrain the search space when you're finally looking at input-to-output programs. That's the reason why we only need to consider a handful of programs before finding the correct one. In that sense, it might be possible to do enough modeling of the task to almost entirely remove the need for search.

Tim Scarfe

It's so interesting what you just said. We should meditate on that just for a second. First of all, loads of people I've interviewed this week, especially in the neuroevolution space under Geoff Clune, for example, are latching onto LLMs because they say we need to have a measure of interestingness or novelty. And LLMs, because they're trained on all of the data in the world, capture our instincts really, really well—our intuition and so on. So they're a great way of generating programs.

But you said, though, that it's not such a good idea just to generate the program. The next step of evolution is guiding the search, and I think we're starting to see this enlightenment in the use of LLMs in many commercial bits of software.

For example, the original use of an LLM in an app was that you just had a chatbot and stuck it in there. Now things like Cursor, for example, are exposing a low-level API and using tool use and so on. The LLM is actually guiding the low-level API interactions in the app. So you're advocating for a similar evolution here, where the LLM actually guides the discrete search process rather than just generating code.

Francois Chollet

That's right. The idea is that, by creating your program via this iterative discrete search process, you actually have the ability to make targeted modifications to your program graph that will be significantly harder to make, I think, if you just treat the program as a sequence of tokens.

Also, you can change the nature of the space in which you are making additional decisions, right? Graphs are just the natural data structure to represent programs. Programs are not sequences of tokens.

Tim Scarfe

Another thing we're seeing is an intermediate solution. Kevin Ellis did this thing called remixing, where you have 100 handcrafted solutions, and for every single ARC task, you have a generator that can generate new instances so that they can generate sprites and layouts and so on.

Francois Chollet

Yes.

Tim Scarfe

Then they did this kind of expansion where they used retrieval-augmented generation, and it was doing an implicit form of library learning. It was mixing all the solutions together. Is that an intermediate to what you're talking about?

Francois Chollet

Not quite. I think that's a separate avenue. The idea is that, in order to get LLMs to perform well on a dataset, you need to expose them to as dense a sampling of ARC space as possible. And of course, there aren't a lot of ARC tasks available, so you have to make new ones.

A very easy way to make new ones is to leverage an LLM to extract the programmatic concepts found in, for instance, the training set, and then remix them into new tasks. But at the end of the day, this leads you to severe overfitting, and this is exactly what you are seeing with your solution.

Tim Scarfe

Because there's been a bit of an interesting evolution where even Kevin, in DreamCoder, had an explicit concept of awake and asleep—dreaming. And in his newer work on this, learning by example pairs, he's kind of made that dream-sleep process implicit. It just feels that maybe we could achieve some of the same stuff by coming up with a proxy or implicit version of it.

Francois Chollet

Mm-hmm. Yeah, yeah.

Tim Scarfe

Any other avenues for ARC that you're interested in? By the way, I think you spoke with George from Symbolica, and he had this kind of program-verification approach that he said he discussed with you.

Francois Chollet

Yes. What we discussed is what he described to me: basically, this idea of using a symbolic process to turn a problem definition—a task—into a deep learning architecture, and then training that deep learning architecture. I think that's a very, very original approach. I don't think there's anyone else, to the best of my knowledge, working on something similar.

I'm very curious about what he's going to be doing with it. It sounds fascinating.

Tim Scarfe

Yeah, absolutely. Do you think, just talking about benchmarks in general, we need to incorporate the compute budget into the benchmark?

Francois Chollet

Yes, absolutely. I think this is going to be a very pressing need in the future, and in particular next year for the publicly available ARC.

It's always possible, with test-time compute—like test-time search, test-time training, and so on—to buy higher performance at the cost of more compute. Typically, you're going to see a logarithmic relationship at test time between compute and performance. It kind of means that, if you want an apples-to-apples comparison between two systems, you have to look at the compute budgets.

You can only compare systems that are using the same amount of compute. For instance, if you look at the o1 model from OpenAI, you cannot really attribute to it a fixed score on ARC-AGI unless you're also kind of limiting yourself to a certain amount of compute.

It's always possible to logarithmically improve your performance by just throwing more compute at the problem. Of course, this is true for o1, but even before that, it was also true for brute-force program search systems. Assuming that you have the right DSL, extremely crude, basic brute-force program enumeration can solve ARC at a human level.

It would just take hundreds of millions of dollars of compute to crack the entire dataset that way. So it's an extremely inefficient and extremely stupid idea, to be honest. But in theory, it's possible, right?

Tim Scarfe

Philosophically speaking, do you think there's always a commensurate relationship between the amount of compute that is taken to do a task? What I mean by that is, when we use language and cognitive tools, we might not think we're using compute, but the universe presumably expended a lot of compute in order for those things to emerge. So in some sense, is it really possible to compress the amount of compute that we use?

Francois Chollet

I think so. I think humans are tremendously compute-efficient, and you see this in the fact that, let's say you're solving ARC tasks, for instance. You can solve the entire private test set and only expend a few calories, basically. You could say, “Okay, but it's because we're just using extremely little energy per operation that our brain does.”

But it's actually not true at all. If you're comparing transistors and neurons, for instance, you find that neurons are tremendously more energy-hungry than transistors. It just so happens that we're managing to solve extraordinarily hard problems using a comparatively small amount of neural operations. We're tremendously energy-efficient compared to current AI, and we're going to have AGI when we get to the same level of energy efficiency.

Tim Scarfe

What's your opinion on using a programming language like Python, a Turing-complete language, versus using a DSL in these approaches?

Francois Chollet

I think using a DSL, like for ARC, for instance, is fundamentally limiting. No matter what you do, no matter what base language you're using, you should be able to learn the functions that you're applying from the data that you have. In fact, you should be able to do this as a lifelong process.

Every time you find a new task and you're solving it, in the process, you're going to be coming up with useful abstractions, maybe abstractions that relate to problems you've seen in the past. So you're going to want to turn that into reusable functions, reusable building blocks, and store them, so that the next time you come across a similar problem, you can reapply the same building blocks and save compute—solve an equally difficult problem in fewer steps.

No matter what you do, you want to learn the language that you're going to be using. Of course, that could mean learning the DSL. That could also mean using something like Python, but within it, increasingly writing higher-order functions and classes and other reusable building blocks to enrich your language.

Tim Scarfe

I wondered if you are softening your position at all. You tweeted, “It's highly plausible that fuzzy pattern matching, when sufficiently iterated many times, can asymptotically turn into reasoning, and it's even possible that humans basically do it in that way, but it doesn't mean it's the optimal way to do reasoning.” Is that a shift in your position?

Francois Chollet

Compared to what position? I don't think it's a shift.

Tim Scarfe

I suppose it's saying that, first of all, it's possible that we think in this way.

Francois Chollet

I think we do, yes.

Tim Scarfe

Oh, interesting, because I would have thought that, because of the Spelke view on things, you would have thought that we do this high-level reasoning and we don't do the fuzzy matching.

8. Consciousness Enforces Consistency

Francois Chollet

I think the fundamental cognitive units in the human brain are actually fuzzy pattern recognition. That's the core thing that you do. When you're doing something that's more akin to reasoning or planning—when you're doing basically System 2 processing, this sort of slow, logical, step-by-step processing—what you're really doing is iteratively applying your intuition, but in a structured form.

By the way, this is exactly what deep-learning-guided program synthesis is about, which is the approach I've been advocating for since 2017. What are you doing when you are doing deep-learning-guided program synthesis? You are building a program, so basically a graph of operators, but you're building it step by step. At each step, when you're choosing what to edit in your graph, where to add something, or what branching decision to make, you're applying your intuition. You're applying a guess provided by a deep learning model, right?

So you're iteratively guessing to create this highly structured, symbolic, discrete artifact: this program. When you're running this program, that is System 2. I think this is basically the way we do System 2 as humans: we are iteratively guessing, iteratively applying fuzzy pattern recognition to construct an artifact that is, in fact, symbolic in nature.

Let's say you're playing chess, for instance. When you're calculating in your mind, you're unfolding some moves step by step, but you're only going to be doing it for a few of the moves that are on the board. How do you select which moves to look at? You're applying pattern recognition. When you're simulating one move into the future, you're not going to be simulating the entire board. You're going to be focusing on some areas. So again, that's pattern recognition.

Sometimes, by the way, any sort of pattern recognition is basically a guess at heart, so it might be wrong in some way. In chess, you're calculating, and some of your intuition about future states of the board is wrong. Then you play the move and realize, “Oh, oops,” right?

I think this is basically how humans implement System 2. So this is not a shift in my position. I've been thinking about these ideas for quite a while. In fact, this is the basis for my current favorite theory for how to interpret consciousness: this idea that, in order for something like System 2 to arise from iterated fuzzy pattern recognition, that iteration sequence needs to be highly self-consistent.

Everything you add, you need to double-check that it matches what came before it, you know?

Tim Scarfe

Yes.

Francois Chollet

If you're just iteratively pattern-matching with no guardrails whatsoever, you're basically hallucinating; you're dreaming. This is exactly what happens when you're in a dream state, by the way. You're just repeatedly intuiting what comes next, but with no regard whatsoever for consistency, for self-consistency with the past.

I think this is the reason why any sort of deliberate, logical processing in the brain needs to involve awareness, needs to involve consciousness. Consciousness is this sort of self-consistency check. It's the process that forces the next iteration of your intuition, of this pattern-recognition process, to be consistent with everything that came before it, right?

The only way to achieve this consistency is via these sorts of back-and-forth loops that are bringing the past into the present and bringing your prediction of the future into the present. So you have this sort of nexus point in the present, this thing you're focusing on, and that nexus is basically your consciousness.

Consciousness is the process that forces iterated pattern recognition to turn into something that's actually reasoning, that's actually self-consistent.

Tim Scarfe

So I think the issue was that you haven't changed your position. It's just a case of people understanding what your position is. I think people dichotomize System 2. Symbolic people think it's all this discrete world, and then the alternative, the connectionist approach, is that it's all fuzzy matching.

Francois Chollet

I've never been in the purely symbolic camp. If you go back to my earliest writing about why we need program synthesis, I was saying we need deep-learning-guided program synthesis. We need a merger of intuition and pattern recognition together with discrete, step-by-step reasoning and search into one single data structure.

I've said very repeatedly, for the past 8 years or so, that human cognition really is a mixture of intuition and reasoning, and that you're not going to get very far with only one of them. You need the continuous kind of abstraction that's provided by vector spaces and deep learning models in general, and the more discrete, symbolic kind of abstraction provided by graphs and discrete search.

Tim Scarfe

So why do your detractors see you as a symbolist when you're clearly not?

Francois Chollet

I'm not sure. I've been into deep learning for a very long time, since basically 2013.

I started evangelizing deep learning very heavily around 2014, and back then the field was pretty small. Especially with Keras, I think I’ve done quite a bit to popularize deep learning and make it accessible to as many people as possible. I’ve always been a deep learning guy, right? And when I started thinking about the limitations of deep learning, I was not thinking in terms of replacing deep learning with something completely different. I was thinking of augmenting deep learning with symbolic elements.

Tim Scarfe

So you commented as well in this tweet that you were just talking to me about consciousness. You suggested that all System 2 processing involves consciousness.

Francois Chollet

Yes.

Tim Scarfe

Explain more what you mean by that.

Francois Chollet

Any sort of explicit, step-by-step reasoning needs to involve awareness. And conversely, if there’s any cognitive process that you’re running unconsciously, it will not have this strong self-consistency guarantee. It will be more like a dream, a hallucination.

It’s basically the idea that if you’re just iteratively guessing, unless you have this strong self-consistency guarantee, you will end up drifting and diverging. Consciousness is the self-consistency guardrail, basically. This is why you cannot have a System 2 without consciousness.

Tim Scarfe

What is your definition of reasoning?

Francois Chollet

I don’t really have a single definition of reasoning. I think it’s a pretty loaded term, and you can mean many different things by that. But there are at least 2 ways in which I see the term being used, and they’re actually pretty different.

For instance, if you’re just memorizing a program and then applying that program, you could say that’s a form of reasoning. Let’s say in school you’re learning the algorithm for multiplying numbers. When you’re tested, you’re actually applying the algorithm. Is that reasoning? I think yes, that’s one form of reasoning.

It’s the kind of reasoning that LLMs and deep learning models in particular are very good at. You’re memorizing a pattern, and at test time, you’re fetching the pattern and reapplying it. But another form of reasoning is when you’re faced with something you’ve never seen before, and you have to recombine the current building blocks you have access to—your knowledge and so on—into a brand-new model and do so on the fly.

That is also reasoning, but it’s a very, very different kind of reasoning, and it underlies very different kinds of capabilities. I think the important question about deep learning models and LLMs in particular is not whether they can reason. There’s always some sense in which they are doing reasoning. The more important question is whether they can adapt to novelty, because there are many different systems that could just memorize programs provided by humans and then reapply them. What’s more interesting is whether they can come up with their own programs, their own abstractions, on the fly.

Tim Scarfe

And what would it mean for a system to come up with its own abstractions?

Francois Chollet

To start coming up with abstractions, first of all, you need to be solving novel problems. Solving a novel problem means that you’re starting from some base of knowledge, some building blocks. Then you’re faced with a new task. You’re recombining them into a model of the task, applying this model, and it works.

In the process, as you solve many problems, you’ll start noticing that some patterns of recombination of the building blocks that you had happen often, right? When you start noticing this, it means you can take them and abstract them, refactor them into a more reusable form. Then you can add this reusable form back to the set of building blocks that you have access to, right?

Next time you encounter a similar problem, you’re going to be able to solve it in fewer steps, expending less energy, because you have access to this higher-level abstraction that fits the problem.

Tim Scarfe

Is there a way of measuring the strength of reasoning?

Francois Chollet

Again, you would need to start by defining precisely what you mean by reasoning. I think you can define, for instance, generalization power, which is basically the amount of novelty that you can adapt to.

Tim Scarfe

Yeah. It’s quite interesting because I suppose you define it in terms of performance, as in, how good is my model? Another way of describing it is to imagine that we think of reasoning purely as traversing the deductive closure: just composing together knowledge we already have in new configurations, and then making that leap in solution space because we found a new model that works really, really well.

Is there an intrinsic way of measuring the type of model rather than its generalization power?

Francois Chollet

No. I think you really have to observe what the model does. You cannot just inspect the model and tell how strong it is at reasoning.

Tim Scarfe

So there’s no intrinsic form of “This is good reasoning”?

Francois Chollet

Given 2 models of a problem, for instance, which model is better? Can you just look at them and tell which one is better? I think it’s very much goal-dependent, right?

You cannot really evaluate a model, like a simulation of a thing, for instance, if you don’t have something that you want to do with it. But if you do have a goal, then you just look at the causal factors required to achieve that goal, and the best model is probably going to be the simplest model that retains these causal factors.

Tim Scarfe

Francois, what are you doing next?

9. A New Research Lab

Francois Chollet

I just left Google a few weeks ago, so I’m starting a new company, a new research lab with a friend. I can’t really share much for the time being, but we’re going to be tackling program synthesis, and in particular, deep learning-guided program synthesis. We’re currently building the team.

Tim Scarfe

Amazing. Are you looking for people to join?

Francois Chollet

Yes.

Tim Scarfe

Tell me more. What are you allowed to tell us?

Francois Chollet

What I can tell you is that I’ve been talking about some of these questions, like the best way to get to AGI by deep learning-guided program synthesis, methods surrounding ARC-AGI, and what the next benchmark after ARC-AGI might be.

I’ve been thinking about this question on the side while at Google, where my full-time job was developing Keras, right? And now I feel like the time has come to focus full-time on the research question, so make the research not a side project, but the main thing.

Tim Scarfe

And is the focus creating the new benchmarks or beating the benchmark?

Francois Chollet

I think both. I’m a pretty strong believer in the idea that you need to co-evolve the solution together with the problem. That was actually the motivation for creating ARC-AGI in the first place: to have the right challenge that forces you to focus on the right questions, on the main bottlenecks to achieving strong generalization with AI.

I don’t think ARC-AGI is the last benchmark. Of course, there’s going to be a v2 of ARC-AGI, but that also isn’t going to be the last benchmark. I think we’re always going to need new benchmarks, exploring new things that are hard for AI and easy for humans.

Tim Scarfe

Is it cheating in any way if you do work on your own benchmark?

Francois Chollet

I don’t think so. The benchmark is meant as a tool for research. Again, something like ARC-AGI, for instance, isn’t really meant as a binary indicator telling you, “Oh, do we have AGI or not?” It’s really meant as a research tool.

It’s a challenge that forces you to work on the right questions, directs your attention to the right problems, and helps you make progress. So you could say that ARC-AGI is basically a compass towards AGI. It’s not like a test for AGI.

Tim Scarfe

There’s a spectrum of possible solutions to ARC. For example, because you know what’s in the private test set, you could just put the answers in directly, and then the—

Francois Chollet

Of course, but I’m not going to be entering ARC Prize in any way. Obviously not. I’m running ARC Prize anyway, so why would I enter it?

Tim Scarfe

Right.

Francois Chollet

But on that spectrum of generalization, there’s the moonshot, which is going for extreme generalization. Or there’s one notch below that. What are you going for?

Yes.

Tim Scarfe

What are you going for?

Francois Chollet

I would like to build AGI. I would like to build something with human-level capability.

Tim Scarfe

And what would that mean? What kind of things do you think you could achieve with that kind of AGI?

Francois Chollet

The most obvious thing is solving programming, right? If you solve AGI, then you can just describe what you want to a computer, and the computer will build it for you. If it’s really AGI, then it will scale to the same level of complexity, the same level of codebase complexity, that you can do with a human software engineer. And it’s probably not going to stop there.

Tim Scarfe

What’s the role of humans in software engineering when we start to get there?

Francois Chollet

Well, we’ll see. I think we’re going to start creating entirely new tools, entirely new interfaces, to work with this technology when it’s ready. We are still pretty far from it. We’re talking about something that doesn’t quite exist yet. I don’t think frontier models—not even o1—are quite at that level.

Tim Scarfe

Right now, programmers are very technical. Do you think that programming might be democratized in the future?

Francois Chollet

I think so, yes. I think in the future, anyone should be able to basically develop their own automation processes based on their own domain-expert knowledge of the problems they’re facing. Everybody should be able to program—not really in the sense of writing down code, but describing to the computer what they want to automate and how they want to automate it, and the computer will just do it.

Tim Scarfe

A big thing in software is tackling complexity at different scales. It’s certainly what you’ve been doing for your entire career. Do you think we’ll always have this problem, that we’ll always be on the boundary of this incredible complexity?

Francois Chollet

What do you mean by that?

Tim Scarfe

Even if we democratize one or two steps up the hierarchy, wouldn’t we still always just build software which is really complicated?

Francois Chollet

Yeah, quite possibly, but the idea is that we’re going to be able to offload that complexity to an external complexity-processing AI.

Tim Scarfe

So we will transition into a future where we no longer understand the code that’s being run in any way?

Francois Chollet

Absolutely. I think to a large extent, this is already true. If you look at any sizable code base, there is no single software engineer that actually understands it all. We’re always limited due to a fragmented understanding of what we’re doing, which is fine as long as we have a good grasp on the high-level goals and constraints of the system.

Tim Scarfe

So where should the source of agency be there? You’re describing a blind-man-and-the-elephant-type challenge, where loads and loads of developers have their own perspective on a very small part of the system.

Francois Chollet

Sure.

Tim Scarfe

But when we have the AGI version, how could that change?

Francois Chollet

Broadly speaking, I think programming from input-output pairs will be a widespread programming paradigm in the future, and that will be accessible to anyone because you don’t need to write any code. You’re just specifying what you want the program to do, and then the computer programs itself.

If there’s any ambiguity in what you meant—and there will always be ambiguity, especially if the instructions are provided by a non-technical user—you don’t have to worry about it because the computer will ask you to clarify. It’ll tell you, “Okay, so I created basically the most plausible program given what you told me, but there’s some ambiguity here and there. What about this input? Currently, I have this output. Does that look right? Do you want to change it?”

As you change it iteratively, you’re creating this correct program in collaboration with the computer.

Tim Scarfe

So these future systems will have program synthesis as a core component, an explicit component.

Francois Chollet

Yes.

Tim Scarfe

But how will humans interface with it? Are we still going to describe things with natural language, gestures, images, and things like that?

Francois Chollet

It could be natural language. It could also just be drawing interface elements on your screen. You could always try to generate a high-level representation of the program that’s being generated, at a level where it can be visualized and understood by a non-technical user. It could show, for instance, a kind of data-flow graph and ask the user for input about it.

Tim Scarfe

Very cool. One of the characteristics of LLMs at hyperscale is that, in a sense, it’s not that difficult because they just have to— it’s like a CDN. They just copy all the weights and move them all over the place. You’re describing something which is very sophisticated. It might be a little bit akin to a globally distributed database, where the skill programs move around all the different nodes and so on. Is there just a massive new type of architecture we need to build for this?

Francois Chollet

Yeah. I think we’re going to need a completely new type of architecture to implement lifelong distributed learning, where you have many instances of the same AI solving many different problems for different people in parallel and looking for commonalities between the problems and commonalities between the solutions.

Anytime they find sufficient commonalities, they just abstract these commonalities into a new building block, which goes back into the system and makes the system more capable and more intelligent.

Tim Scarfe

I think I’ve got it now. So what you’re building is a globally distributed ARC, on the basis that we find a good solution to ARC.

Francois Chollet

Well, I can’t really tell you exactly what we’re building, but it’s going to be cool.

Tim Scarfe

Yeah, it sounds pretty cool. How do you think that folks like OpenAI are going to start incorporating not only test-time inference, but some of your ideas, realistically, into their system?

Francois Chollet

How might frontier models incorporate program synthesis, for instance? I think something like o1 is already doing precisely that. When you look at what o1 is probably doing, it is writing its own natural-language program describing what it’s supposed to be doing, and it is executing this program itself. The way it’s writing this program is via a very sophisticated search process.

So this is already program synthesis in natural-language space. There are other ways you could leverage program synthesis. You could do program synthesis in latent space, potentially, kind of like what Clement Bonnefil and friends are doing. You could also just be generating actual programs. Why use natural language? Sometimes you might want to use an actual programming language.

I think we are definitely seeing a shift towards leveraging more and more test-time compute, and that is going to accelerate. It’s a fundamental trend.

Tim Scarfe

On the transductive active fine-tuning, though, that’s a little bit more architecturally difficult, isn’t it? Because my model is always being fine-tuned. I can imagine they might build something a bit like Docker, where there’s the base layer, and then there’s my fine-tuning layer and another fine-tuning layer.

Francois Chollet

Sure.

Tim Scarfe

And it’s very fragmented.

Francois Chollet

The difficulty in applying test-time training in actual frontier models is not so much the infrastructure. It’s definitely true that current serving infrastructure is absolutely not set up for per-task fine-tuning, but you could re-engineer it for that.

The main bottleneck is actually the task format. You can only do test-time training if you have pretty clear inputs and targets. You basically need input-output pairs, right? For ARC, obviously, you have that, but for most problems, you don’t.

Tim Scarfe

Very cool. What’s your theory on how o1 works?

Francois Chollet

Well, we can only speculate. I’m not sure how it really works. But what seems to be happening is that it is running a search process in the space of possible chains of thought, trying to evaluate which branches in the tree work better, potentially backtracking and editing if the current branch isn’t working out.

It ends up with this very long and sophisticated, plausibly near-optimal chain of thought, which represents basically a natural-language program describing what the model should be doing. In the process of creating this program, the model is adapting to novelty.

So I think something like o1 is a genuine breakthrough in terms of the generalization power that you can achieve with these systems. We are far beyond the classical deep-learning paradigm.

Tim Scarfe

One school of thought, which I think you agree with, is that there’s some kind of active controller at inference time, so it’s actually doing multiple trajectories in an isolated way and then—

Francois Chollet

Yes. It’s doing search.

Tim Scarfe

Okay. Some people think that it does process supervision and whatnot at training time, but at inference time, it’s all just one forward pass.

Francois Chollet

No. That is certainly not plausible because of the amount of compute that’s being spent at test time. It is very clearly doing search at test time.

Tim Scarfe

Very interesting.

Francois Chollet

I think it is trained at training time to reproduce the best available chain of thought for the current problem, kind of like AlphaZero-style training, basically.

But it’s also doing search at test time in chain-of-thought space. This is kind of obvious. The telling sign is just the compute it’s expending—the amount of tokens and the latency.

Tim Scarfe

Are there any other telltale signs that this kind of thing is happening? For example, it might have explored a particular area, and then after the consolidation, that is now gone. So when you talk to the model, it’s almost like it’s forgotten part of its thinking.

Francois Chollet

Yeah. Honestly, this is a little bit too specific. I don’t have any insider information about what o1 is doing, so I can only speculate.

Tim Scarfe

Okay. So people like Noam Brown are really bullish on this new scaling law for test time, and certainly I love o1 Pro. I think it’s really, really good. It’s qualitatively a big improvement. What do you think there?

Francois Chollet

Sure. So the test-time scaling law is basically this observation that if you expend more compute, if you search further, you see a corresponding improvement in accuracy. That relationship is logarithmic, by the way, right? So accuracy improves logarithmically with compute. While this is not really new, anytime you do test-time search, you will see this relationship.

If you’re doing brute-force program search, for instance, you will find that your ability to solve a problem improves logarithmically with the amount of compute. If you have more compute, you can just search further into the space of possible programs, and logarithmically you find more solutions. So anytime you do any kind of test-time search, you will see this relationship.

Tim Scarfe

What is your current go-to model, and what do you use it for?

Francois Chollet

For the most part, I’m using Gemini Advanced, and I’ve actually just started using the new Gemini Flash, the latest one.

Tim Scarfe

Me too.

Francois Chollet

I’m paying for Gemini Advanced. I’m also using Claude 3.5 Sonnet. I think it’s very good for programming. So these are the two I’m using.

Tim Scarfe

What’s your programming workflow with LLMs?

Francois Chollet

I don’t use LLMs all that much when I’m programming. But typically, if I’m currently facing a problem that I feel might be a good fit for LLMs, I will just open my browser and prompt the LLM. I’ll ask it for a function that does X, Y, Z. It usually doesn’t work on the first try, but after a little bit of debugging and nudging, I think it’s a big time saver.

Tim Scarfe

What kind of failure modes do you see when you’re programming?

Francois Chollet

With LLMs, you mean? Well, the failure modes are different based on the model that you’re using, right? I think in general, Claude 3.5 Sonnet is the best one.

Tim Scarfe

Yeah.

Francois Chollet

Sometimes you might have code that’s there for absolutely no reason, like variables that are not used or assumptions that are being made by the code that are not verified by the data that comes in. So it’s pretty clear that the code is generated in terms of statistical likelihood. There’s no effort to actually make it self-consistent, make it correct, try to execute it beforehand, and so on.

I think there’s actually a lot of room for improvement there. You could imagine LLM-based software developer assistants in the future that actually do all these things as you prompt them—that actually write you the code, but then try to debug it themselves before actually showing it to you.

Tim Scarfe

What’s your opinion on LLM agent systems, which are all the rage at the moment?

Francois Chollet

Right. Agents have been all the rage for quite a while now. People started talking about agents being the future almost 2 years ago—like a year and a half ago. So far, agents have not really taken off.

The fundamental problem here is that LLMs are not quite reliable. If you look at one forward pass of an LLM, you can think of the LLM as a guessing machine, right? The guesses it makes are much better than random, obviously. They’re very useful guesses. They’re directionally accurate, but they have some probability of being wrong.

When you look at an agentic workflow, you are chaining many of these guesses. The likelihood that you will end up not where you would like to be gets dramatically higher as you chain more guesses like this. So this is the big bottleneck. Agents are just not reliable. They just don’t have a sufficient level of autonomy.

People say that with better models this will get fixed. I think it’s an empirical question. I’m waiting to see when agentic workflows actually start working. I don’t think we’re there today.

Tim Scarfe

I’ve softened my position a tiny bit on this. I agree that, because of the ambiguity problem, they are misdirected, and when you chain this, they’re very misdirected. But there is something to be said for just having more computation at hand.

I interviewed the people who did The AI Scientist paper, and certainly if you take Claude 3.5 Sonnet and say, “Generate me an entire paper,” it will be banality beyond belief. It’ll just be—

Francois Chollet

Sure.

Tim Scarfe

…a sketch. What they did was decompose it into lots of agent workers that, using the Google Maps analogy, just kind of zoom in and zoom in and zoom in many times over. It produced dramatically better results.

Francois Chollet

Yeah. This makes sense. I think this basically tracks the idea we were talking about earlier of System 2 being something like iterated System 1 with strong guardrails. The guardrails are very important.

In this case, the superstructure is provided by the human programmer. The human programmer is breaking down the problem into the right subproblems and orchestrating the whole thing in the right way. Then each subproblem can actually be solved by guessing and producing a good enough guess.

Tim Scarfe

Amazing. When’s ARC-AGI-2 coming out?

Francois Chollet

Early next year, probably. We are currently finalizing human testing. As I mentioned, every puzzle is going to be solved by a bunch of humans, so we know it’s solvable, and we have some data to be able to tell how difficult it is for the average human.

The goal is going to be to have 3 sets that are difficulty-calibrated. So if you get a score on the public eval, and you’re not overfit to that dataset, you can be very confident that you’re going to get a very similar kind of score on the other 2 sets.

Tim Scarfe

When you tested with humans, you wrote about this in The Measure of Intelligence: one school of thought in intelligence is that there’s this g factor, and another school of thought is that it’s very specialized. Did your experiments reveal that a group of humans generally performed quite well across all of the tasks, or did you see huge specializations?

Francois Chollet

No, it’s absolutely the case that there are people who are just more intelligent, and they are just better at solving hard tasks. You do see that, yeah, in the human testing data.

Tim Scarfe

What about on the long tail? Do you see specialization in the types of tasks, or is it fairly flat?

Francois Chollet

Yeah, I think it’s pretty flat. Either you’re good at it or not.

Tim Scarfe

Interesting. Francois Chollet, it’s been an honor to have you on the show. Thank you so much.

Francois Chollet

Thanks so much for having me. It’s been great.

Tim Scarfe

Amazing.

Francois Chollet - ARC reflections - NeurIPS 2024 | BidClub