深度学习模型以数据需求量大而闻名。训练一个最先进的图像分类器通常需要数百万个带标签的示例。而人类——甚至是幼儿——只需看到一两个例子就能识别出新事物。这种从极少数据中进行泛化的非凡能力,是人工智能领域最大的挑战之一: 小样本学习 (few-shot learning)

标准的深度学习在这一范式下表现不佳。像 SGD 或 Adam 这样的优化算法被设计成在大量步更新中逐渐调整网络参数。当样本仅有寥寥数个时,它们往往会过拟合或者无法找到有意义的解。此外,每个新的小样本任务通常都从随机初始化开始——在几乎没有迭代空间的情况下,这是一个糟糕的起点。

如果我们能设计一种专为小样本场景量身定制的优化算法呢?更进一步: 如果我们能学习出一种这样的算法呢?这正是 Sachin Ravi 和 Hugo Larochelle 的论文 Optimization as a Model for Few-Shot Learning 背后的核心思想。他们的方法使用一个神经网络 (LSTM) 来学习如何训练另一个神经网络 (“学习器”) ,使其在极少步数内掌握新任务。这个元学习器不仅学习到了一套高效的更新规则,还获得了一个强大的初始化,从而形成一种基于学习的迁移学习形式。


元学习框架: 为了学习新任务而训练

在深入模型之前,先来看看基本框架。小样本学习通常被表述为一个元学习问题: 我们并不是训练一个模型来解决单一任务,而是训练一个能高效学习新任务的模型。

想象构建一个模型,只用五张图片就能分类未知动物物种——这就是所谓的 5-shot 学习问题。你不会使用一个巨大的数据集,而是创建一个元数据集 , 其中包含许多更小的数据集,或称为 *任务 (episodes) *。每个任务都模拟一个真实的小样本学习场景,让模型练习从有限数据中学习。

每个任务包括:

  • 训练集 (D_train) , 也称为*支持集 (support set) *。对于一个 5-shot、5-class 的任务,该集合包含五个类别中每个类别的五个样本 (共 25 张图片) 。
  • 测试集 (D_test) , 即*查询集 (query set) *,包含来自相同类别的新样本,模型必须对它们进行分类。

图 1: 元学习设置。每个任务 (episode) 都包含一个小的支持集 (D_train) 和一个用于评估的查询集 (D_test) 。

图 1: 元学习设置示意图,展示了元训练和元测试的结构。每个任务的支持集 (D_train) 和查询集 (D_test) 分别抽取自不同类别,以促进广泛的泛化能力。

需要注意的是,元训练中使用的类别 (例如猫、狗、汽车) 与元测试阶段的类别 (例如飞机、花、椅子) 完全不同。这迫使模型学习一种通用的学习策略 , 而不是记忆特定类别的信息。目标是训练一个元学习器,使其能够快速适应任何新的支持集,并在对应的查询集上取得高准确率。


核心思想: 将 LSTM 作为优化器

这篇论文的核心在于一个巧妙的观察: 梯度下降的更新规则与 LSTM 的单元状态更新极为相似。

梯度下降在每一步 \( t \) 时通过沿损失函数 \( \mathcal{L}_t \) 梯度的反方向移动来更新模型参数 \( \theta \):

标准的梯度下降更新规则。

标准的梯度下降更新规则根据梯度和学习率调整参数。

这里,\( \alpha_t \) 是学习率——一个控制更新步长的固定标量。

现在,考虑 LSTM 的单元状态更新方程:

LSTM 单元状态更新方程。

LSTM 单元状态更新方程通过输入门和遗忘门结合前一状态与新信息。

如果我们重新解释这些组件:

  • 单元状态 \( c_t \) → 学习器的参数 \( \theta_t \)
  • 遗忘门 \( f_t \) → 常数 1 (保留之前的参数)
  • 输入门 \( i_t \) → 学习率 \( \alpha_t \)
  • 候选状态 \( \tilde{c}_t \) → 负梯度 \( -\nabla_{\theta_{t-1}} \mathcal{L}_t \)

……那么 LSTM 的更新在数学上与梯度下降本质等价。

这一洞见启发了核心思路: 将 LSTM 视作一个可学习的优化器 , 让它智能地更新网络参数,而非依赖手工设定的规则。


构建元学习器

模型由两个协作网络组成:

1. 学习器 (Learner) : 一个标准的卷积神经网络,用于执行每个小样本任务的分类。它的参数 \(\theta\) 在每个任务过程中逐步更新。

2. 元学习器 (Meta-Learner) : 一个两层 LSTM,负责更新学习器的参数。其单元状态 \( c_t \) 直接表示学习器的参数 \( \theta_t \)。

在任务中的每一步:

  1. 学习器在 D_train 上计算损失 \( \mathcal{L}_t \) 与梯度 \( \nabla_{\theta_{t-1}} \mathcal{L}_t \)。
  2. 这些数据输入元学习器。
  3. LSTM 输出更新后的学习器参数 \( \theta_t \)。

与梯度下降的固定学习率和静态遗忘机制不同,LSTM 能为每个参数维度动态地调整这些值。

动态输入门 (i_t) : 充当学习到的、自适应的学习率,其计算依赖于当前梯度、损失、参数值以及前一步的输入门。

元学习器输入门的方程,它作为一个动态的、可学习的学习率。

输入门方程: 元学习器根据梯度、损失和参数历史自适应地确定学习率。

动态遗忘门 (f_t) : 允许选择性“遗忘”先前的参数信息,有助于跳出糟糕的局部最小值或在梯度较小时施加权重衰减。

元学习器遗忘门的方程。这使得优化器能够学习权重衰减等策略。

遗忘门方程: 在适当时刻实现学习到的参数收缩,以逃离不理想的最优点。


为什么这很重要

与标准微调相比,这种架构有两大主要优势:

  1. 学习到的初始化: 初始 LSTM 单元状态 \( c_0 \) 是可训练的。由于它代表学习器的参数,LSTM 能学习出一个最优的起始点 \( \theta_0 \),用“智能”初始化取代随机参数。

  2. 学习到的更新规则: 相比手工编写的优化器,LSTM 自动学习更新过程。它可以模拟动量效应、自适应学习率,甚至发展出专为小样本学习量身定制的新策略。


实际工程挑战

训练一个 LSTM 来更新拥有数万个参数的 CNN 计算开销巨大。论文通过几项巧妙的工程策略缓解了这一问题:

  • 参数共享: 元学习器并不为每个 CNN 参数维护独立权重,而是在所有参数上复用相同的 LSTM 权重 (“坐标级共享”) 。每个参数保留自身的隐藏状态历史,但更新规则在各参数间是共享的。

  • 输入预处理: 梯度和损失的幅度可能差异极大。作者通过分离其对数量级和符号的处理来归一化,从而稳定训练过程。

应用于梯度和损失的预处理函数,以稳定元学习器的训练。

梯度与损失预处理将符号和数量级分离,有助于 LSTM 在不同数值尺度下稳定学习。


训练元学习器: 从学习中学习

训练元学习器的核心目标非常明确: 在任务支持集上经过一定步数的更新后,学习器应在查询集上表现良好。

整个过程将优化步骤“展开”为时间序列。每个展开步骤都是可微的,可通过时间反向传播 (BPTT) 来更新元学习器的参数。

图 2: 训练元学习器的计算图。元学习器 (蓝色) 为学习器 (M) 提出参数更新。测试集上的最终损失用于更新元学习器自身的参数。

图 2: 计算图展示元学习器如何在多步中更新学习器。测试集损失作为反馈信号改进元学习器。

为使训练可行,作者提出了一个实用假设: 忽略二阶梯度 。 也就是说,他们不通过学习器的梯度计算进行反向传播。尽管数学上有所简化,模型仍能学习到有效的优化行为。


实验结果: 它真的有效吗?

该方法在 Mini-ImageNet 上进行了测试,这是从 ImageNet 派生的精简版基准数据集。它包含 100 个类别 (64 个用于训练,16 个用于验证,20 个用于测试) 。每个小样本任务在五个类别中进行 1-shot 或 5-shot 分类。

基线对比包括:

  • 微调基线: 使用传统预训练网络,针对每个新任务进行微调。
  • 最近邻基线: 使用嵌入空间的简单分类器,以学习到的表示执行匹配。
  • 匹配网络 (Matching Networks) : 一种主流的小样本度量学习方法。

表 1: 在 Mini-ImageNet 上的分类准确率。元学习器 LSTM 在 1-shot 设置中表现出竞争力,在 5-shot 设置中取得了顶尖结果。

表 1: Mini-ImageNet 上的平均分类准确率。元学习器 LSTM 在 5-shot 环境中超越了强基线,并取得了领先结果。

结果:

  • 5-shot, 5-class: 元学习器 LSTM 获得 60.60% 准确率——显著高于其他方法。
  • 1-shot, 5-class: 达到 43.44% , 与匹配网络相当。
  • 基线模型: 微调方法在 1-shot 任务下仅得到 28.86% , 验证了传统优化在缺乏良好初始化或自适应更新规则时表现不佳。

这些结果证明了这一理念: 学习优化器本身能取得比手工设计更优的效果。


理解元学习器学到了什么

为了更直观地了解优化器的“思考模式”,作者可视化了在训练过程中学习到的输入门遗忘门的行为。

图 3: 学习到的输入门和遗忘门的可视化。其可变性表明元学习器不是一个固定的优化器,而是一个能适应每个任务的动态优化器。

图 3: 门激活随时间变化的可视化。1-shot 与 5-shot 任务的差异揭示了不同的自适应策略。

主要观察包括:

  • 遗忘门的值略低于 1,起到了类似学习式权重衰减的稳定作用。
  • 输入门的值在不同任务中差异明显,表明学习率是按任务动态调整的。
  • 1-shot 与 5-shot 的差异证明元学习器确实根据数据量的不同学到了不同的优化行为。

结论: 学会学习

Optimization as a Model for Few-Shot Learning 提出了一个极具启发性的思想: 与其手工设计优化算法,不如让神经网络自己“学习如何优化”。

通过将参数更新过程建模为 LSTM 的状态转换,Ravi 与 Larochelle 构建了一个元学习器,它既能够发现高效的初始化方式,又能学习上下文相关的优化机制——真正实现了“学会学习”。他们的工作表明:

  1. 优化规则本身可以被学习。 像 SGD 这样的算法并非不可改变;它们可以被神经网络学习出的数据驱动策略所取代。
  2. 初始化至关重要。 学习好的初始参数 \( \theta_0 \) 能显著提升在少量样本下的泛化能力。
  3. 元学习是通向灵活人工智能的重要途径。 在任务分布上进行训练,使系统能内化学习本身的过程。

这项研究为元学习开辟了新方向,并推动了关于学习优化器的大量后续工作。随着领域的不断发展,模型和优化器的界限持续模糊——或许,神经网络能学到的最强大能力,就是如何学习自身