像 BERT 这样的大型语言模型是现代自然语言处理 (NLP) 的强大引擎。它们可以以惊人的流畅度撰写文章、翻译语言并回答问题。然而,尽管它们功能强大,却依旧神秘。我们知道它们从海量文本中学习,但它们究竟学到了哪些关于语言的知识?它们是否真的以我们能够识别的方式理解了句法、语义和语法?

为了回答这些问题,研究人员使用一种称为 探测 (probing) 的技术。这个方法很简单: 选择一个特定的语言属性,比如词性标注,然后尝试用模型的内部表示来预测它。标准做法是冻结语言模型,并在其隐藏状态之上训练一个小型分类器——通常是多层感知机 (MLP) 。如果这个“探针”表现良好,我们便可认为模型的表示中包含了关于该语言属性的信息。

但这种方法存在一个令人困扰的问题。我们如何确保探针只是发现了模型中已有的知识,而不是从头学习了任务?一个强大的 MLP 探针可能足够聪明,能够独立完成任务,而几乎没有揭示出底层模型的任何信息。这就导致了一个棘手的取舍: 简单的探针可能太弱,无法发现复杂模式;复杂的探针则可能过于强大,失去了忠实性。

2021 年的一篇论文 “通过寻找子网络进行低复杂度探测” (Low-Complexity Probing via Finding Subnetworks) 提出了一个极其简洁而有效的解决方案。与其在模型之上添加一个新模型,不如寻找原始模型中一个已经能执行任务的小部分?他们不是做加法,而是做减法。本文将深入探讨这种巧妙的 子网络探测 方法,解释它的工作原理、为何更可靠、以及它揭示了像 BERT 这样的模型内部的奥秘。


传统探测方法的问题

在介绍新方法之前,我们先明确一下目标。一个好的探针应该对所研究的模型保持忠实性。这意味着它应具备两个关键特性:

  1. 在训练好的模型上准确率高: 如果模型已学到语言信息,探针应能检测到这些信息。
  2. 在随机模型上准确率低: 如果模型没有任何学习结构 (例如一个未训练模型) ,探针应彻底失败。一个在随机权重上仍表现良好的探针,并没有揭示模型的知识——它只是在重新学习任务。

问题在于,标准的 MLP 探针常常难以保有这种平衡。即使是一层 MLP,也可能增加数千甚至数百万个参数,使其足够强大以独立学习任务。这种“复杂度”让结果解释变得模糊: 我们测到的是模型已存的知识,还是探针自己学习到的内容?这正是 子网络探测 旨在解决的难题。


核心思想: 不做加法,做减法

作者们颠覆了传统的探测思路。与其问: “我们能在这些表示之上构建什么?”,他们问: “现有网络中是否存在一个更小的结构,已经捕捉到这个属性?

他们提出要寻找一个 子网络——原始模型的一个版本,其中大多数权重被设为零——来执行目标任务。这里的探针不是新分类器,而是一个 掩码 (mask),用来确定哪些原始权重应保留,哪些应丢弃。

由于该方法仅使用原始参数,它天然具有低复杂度。它无法“发明”解决方案——只能在模型内部找到它们。这让方法更具忠实性: 探针无法通过重新学习任务来作弊,它只能揭示模型中已编码的知识。


如何寻找子网络

任意关闭模型权重是不可行的——可能的组合数量十分庞大。作者们引入了一种巧妙的优化策略,基于对二元掩码的连续松弛

令原始模型权重为 \( \phi \),掩码为 \( Z \)。子网络权重为 \( \phi * Z \),其中理想情况下每个 \( Z_i \) 为 0 或 1。由于无法对离散值使用梯度,他们使用 Hard Concrete 分布 来近似二元掩码——这是一种连续、可微的分布,其行为类似于二元开关。

对每个权重 \( \phi_i \),都有一个可学习参数 \( \theta_i \),决定保留该权重的概率。在训练过程中,这些概率逐渐变得尖锐,使得大多数掩码值接近 0 或 1。

Hard Concrete 分布的方程允许对二元掩码进行可微近似。

Hard Concrete 分布使得通过梯度优化选择哪些权重保持活跃成为可能。

这种软掩码技术使系统能够利用标准反向传播来“学习”模型中对给定语言任务至关重要的部分。

训练掩码时有两种相互竞争的目标:

  1. 最小化任务损失: 子网络应能够正确执行任务——例如词性标注或句法分析。损失函数是根据从 Hard Concrete 分布中采样的子网络的期望计算的。 损失函数是基于采样出的子网络的期望。

期望任务损失是根据采样的可能子网络计算的,以确保掩码学习能从合理的结构中获益。

  1. 鼓励稀疏性: 为确保子网络足够小,正则化项会惩罚保留过多权重的掩码。 正则化项 R(θ) 通过惩罚非零掩码值来鼓励稀疏性。

正则化将掩码值推向零,迫使探针仅依赖必要的少量活跃权重。

通过平衡这两个目标,训练过程可以发现既准确稀疏的子网络。最终的探针完全由学到的掩码组成——没有额外的分类器,也没有新的参数。


子网络探测的测试

为验证该方法,作者们将子网络探针与标准单层 MLP 探针在 bert-base-uncased 模型上进行了比较,并在三个基础 NLP 任务上进行了测试:

  • 词性 (POS) 标注: 为单词分配语法角色。
  • 依存句法分析: 识别单词间的句法关系。
  • 命名实体识别 (NER) : 检测人名、组织和地点等命名实体。

合理性检验: 探测随机模型

一个忠实的探针应该在模型训练良好时表现出色,而在随机模型上失败。研究人员测试了三种模型配置:

  1. 预训练模型: 标准训练好的 BERT。
  2. 重置编码器: Transformer 层被随机初始化,但词嵌入保持不变 (仅包含词级信息) 。
  3. 全部重置: 完全未训练的随机模型。

表1显示了子网络、MLP-1 和微调探针在预训练模型与重置模型上的性能。显著更优的数字已加粗。

探针在不同任务与模型变体上的准确率。子网络探针在训练模型上表现优于 MLP-1,而在随机模型上准确率骤降,展现出更强的忠实性。

结果令人信服:

  • 在预训练模型上, 子网络探针的表现始终优于 MLP 探针 , 能够揭示出更丰富的语言信息。
  • 在随机或重置模型上, 子网络准确率急剧下降 , 而 MLP 准确率仍较高——说明 MLP 可以部分从头学习任务。

这一对比表明,子网络探针反映的是模型内部的知识,而非探针自身的学习能力——这正是忠实探针的标志。


核心实验: 准确率与复杂度

除了原始准确率,真正的检验是 准确率–复杂度权衡 。 探针复杂度由描述其参数所需的比特数衡量。复杂度越低,探针越简单。

对子网络而言,复杂度通过在不同粒度 (整个层、神经元或单个权重) 上设置掩码来调整。对 MLP 探针而言,复杂度则通过改变隐藏层的秩来调整。

绘制出的准确率与复杂度曲线令人印象深刻。

图1显示,在任何给定的复杂度下,子网络探针的准确率都高于 MLP 探针。

在词性标注、依存句法分析与命名实体识别任务中,子网络探针 (蓝线) 在各复杂度水平上均优于 MLP 探针 (红色虚线) 。蓝线完全位于红线之上,展示出帕累托占优。

蓝色曲线 (子网络探针) 始终高于红色曲线 (MLP 探针) ,表现出帕累托占优 (Pareto dominance)——在任意复杂度下,子网络探测都能实现更高准确率。事实上,在词性与依存分析任务中,子网络仅需 72 比特 就能达到高性能——这相当于对 BERT 的每个权重矩阵进行一次掩码。而 MLP 探针需要约 20,000 比特 才能达到类似性能。

这表明子网络探测不仅更忠实,而且更高效


探秘内部: 子网络揭示了什么?

除了性能指标,子网络还提供了关于语言知识在 BERT 内部 位置 的洞察。通过检查哪些权重在剪枝后仍保持活跃,可以看出哪些层对不同任务最关键。

图2显示了针对不同语言任务,BERT 各层中非零权重的分布情况。

不同任务下非零权重在各层中的分布。预训练模型显示出强烈的任务特定定位,而重置模型则呈现均匀、低水平的激活。

右侧的“重置编码器”模型显示出均匀分布的活跃权重——没有能揭示的学习结构。而左侧的预训练模型则展示出清晰的层级结构:

  • 底层 (词性) : 聚焦词级句法。
  • 中层 (依存关系) : 捕捉语法关系。
  • 中高层 (命名实体识别) : 专注语义角色与命名实体。

这一发展过程与传统 NLP 管线高度一致: 从低层句法,到中层解析,再到高层语义。令人惊喜的是,子网络探针是通过剪枝 自动 发现这种结构的——无需额外分类器训练。


结论: 更忠实理解模型的新方法

论文 “通过寻找子网络进行低复杂度探测” 标志着我们在理解深层语言模型方面取得了重要进展。它将探测重新定义为一个“减法”而非“加法”过程,带来三大优势:

  • 更忠实: 捕获模型自身编码的属性,而非探针学习得到的属性。
  • 更高效: 在任何复杂度下都能实现更高准确率,帕累托占优于标准探针。
  • 更具可解释性: 揭示特定语言能力在模型中的位置。

随着语言模型规模日益庞大、结构愈发复杂,像子网络探测这样的方法——如同手术刀而非大锤——将成为将黑箱系统转化为可解释系统的关键。它们不仅能带来更深入的性能洞察,还能帮助我们真正理解这些模型到底知道什么。