#从 Fast Weights 到 MAML 与 RL²:把“解任务”改写成“学会快速产生解”
一句话核心结论:这些工作的共同变化不是“换了一个更强模型”,而是把学习目标从“为一个固定任务找到一组好参数”改成了“通过跨任务外层训练,塑造一个能在新任务上用少量数据快速产生解的内层学习过程”。
如果用一句更人话的话说:
- 普通训练像是在训练一个“会做这张试卷”的学生;
- meta-learning / learning to learn 想训练的是一个“见到新试卷后,知道该怎么快速复习、试错、总结规律”的学生;
- fast weights、learned optimizer、MAML、RL² 的区别在于:这个“快速复习/试错/总结”的过程,到底被放在快速变化的权重、一个学出来的优化器、一次或几次梯度更新,还是RNN 的隐藏状态和交互轨迹里。
这条线对今天的 LLM Agent / 长轨迹 RL 很重要,因为 Agent 面临的也不是一个固定题目,而是不断变化的任务、工具、网页、代码库和用户意图。关键问题不是“能不能把一个任务做对”,而是:外层训练能否塑造一种内层适应机制,让模型在新环境里少量交互后形成任务状态、策略和可迁移经验。
#0. 先建立共同语言:外层训练、内层更新、任务分布
这几个词很容易被说得很玄。先用最简单的方式定义。
传统 supervised learning / RL 通常是:
给定一个任务 T
收集数据 D
训练参数 θ
得到一个在 T 上表现好的模型 f_θ
meta-learning 关心的是:
有一堆任务 T_1, T_2, ..., T_n
每个任务只给一点点新数据 D_new
希望模型看到 D_new 后,很快变成适合当前任务的解
所以训练目标变成:
外层训练:在很多任务上,学习一个“如何快速适应”的机制
内层更新:在一个新任务内部,用少量样本/交互,把当前模型变成当前任务的解
一个抽象公式可以写成:
外层目标:min_φ E_{T ~ p(T)} [ Loss_T( Adapt_φ(D_train^T) 在 D_test^T 上的表现 ) ]
这里最重要的是 Adapt_φ。不同工作对它的实现不同:
| 路线 | 内层适应发生在哪里 | 外层到底学什么 |
|---|---|---|
| Fast Weights | 快速变化的临时权重 | 慢权重如何生成/更新快权重 |
| Learning to Learn / learned optimizer | 优化器的更新规则 | 一个能读梯度并输出参数更新的 optimizer |
| MAML | 标准梯度下降后的参数位置 | 一个“很容易被少量梯度改好”的初始化 θ |
| RL² / deep meta-RL | RNN 隐状态与 episode 轨迹 | 一个通过交互实现 RL 算法的 recurrent policy |
这就是用户提到那句话的核心:外层训练不只找一个固定任务的解,而是找一个能用少量新数据产生解的内层更新过程。
#1. 为什么这个转向重要:从“知识迁移”到“学习算法迁移”
很多机器学习方法都可以迁移知识。比如 ImageNet 预训练模型可以迁移到下游分类任务,LLM 预训练后可以 instruction tuning。但是 meta-learning 更进一步:它不只想迁移表征或参数,而是想迁移一种学习方式。
#1.1 普通迁移学习:我已经学过很多图像,所以新图像任务更容易
普通 transfer learning 更像:
旧任务训练得到一个好表征
新任务在这个表征上微调
它当然有用,但它通常没有显式优化“微调几步之后一定好”。预训练模型可能刚好容易 fine-tune,也可能需要很多数据、很多超参调试。
#1.2 Meta-learning:我训练时就假设未来要快速适应新任务
meta-learning 的训练过程会模拟测试时情景:
训练时:给模型一个小 support set,让它适应,再在 query set 上评估
测试时:也给模型一个小 support set,看它能不能适应新任务
所以它不是事后希望模型能迁移,而是在训练目标中直接写入:你必须在少量数据后变好。
#1.3 对 LLM Agent 的对应关系
对 LLM Agent 来说,一个“任务”可能是:
- 一个新的代码库;
- 一个新的网页环境;
- 一个新用户的偏好;
- 一个新工具 API;
- 一个长程目标下不断变化的子任务结构。
如果每次都靠外层参数更新,代价太高;如果只靠 prompt,又可能不稳定、不可持续。meta-learning 这条线提供的思想是:训练一个能把少量上下文/交互转换成有效内部状态或快速参数变化的系统。
#2. Fast Weights:在慢权重之外,给模型一块“会快速写入的临时记忆”
#2.1 它想解决什么旧问题?
传统神经网络里通常只有两类变量:
- 神经活动 / hidden state:变化很快,但容量有限;
- 普通权重 / slow weights:容量大,但训练很慢,一般通过梯度下降在很多样本上更新。
问题是:现实学习有很多中间时间尺度。比如你刚刚在一段文本里看到一个名字,几秒后要用到;你不需要永久记住它,但 hidden state 又可能装不下那么多细节。
于是 fast weights 的直觉是:
能不能有一类变量,变化速度介于 hidden state 和 slow weights 之间?它不像普通参数那样长期训练,但也不只是一个向量 hidden state,而是一块可以临时写入关联记忆的权重矩阵。
#2.2 早期 fast weights:慢网络学会给快网络写程序
Schmidhuber 在 1990s 的 Fast Weight Programmers 里提出一种很关键的想法:
慢权重:通过长期训练学到“如何产生快权重更新”
快权重:在当前序列/当前任务中快速变化,承担临时记忆或临时程序的角色
说人话:慢网络像一个“程序员”,它不直接记住每个临时事实,而是学会在需要时往另一块快权重里写入当前任务需要的东西。快权重像一张临时草稿纸,随当前输入迅速改变。
Schmidhuber 后来把这条线和 Transformer / linear attention 联系起来:早期 fast weight programmer 可以通过外积形式写入 key-value 式关联记忆。是否把它称为“第一个 Transformer”在学术叙事上有争议,但从机制上看,fast weights 确实抓住了一个后来很重要的结构:根据当前输入动态生成一块临时可检索的记忆。
#2.3 Ba et al. 2016:Using Fast Weights to Attend to the Recent Past
Ba、Hinton、Mnih、Leibo、Ionescu 的论文《Using Fast Weights to Attend to the Recent Past》给出了一个更现代深度学习语境下的 fast weights 版本。论文的核心说法是:神经网络不应该只有“活动”和“慢权重”两种变量;快权重可以存储 recent past,并以一种更神经合理的方式实现对过去的 attention。
它的机制可以粗略理解为:
每个时间步产生 hidden vector h_t
用 h_t h_t^T 这样的外积,写入一个快速变化的矩阵 A_t
之后模型可以用当前 hidden state 去查询 A_t,从而取回最近历史中的相关模式
这和 attention 的关系很直观:attention 是把过去 token 的表示保留下来,当前 token 去查;fast weights 是把过去活动写进一块临时权重矩阵,当前状态再用这块矩阵读回相关信息。
#2.4 它推动了什么下一阶段?
fast weights 的关键贡献不是某个 benchmark,而是提出了一个结构性问题:
学习系统内部是否应该存在多个时间尺度的可塑性?外层慢学习是否可以训练内层快学习的规则?
这就自然通向 meta-learning:外层不只是学一个固定函数,而是学“如何在当前任务中更新某些内部变量”。
但 fast weights 也留下了问题:
- 快权重更新规则怎么设计?
- 它到底是在做记忆、注意力,还是任务适应?
- 如果希望它产生真正的学习算法,而不只是存储 recent past,该怎么训练?
这就进入 learned optimizer / Learning to Learn。
#3. Learning to Learn:不再手写优化器,而是把优化器本身学出来
#3.1 旧问题:模型特征能学,为什么优化算法还要人手写?
深度学习最成功的地方之一,是从手工特征转向 learned representation。可是优化算法很长时间仍然主要由人设计:SGD、Momentum、RMSProp、Adam 等。
Andrychowicz et al. 2016 的《Learning to learn by gradient descent by gradient descent》问了一个很自然的问题:
既然特征可以学,优化器能不能也学?
它的核心思想是把优化过程看成序列决策:
优化器在第 t 步看到当前梯度 ∇f(θ_t)
输出一个参数更新 Δθ_t
得到 θ_{t+1} = θ_t + Δθ_t
多步之后看最终 loss 好不好
#3.2 方法:用 LSTM 实现一个 learned optimizer
这篇论文用 LSTM 作为优化器。它接收梯度等信息,输出每个参数的更新。外层训练优化 LSTM 的参数,使得这个 optimizer 在一类训练任务上能更快降低目标函数。
抽象为:
手写 optimizer: θ_{t+1} = θ_t - α ∇f(θ_t)
学出来的 optimizer: θ_{t+1} = θ_t + g_φ(∇f(θ_t), state_t)
这里 g_φ 就是外层训练出来的更新规则。
#3.3 它到底“learn to learn”在哪里?
它不是学某一个任务的解 θ*,而是学一个能在很多类似任务上产生解的更新过程。
这点非常关键:
- 固定任务训练:参数本身是最终答案;
- learned optimizer:参数
φ编码的是“怎么更新别人的参数”。
所以这是一种更显式的 meta-learning:外层学优化器,内层用优化器在新任务上优化模型。
#3.4 新问题:泛化、稳定性和分布外任务
learned optimizer 很有野心,但也暴露出几个难题:
- 优化器会不会只在训练过的任务分布上有效? 如果外层训练只见过某类 loss landscape,它可能学到的是投机性更新规则。
- 长时间 unroll 的信用分配很难。 优化器好不好要看很多步之后的 loss,训练本身很容易不稳定。
- 和手写优化器相比,可靠性和可解释性不足。 Adam 虽然不是最优,但很稳;learned optimizer 一旦出分布,可能行为奇怪。
因此,后来的 MAML 走了一条更保守但很强的路:不学整个 optimizer,而是保留梯度下降,只学习一个特别适合少量梯度更新的初始化。
#4. MAML:不学更新规则,而是学一个“一推就到好解附近”的初始化
#4.1 旧问题:学 optimizer 太自由,能不能用标准梯度下降做内层?
MAML,全名 Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks,来自 Finn、Abbeel、Levine 2017。
它的出发点非常漂亮:
如果我们相信新任务上的内层学习可以用普通梯度下降完成,那么外层要学的不是一个复杂优化器,而是一个初始化点 θ,使得从 θ 出发,只需要一两步梯度就能到达当前任务的好解。
这就是 MAML 的“model-agnostic”:只要模型能用梯度下降训练,MAML 就可以套上去。分类、回归、强化学习都能用。
#4.2 方法:训练一个容易 fine-tune 的参数位置
对每个任务 T_i,MAML 做两层优化:
内层:θ_i' = θ - α ∇_θ L_train^T_i(θ)
外层:让 θ_i' 在 L_test^T_i 上表现好
所以外层优化的是:
min_θ Σ_i L_test^T_i( θ - α ∇_θ L_train^T_i(θ) )
这句话很值得慢慢读:MAML 不是让 θ 本身在所有任务上都好,而是让 θ 经过少量任务数据更新之后好。
#4.3 人话类比:不是站在所有山谷的最低点,而是站在一个适合快速下山的山脊上
每个任务都有自己的 loss landscape。普通 multi-task training 想找一个在平均任务上还不错的点。MAML 想找的是一个特殊位置:从这里往任何一个具体任务的方向走一两步,都能迅速到该任务的低 loss 区。
所以 MAML 的初始化不是“万能答案”,而是“可塑性很高的起点”。
#4.4 MAML 的贡献和限制
MAML 的贡献:
- 把 meta-learning 写成了清晰的 bilevel optimization;
- 不需要设计任务特定结构;
- 让 few-shot classification、few-shot regression、RL adaptation 可以放在同一个框架里理解;
- 强调“参数初始化本身可以被训练成适合快速学习”。
限制也很明显:
- 二阶梯度代价高。 外层要穿过内层梯度更新反传,计算和内存都贵。
- 内层更新形式受限。 它默认少量 gradient step 是合适的适应机制。
- 任务分布依赖强。 如果测试任务和训练任务差很多,快速适应未必成立。
- 对长轨迹 RL / Agent 不够自然。 Agent 的适应不一定表现为几步参数梯度更新,更可能是通过上下文、记忆、工具反馈、环境交互形成隐状态。
这就引到 RL²:把内层 RL 算法放到 RNN 的 dynamics 里。
#5. RL² 与 Deep Meta-RL:用慢 RL 训练一个会快速 RL 的循环策略
#5.1 旧问题:RL 本身太慢,能不能学一个快 RL 算法?
深度 RL 的经典痛点是 sample inefficiency。一个 Atari 或机器人任务可能需要大量 episode。人类和动物却能通过很少几次试错适应新环境。
RL²(Duan et al. 2016)和 DeepMind 的《Learning to reinforcement learn》(Wang et al. 2016)都抓住了同一个思想:
与其手写一个快速 RL 算法,不如训练一个 recurrent policy,让它在隐藏状态里实现一个针对任务分布优化过的 RL 算法。
#5.2 RL² 的方法:RNN 的权重是慢学到的算法,隐藏状态是快适应的状态
RL² 的 recurrent policy 输入通常包括:
observation o_t
previous action a_{t-1}
previous reward r_{t-1}
done flag d_{t-1}
它的 hidden state 在同一个 MDP 的多个 episode 中不重置,因此可以积累当前任务的信息。
训练时,外层用普通 RL 算法慢慢更新 RNN 权重;测试时,权重固定,RNN 靠隐藏状态在新 MDP 中快速适应。
可以写成:
外层慢学习:更新 RNN 参数 φ,使其在任务分布上总回报高
内层快学习:在新任务中,RNN hidden state h_t 根据交互轨迹变化
所以 RL² 这个名字很形象:
slow RL learns a fast RL algorithm
#5.3 DeepMind 的 Learning to reinforcement learn:学出来的 RL 过程可以不同于训练算法
Wang et al. 的《Learning to reinforcement learn》强调了一个更有意思的点:训练系统用的是一种 RL 算法,但 RNN dynamics 内部涌现出来的“第二个 RL 过程”可以和外层训练算法完全不同。它可以学到适合当前任务分布的探索策略、价值更新方式、任务推断方式。
说人话:外层 RL 像是在训练一个“会做实验的人”。训练完成后,这个人进入新实验室,不会更新大脑权重,但会通过记忆、观察和试错快速改变行为。
#5.4 RL² 暴露的新问题:黑箱适应与可扩展性
RL² 很优雅,但问题也很明显:
- 内层算法是黑箱。 RNN hidden state 到底学到了什么 RL 算法,很难解释。
- 长 horizon 训练困难。 外层 RL 要对整段交互表现负责,信用分配很难。
- 任务分布泛化有限。 学出来的快速 RL 可能只适合训练任务族。
- hidden state 容量和稳定性问题。 复杂任务需要长期记忆、结构化信念和可组合技能,单个 RNN 状态很难承载。
这些问题和今天 LLM Agent 的问题非常像:长轨迹、稀疏反馈、隐藏任务状态、探索策略、上下文记忆、跨任务泛化。
#6. 四条路线放在一起看:它们到底共同改变了什么?
现在可以回到最初那句话:
fast weights、Learning to Learn、MAML 和 RL² 的共同变化是,外层训练不只找一个固定任务的解,而是找一个能用少量新数据产生解的内层更新过程。
这句话可以拆成三层。
#6.1 第一层:训练对象从“解”变成“产生解的机制”
传统训练:
训练完以后,θ 就是答案
meta-learning:
训练完以后,θ 或 φ 不是某个任务的答案
它编码的是:遇到新任务时该如何从少量数据中产生答案
#6.2 第二层:内层更新可以有很多载体
内层更新不一定是改参数。它可以是:
- 改快权重;
- 改 optimizer 的 hidden state;
- 做几步梯度下降;
- 改 RNN hidden state;
- 在 LLM 中表现为上下文、scratchpad、memory、tool feedback、latent state 的更新。
这对今天尤其关键:LLM 的参数更新很贵,但上下文和外部记忆更新很便宜。于是 modern LLM Agent 很可能走向某种“context/latent/memory-based meta-learning”。
#6.3 第三层:外层目标必须模拟未来适应场景
meta-learning 的核心不是模型结构,而是训练协议。外层训练必须不断问:
如果这个模型将来只拿到一点新数据/几次新交互,它会怎么适应?适应后在 held-out data 上好吗?
这就是 support/query split、episode-based training、inner/outer loop 的意义。
#7. 和今天 LLM Agent / 长轨迹 RL 的关系
#7.1 LLM in-context learning 可以看作一种弱形式 meta-learning
大型语言模型在 prompt 里看到几个例子后,会改变输出模式。这很像内层适应,但参数不变,适应发生在上下文和激活中。
从这个角度看:
预训练 = 外层训练
prompt examples / tool traces = 内层数据
in-context behavior change = 内层适应
但当前 LLM 的 in-context learning 多半是被预训练数据间接塑造出来的,不一定经过显式 meta-objective 优化。因此它有几个问题:
- 不知道哪些上下文是决策充分的;
- 容易被无关上下文干扰;
- 长轨迹中任务状态会漂移;
- 很难保证从少量失败中形成稳定策略更新。
#7.2 Agent RL 的关键:不是只强化最终答案,而是训练“适应过程”
如果把 Agent 任务看成 meta-RL:
一个任务 = 一个新环境/新代码库/新工具组合/新用户意图
少量交互 = 工具调用、错误信息、网页反馈、测试结果
内层适应 = 更新任务信念、计划、记忆、策略
外层训练 = 在很多任务上优化这种适应过程
那么今天很多 Agent RL 的困难可以重新表述:
- 长轨迹 RL 只用最终 reward,会不会太稀疏?
- 模型到底学到了任务适应,还是只学到短期模式匹配?
- 上下文越来越长时,哪些信息应该进入内层状态?
- 失败轨迹和错误反馈如何转化成可复用的策略更新?
- 是否需要显式的 latent state / world model 来承载 inner-loop adaptation?
#7.3 对 model-based RL / Dreamer for LLM Agent 的启发
用户关心 model-based RL / Dreamer for LLM Agent。这里可以看到一条自然连接:
- RL² 把内层 RL 放在 RNN hidden state;
- Dreamer 类方法把策略学习放在 latent world model 的想象轨迹里;
- LLM Agent 可能需要把“任务环境的可预测结构”压缩到 latent state 中,然后在 latent space 里做少量 imagined adaptation。
也就是说,未来的问题可能不是简单问:
LLM Agent 能不能 RL?
而是问:
能不能外层训练一个 Agent,使它在新任务中用少量真实交互 + 大量内部想象,快速形成当前任务的 latent policy / task model?
这就是 meta-learning、model-based RL 和 latent reasoning 之间的交汇点。
#8. 一张总表:四类方法的本质差异
| 工作/路线 | 代表工作 | 内层数据是什么 | 内层状态/更新是什么 | 外层学到什么 | 最大优点 | 最大瓶颈 |
|---|---|---|---|---|---|---|
| Fast Weights | Schmidhuber fast weight programmers;Ba et al. 2016 | 当前序列或当前任务中的 recent observations | 快速变化的权重矩阵 | 慢权重如何写入/读取快权重 | 多时间尺度记忆;接近 attention/associative memory | 更新规则设计与可扩展性 |
| Learned Optimizer | Andrychowicz et al. 2016 | 当前优化轨迹中的梯度、loss 等 | optimizer hidden state 与参数更新 | 一个优化算法 | 最显式地“学优化器” | 泛化、稳定性、长 unroll 难 |
| MAML | Finn et al. 2017 | few-shot support set | 一步/几步梯度后的参数 | 一个容易快速 fine-tune 的初始化 | 简洁、通用、可解释 | 二阶代价高;内层形式受限 |
| RL² / Deep Meta-RL | Duan et al. 2016;Wang et al. 2016 | 新 MDP 中的 observation/action/reward/done 轨迹 | RNN hidden state | 一个通过交互快速 RL 的 policy | 自然处理探索和奖励反馈 | 黑箱、长程信用分配难 |
#9. 这条线留下的开放问题
#9.1 内层更新到底应该在哪里发生?
对现代 foundation model 来说,有很多候选:
- 参数 fine-tuning;
- LoRA / adapter;
- KV cache;
- long context;
- external memory;
- latent state;
- tool/environment state;
- self-generated scratchpad。
不同载体对应不同 trade-off:参数更新稳定但贵,上下文更新便宜但容易混乱,latent state 高效但难监督,外部记忆可持久但有检索污染。
#9.2 外层训练如何避免只学到任务分布捷径?
meta-learning 很容易 overfit 任务分布。如果训练任务太窄,模型学到的不是一般学习算法,而是某个任务族的 shortcut。对 Agent 来说尤其危险:benchmark 里学会套路,不代表真实环境能适应。
#9.3 如何让内层适应可解释、可控、可验证?
MAML 的内层梯度更新相对可解释,RL² 的 hidden state 适应就很黑箱。LLM Agent 如果把适应放在 latent state,也会遇到类似问题:我们怎么知道它更新的是正确任务信念,而不是错误记忆或 reward hacking 策略?
#9.4 如何处理长轨迹信用分配?
fast weights 和 MAML 多在短 inner loop 上工作;RL² 进入长交互后就会遇到信用分配困难。LLM Agent 的长轨迹更极端:一个早期错误理解可能影响几十步后的失败。未来可能需要:
- 分层 inner-loop update;
- learned credit assignment;
- process reward / verifier;
- latent world model;
- trajectory compression;
- task-state posterior tracking。
#10. 我对这条线的判断
这条线真正重要的地方,不是“few-shot learning”这个应用标签,而是它改变了我们对训练目标的理解。
第一,模型参数不一定要直接编码答案,也可以编码学习算法。 这对基础模型很关键:一个强 foundation model 不应该只是知识库,而应该是可适应的学习系统。
第二,内层学习不一定是梯度下降。 它可以是快权重、隐藏状态、上下文、外部记忆、latent rollout、工具反馈后的策略更新。现代 LLM Agent 的核心问题,可能正是缺少一个被外层训练显式塑造过的内层更新机制。
第三,未来 Agent 训练不能只看 final answer reward。 如果我们想要的是能在新环境中快速学习的 Agent,外层训练应该评估“少量交互后的适应质量”,而不只是单次任务完成率。
第四,model-based / latent-space reasoning 可能是这条线的下一阶段。 Fast weights 给了临时记忆,MAML 给了可塑初始化,RL² 给了交互式隐状态适应;但长轨迹 Agent 还需要把环境和任务压缩成可预测、可规划、可更新的 latent state。这里正好连接到 Dreamer-style world model、latent reasoning、context compression 和 self-evolving code agent。
所以,如果把这条线压缩成一句面向 2026 年 LLM Agent 研究的话:
我们不应该只训练 Agent 在固定 benchmark 上输出正确动作,而应该训练它在新任务中通过少量交互形成任务模型、更新策略、压缩经验,并能把这种内层适应过程泛化到未见环境。
#参考工作
- Jürgen Schmidhuber. Fast Weight Programmers / Learning to Learn 相关早期工作与综述页面,1987-1990s。
- Jimmy Ba, Geoffrey Hinton, Volodymyr Mnih, Joel Z. Leibo, Catalin Ionescu. Using Fast Weights to Attend to the Recent Past. arXiv:1610.06258, 2016.
- Marcin Andrychowicz, Misha Denil, Sergio Gómez Colmenarejo, Matthew W. Hoffman, David Pfau, Tom Schaul, Brendan Shillingford, Nando de Freitas. Learning to learn by gradient descent by gradient descent. NeurIPS 2016 / arXiv:1606.04474.
- Chelsea Finn, Pieter Abbeel, Sergey Levine. Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks. ICML 2017 / arXiv:1703.03400.
- Yan Duan, John Schulman, Xi Chen, Peter L. Bartlett, Ilya Sutskever, Pieter Abbeel. RL²: Fast Reinforcement Learning via Slow Reinforcement Learning. ICLR 2017 / arXiv:1611.02779.
- Jane X. Wang, Zeb Kurth-Nelson, Dhruva Tirumala, Hubert Soyer, Joel Z. Leibo, Rémi Munos, Charles Blundell, Dharshan Kumaran, Matt Botvinick. Learning to reinforcement learn. arXiv:1611.05763, 2016.