Assoc. prof. of CS at University of Maryland. Researcher in #PhysicalAI, #TrustworthyML, #EthicalAI, AI #Alignment, #AI for ALL.

College Park, MD
Joined September 2010
Precompute and reuse. I keep coming back to this idea, and there’s a 4 a.m. slide-making story behind it. Back at ICLR 2023 in Kigali, Rwanda, a student of mine was helping organize the Reincarnating Reinforcement Learning workshop. A speaker couldn’t make it, and they asked whether I could give a talk. I said yes of course, it was my student’s workshop! So I found myself making slides at 4 a.m. in my hotel room for the talk the next day. 😂 My talk was “Adaptable Reinforcement Learning in an Ever-Changing World: Reuse to Learn and Adapt Efficiently.” I also joined the panel, “Challenges & Open Problems in Reusing Prior Computation.” It was absolutely a great workshop. What stayed with me was a simple question: why keep starting over when we’ve already spent so much compute learning something useful? Today, that sounds almost too obvious. Isn’t that a big part of what foundation models are about? And really, RL post-training follows the same logic: start with a pretrained model, reuse what it has learned, and build on it with RL. But back then, training a specialist RL agent from scratch for each task was still very common. That workshop helped me put words to something that has become a recurring theme in our research. Once you take reuse seriously, the interesting question becomes: what should we learn ahead of time, and what should we leave for adaptation when the actual task arrives? You can see that question across our work, just to name a few: • SMART: pretrain control representations that transfer across tasks. • DynaFLIP: learn dynamics-aware perception that different robot policies can build on. • μ₀: learn a world model from video and reuse it across robot embodiments. • FlowBank: precompute useful agentic workflows, then choose one for each query. And now, Meta²: precompute and reuse knowledge about how to improve. An agent’s harness includes the prompts, tools, memory, hooks etc around the model. Often, you only discover what needs changing once the agent is already working. A missing tool. An instruction that keeps being forgotten. A check that needs to happen repeatedly. We want the agent to adapt as those needs appear. But reasoning about every possible change from scratch is expensive, and making changes doesn’t automatically mean making progress. So we borrow a core idea from meta-learning: learn how to adapt. Offline, Meta² learns a textual Meta-Skill that guides an evolver on when and how to change the harness, including when to leave it alone. We learn this guidance by comparing runs with no evolution, runs with the current evolver, and training runs where the evolver gets privileged verifier feedback. During a new run, that learned guidance stays fixed. At checkpoints, the evolver combines it with evidence from the current run to decide whether to keep or change the harness. The underlying model stays frozen. The guidance gets reused. The actual edits depend on what happens. One result I especially like: carrying one task’s harness edits into future tasks actually hurt performance in our experiments. Knowing how to adapt transferred better than keeping the adaptations themselves. That distinction matters for RSI. A system that keeps improving needs to figure out what to preserve from experience, what to revise, and what was only useful in one particular situation. Meta² gives us one concrete piece of that: reusable guidance for improvement, paired with adaptation while the agent is still working. Longer term, I see RSI as potentially the co-evolution of models, harnesses, and the environments they learn in. Progress in each could help the others improve. For now, we’re nailing down the harness part! I’m really proud of my students and collaborators for finding an efficient and effective way to make this work. That 4 a.m. slide-making session stayed with me longer than I expected. 🧬
Is your agent's harness frozen before the run even starts? In the push toward recursive self-improvement (RSI), a system that can't adjust to new evidence mid-run isn't truly adaptive. To keep evolving online, it needs guidance on how and when to evolve. Introducing Meta²: It learns this evolution guidance offline and applies it dynamically within every single run. 🧬👇 alphaxiv.org/abs/2610.meta2-… meta-square.github.io/paper.…
1
3
1
25
1,407
check out this intuitive video on why interpretable directions in llms look non-gaussian, how ica finds them in minutes per layer, and the evaluation bug that made ica look weak for 3 years
1
13
1,286
Furong Huang retweeted
check out this intuitive video on why interpretable directions in llms look non-gaussian, how ica finds them in minutes per layer, and the evaluation bug that made ica look weak for 3 years
We revisited Independent Component Analysis (ICA), a decades-old statistical method, and found that it works far better for interpreting LLM activations than we expected! This old baseline deserves a second look. Across GPT-2 Small, Gemma 2 2B, and Qwen 3.5 9B Base, we find ICA is actually competitive with the public SAEs across interpretability, sparse reconstruction, concept prediction, and targeted probe perturbation, while fitting in minutes per layer and using 7–43× less parameter memory. We're releasing ICA Lens, which lets you quickly discover, annotate, and evaluate interpretable directions in LLM residual-stream activations. No need to train another dictionary! More broadly, our results suggest that non-Gaussianity is a useful inductive bias for efficiently finding interpretable directions. Try it: pip install icalens pypi.org/project/icalens/ Paper: arxiv.org/abs/2606.11722v2 1/8
4
8
3
87
7,251
Furong Huang retweeted
Here’s a concrete example of why I like combining ICA Lens with Logit/J/R Lens. (by @liusida2007) Take “The capital of France is” in Qwen3.5-2B. At the final token, directly decoding the layer-17 post-block residual with Logit Lens, J-Lens, or R-Lens gives mostly underscore tokens. Decompose that same activation with ICA Lens, then inspect the components with those lenses. The top two components have clear city-related and France-related readouts, as shown below. Directly decoding the full residual gives a readout of the combined vector. ICA separates it into components we can inspect individually. That’s the value of combining these tools: structure that’s hard to see in the full activation can become much clearer after decomposition.
SAEs have become the dominant approach in mechanistic interpretability. But what if a good old statistical method from decades ago could do just as well, at a fraction of the cost? In our latest work, we revisited Independent Component Analysis (ICA) and discovered something surprising: a bug in the evaluation code of an influential early SAE paper had significantly underestimated ICA's interpretability! After correcting it, we found ICA to be remarkably competitive with SAEs. Many of my academic friends from the good old days probably remember me as the tensor decomposition and spectral methods person. So this feels a little like going back to my roots. :) Sometimes, old mathematical tools still have surprises in store! But there's another motivation behind this work that I care about even more. I've always wished mechanistic interpretability could be more actionable. Understanding what happens inside a neural network is fascinating, but what comes next? Can we use that understanding to actually intervene, steer behavior, and improve the model? With ICA Lens, we take steps in that direction, from discovering and annotating interpretable features to using them to understand new hidden states and steer model behavior. Interpretability shouldn't end with understanding. It should empower us to act. And we'd love for the community to try it! ICA Lens is open-source, lightweight, and requires no training of another sparse dictionary. 🌹 Try it yourself: pip install icalens pypi.org/project/icalens/ Curious to hear what the mechanistic interpretability community thinks!
2
3
24
1,392
ICA Lens is open-source, lightweight, and requires no training of another sparse dictionary. 🌹 Try it yourself: pip install icalens pypi.org/project/icalens/
SAEs have become the dominant approach in mechanistic interpretability. But what if a good old statistical method from decades ago could do just as well, at a fraction of the cost? In our latest work, we revisited Independent Component Analysis (ICA) and discovered something surprising: a bug in the evaluation code of an influential early SAE paper had significantly underestimated ICA's interpretability! After correcting it, we found ICA to be remarkably competitive with SAEs. Many of my academic friends from the good old days probably remember me as the tensor decomposition and spectral methods person. So this feels a little like going back to my roots. :) Sometimes, old mathematical tools still have surprises in store! But there's another motivation behind this work that I care about even more. I've always wished mechanistic interpretability could be more actionable. Understanding what happens inside a neural network is fascinating, but what comes next? Can we use that understanding to actually intervene, steer behavior, and improve the model? With ICA Lens, we take steps in that direction, from discovering and annotating interpretable features to using them to understand new hidden states and steer model behavior. Interpretability shouldn't end with understanding. It should empower us to act. And we'd love for the community to try it! ICA Lens is open-source, lightweight, and requires no training of another sparse dictionary. 🌹 Try it yourself: pip install icalens pypi.org/project/icalens/ Curious to hear what the mechanistic interpretability community thinks!
1
24
1,839
Furong Huang retweeted
Thanks so much Furong! Great point! So I would say its more the former. We dont do any “bespoke” modifications or any forcing. We put the model in a collaborative task/environment and scale rl and the rollouts and the optimization pressure takes care of the rest!
1
5
927
SAEs have become the dominant approach in mechanistic interpretability. But what if a good old statistical method from decades ago could do just as well, at a fraction of the cost? In our latest work, we revisited Independent Component Analysis (ICA) and discovered something surprising: a bug in the evaluation code of an influential early SAE paper had significantly underestimated ICA's interpretability! After correcting it, we found ICA to be remarkably competitive with SAEs. Many of my academic friends from the good old days probably remember me as the tensor decomposition and spectral methods person. So this feels a little like going back to my roots. :) Sometimes, old mathematical tools still have surprises in store! But there's another motivation behind this work that I care about even more. I've always wished mechanistic interpretability could be more actionable. Understanding what happens inside a neural network is fascinating, but what comes next? Can we use that understanding to actually intervene, steer behavior, and improve the model? With ICA Lens, we take steps in that direction, from discovering and annotating interpretable features to using them to understand new hidden states and steer model behavior. Interpretability shouldn't end with understanding. It should empower us to act. And we'd love for the community to try it! ICA Lens is open-source, lightweight, and requires no training of another sparse dictionary. 🌹 Try it yourself: pip install icalens pypi.org/project/icalens/ Curious to hear what the mechanistic interpretability community thinks!
We revisited Independent Component Analysis (ICA), a decades-old statistical method, and found that it works far better for interpreting LLM activations than we expected! This old baseline deserves a second look. Across GPT-2 Small, Gemma 2 2B, and Qwen 3.5 9B Base, we find ICA is actually competitive with the public SAEs across interpretability, sparse reconstruction, concept prediction, and targeted probe perturbation, while fitting in minutes per layer and using 7–43× less parameter memory. We're releasing ICA Lens, which lets you quickly discover, annotate, and evaluate interpretable directions in LLM residual-stream activations. No need to train another dictionary! More broadly, our results suggest that non-Gaussianity is a useful inductive bias for efficiently finding interpretable directions. Try it: pip install icalens pypi.org/project/icalens/ Paper: arxiv.org/abs/2606.11722v2 1/8
9
18
6
186
10,710
This is timely! Building the data engine for robotics is crucial to combat the “small data” problem in physical intelligence.
We built a robotics data engine with Astra-level performance at 125x lower cost. And we are open-sourcing the weights today! Introducing Flora, a suite of open models to parse the physical world and turn raw footage into rich training signals. Flora already powers our in-house data engine, labeling 200K hours of videos a day on 500 GPUs. We created it to scale the frontier for robot learning. Now you own the weights too. Flora gives you: - High-quality, timestamped captions to curate and filter human egocentric and robot data; - Dense progress rewards for quality control and RL post-training; - Rubrics scoring for real-world benchmarking Try it today, links in thread:
1
20
2,659
Cool work!
Research index (e.g. Google Scholar) is one of the largest collaborative systems where millions of human users build on each other's work across centuries. How about we build something similar for async LLM agents? We give agents a minimal hypertextual system. They asynchronously search for and read related work, cite the work that they find useful, and publish (mini-)papers. Each search returns only the top k papers, ranked by relevance and a PageRank-like citation weight, which bounds the read cost of each agent to O(k), independent of agent count. We show that performance effectively scales as we keep adding agents, and the system is robust to absence/failures of individual agents.
1
30
3,882
Congratulations @canondetortugas!
A super exciting announcement: In January 2027, I'll be joining @UCBerkeley as an assistant professor in EECS and Statistics. I'll be recruiting PhD students and postdocs this cycle, starting Fall 2027. If you're interested the science of RL and deep learning, please apply.
12
2,430
Coding agents write code for robot arms. We gave them a flying one 🚁 Can they handle manipulation tasks on a coaxial quad-tiltrotor (8 rotors, 4 tilting arms) with an arm and gripper? Meet Fly-by-Code: built in simulation, the code runs on the real drone 🧵
4
15
5
75
7,052
Furong Huang retweeted
Continuing on my saga of going thru privacy and safety policies and design of personal assistants (i did instinct in a previous post) I was listening to this and going thru Meta’s design for Muse (tho having been @AIatMeta recently i had some idea), and I would say overall they have taken good measures and set good practice. However “even more encrypted” is really not a privacy/security goal or standard lol
What’s the actual vision for Muse? Full HUGE* Conversation with @alexandr_wang out now
10
1
68
6,226
Can a robot hand learn a task from ONE human video, and still do it when the objects are somewhere else? Meet Dex-One2Many 🖐️ Trained only in simulation from one video, it runs on a real robot hand, even from setups the video never showed 🧵
5
18
3
74
8,258
Real2Sim2Real, finally done right with “neuro-symbolic representations” and a new technique we call “controlled diversification”! Introducing Dex-One2Many: from one human video in one setting to a robot that handles many configurations beyond the demonstration—different object positions, goal poses, and grasps. How did we achieve such remarkable generalization? The key is controlled diversification—generating diverse training experiences in simulation while preserving the underlying task constraints. The symbolic structure specifies what must hold at each stage; the neural policy discovers how to achieve it. Procedurally: (1) **Extract the task structure**. A vision-language model converts the demonstration into a sequence of scene graphs that capture the task’s relational structure: which object the hand should hold, what a tool should contact, and where an object needs to end up. These relationships preserve the task while leaving room for different configurations and motions. (2) **Diversify under constraints**. We use these scene graphs to generate diverse, physically valid training states across different object positions and grasps, while preserving the task-defining relationships. The graphs also provide dense rewards that guide RL at each stage. (3) **Learn through reinforcement learning**. We train the policy in these diversified simulation environments. Rather than imitating the demonstrated trajectory, the robot discovers different ways to accomplish the same task. This is how one demonstration becomes a starting point for learning many ways to accomplish the same task. Across five manipulation and tool-use tasks, the learned policies transfer zero-shot to a real dexterous hand, achieving 75% mean success on configurations not shown in the demonstration, compared with just 4% for the next-best baseline—with no real-world fine-tuning. A wonderful collaboration with @jusukle, @JayLEE_0301, @jbhuang0604, and the entire team! Project: dex-one2many.github.io/ Paper: arxiv.org/abs/2610.12470 #Robotics #NeuroSymbolicAI #ReinforcementLearning #DexterousManipulation
1
18
115
6,522
Real2Sim2Real, finally done right with neuro-symbolic representations! Introducing Dex-One2Many: from one human video in one setting to a robot that generalizes to configurations beyond the demonstration—different object positions, goal poses, and grasps. The key to the remarkable generalization is the abstraction. Dex-One2Many extracts the task’s relational structure into “scene graphs”, then uses them to generate diverse training states and rewards for RL in simulation. The graphs specify what must hold at each stage (constraints, our inductive bias); RL discovers how to achieve it across different configurations. One demonstration opens up many ways to accomplish the same task—and the learned policy transfers zero-shot to a real dexterous hand. Project: dex-one2many.github.io⁠
Can a robot hand learn a task from ONE human video, and still do it when the objects are somewhere else? Meet Dex-One2Many 🖐️ Trained only in simulation from one video, it runs on a real robot hand, even from setups the video never showed 🧵
2
47
4,098
Furong Huang retweeted
OpenAI reported ~10,000 agents working on Navier–Stokes. That raises a question for teams of any size: how should agents work together, and which ways of working are worth reusing? Our insight: a workflow that loses on average can solve what the winner misses. FlowBank learns which workflows to keep and when to use each. Accepted at #NeurIPS2026 #AgenticAI A 🧵
3
20
2
85
7,336
Furong Huang retweeted
FlowBank precomputes a diverse workflow portfolio and picks the right one per query, giving query-level adaptivity at task-level cost
OpenAI reported ~10,000 agents working on Navier–Stokes. That raises a question for teams of any size: how should agents work together, and which ways of working are worth reusing? Our insight: a workflow that loses on average can solve what the winner misses. FlowBank learns which workflows to keep and when to use each. Accepted at #NeurIPS2026 #AgenticAI A 🧵
1
5
606
Furong Huang retweeted
🤖 Frontier models like GPT 6 Astra are getting surprisingly good at controlling robots. The results are exciting, but deploying frontier models on robots comes with substantial inference cost and latency. Can we distill these capabilities into compact models that run locally? We open-source 🥑Guava — a framework for distilling frontier models into compact robot agents, using purely simulation interaction data, no real-world data required! With only ~2K simulation trajectories, we finetuned Qwen3.5 into Guava-4B, with: 🤖 90.0% real-world success vs. 93.3% for GPT-5.4 ⚡ 7.1× lower model-call latency with local inference 🌎 Sim-to-real transfer without real-world fine-tuning 🧠 Generalization to unseen tasks and object configurations 🔄 Closed-loop recovery from execution failures Paper + code + project page: guava-harness.github.io/ 🎥 See Guava in action below. Joint efforts from @haowenssr, @xiruili7_li, @ShaoxiongYao, Peng Shi, @zhoutianyi, @jbhuang0604 , @furongh and @maojiayuan.
13
21
7
223
28,702
Furong Huang retweeted
Super simple way to use open models in Claude Code, CODEX and other harnesses! Very useful!
Announcing Together Link! Run frontier open models in your favorite coding harness. Track your spending and let our Auto router pick the model for you: low-cost models for quick fixes, more capable models for harder tasks.
1
8
53
7,318