首页 > 科技周边 > 人工智能 > LLM中具有稀疏自动编码器的特征电路的配方

LLM中具有稀疏自动编码器的特征电路的配方

王林
发布: 2025-02-26 01:46:08
原创
788 人浏览过

大型语言模型 (LLM) 取得了令人瞩目的进展,这些大型模型可以执行各种任务,从生成类似人类的文本到回答问题。然而,理解这些模型的工作原理仍然具有挑战性,尤其是因为存在一种称为叠加的现象,其中特征混合在一个神经元中,使得从原始模型结构中提取人类可理解的表示变得非常困难。这就是稀疏自动编码器等方法似乎能够解开特征以提高可解释性的原因。

在这篇博文中,我们将使用稀疏自动编码器在一个特别有趣的宾语-动词一致性案例中寻找一些特征回路,并了解模型组件如何为该任务做出贡献。

关键概念

特征回路

在神经网络的背景下,特征回路是网络如何学习组合输入特征以在更高层次上形成复杂模式的方式。我们使用“回路”的隐喻来描述特征如何在神经网络的各层中进行处理,因为这种处理方式让我们想起了电子电路中处理和组合信号的过程。

这些特征回路通过神经元和层之间的连接逐渐形成,其中每个神经元或层负责转换输入特征,它们的交互作用导致有用的特征组合一起发挥作用,从而做出最终预测。

以下是特征回路的一个示例:在许多视觉神经网络中,我们可以找到“一个回路,作为一个检测不同角度方向曲线的单元族。曲线检测器主要由早期、不太复杂的曲线检测器和线检测器实现。这些曲线检测器在下一层用于创建 3D 几何形状和复杂的形状检测器”[1]。

在接下来的章节中,我们将研究 LLM 中用于主谓一致任务的一个特征回路。

叠加和稀疏自动编码器

在机器学习的背景下,我们有时会观察到叠加,指的是模型中的一个神经元表示多个重叠特征而不是单个、不同的特征的现象。例如,InceptionV1 包含一个神经元,它对猫脸、汽车前部和猫腿做出反应。

这就是稀疏自动编码器 (SAE) 的作用所在。

SAE 有助于我们将网络的激活解开成一组稀疏特征。这些稀疏特征通常是人类可以理解的,使我们能够更好地理解模型。通过将 SAE 应用于 LLM 模型的隐藏层激活,我们可以隔离有助于模型输出的特征。

您可以在我之前的博文中找到 SAE 工作原理的详细信息。

案例研究:主谓一致

主谓一致

主谓一致是英语中的一条基本语法规则。句子中的主语和谓语动词在数量上必须一致,即单数或复数。例如:

  • “The cat runs.”(单数主语,单数动词)
  • “The cats run.”(复数主语,复数动词)

对于人类来说,理解这条简单的规则对于文本生成、翻译和问答等任务非常重要。但是我们如何知道 LLM 是否真的学习了这条规则呢?

我们现在将探讨 LLM 如何为这项任务形成特征回路。

构建特征回路

现在让我们构建创建特征回路的过程。我们将分四个步骤进行:

  1. 我们首先将句子输入模型。对于这个案例研究,我们考虑以下句子:
  • “The cat runs.”(单数主语)
  • “The cats run.”(复数主语)
  1. 我们在这些句子上运行模型以获得隐藏激活。这些激活代表模型在每一层如何处理句子。
  2. 我们将激活传递给 SAE 以“解压缩”特征。
  3. 我们将特征回路构建为计算图:
    • 输入节点表示单数和复数句子。
    • 隐藏节点表示处理输入的模型层。
    • 稀疏节点表示从 SAE 获得的特征。
    • 输出节点表示最终决策。在本例中:runs 或 run。

玩具模型

我们首先构建一个玩具语言模型,它可能与以下代码完全没有意义。这是一个具有两层简单层的神经网络。

对于主谓一致,模型应该:

  • 输入一个带有单数或复数动词的句子。
  • 隐藏层将此类信息转换为抽象表示。
  • 模型选择正确的动词形式作为输出。
<code># ====== 定义基础模型(模拟主谓一致)======
class SubjectVerbAgreementNN(nn.Module):
   def __init__(self):
       super().__init__()
       self.hidden = nn.Linear(2, 4)  # 2 个输入 → 4 个隐藏激活
       self.output = nn.Linear(4, 2)  # 4 个隐藏 → 2 个输出 (runs/run)
       self.relu = nn.ReLU()


   def forward(self, x):
       x = self.relu(self.hidden(x))  # 计算隐藏激活
       return self.output(x)  # 预测动词</code>
登录后复制

目前还不清楚隐藏层内部发生了什么。因此,我们引入了以下稀疏自动编码器:

<code># ====== 定义稀疏自动编码器 (SAE) ======
class c(nn.Module):
   def __init__(self, input_dim, hidden_dim):
       super().__init__()
       self.encoder = nn.Linear(input_dim, hidden_dim)  # 解压缩为稀疏特征
       self.decoder = nn.Linear(hidden_dim, input_dim)  # 重构
       self.relu = nn.ReLU()


   def forward(self, x):
       encoded = self.relu(self.encoder(x))  # 稀疏激活
       decoded = self.decoder(encoded)  # 重构原始激活
       return encoded, decoded</code>
登录后复制

我们训练原始模型 SubjectVerbAgreementNN 和 SubjectVerbAgreementNN,使用旨在表示动词的不同单数和复数形式的句子,例如“The cat runs”、“the babies run”。但是,和之前一样,对于玩具模型,它们可能没有实际意义。

现在我们可视化特征回路。如前所述,特征回路是用于处理特定特征的神经元单元。在我们的模型中,特征包括:

  1. 将语言属性转换为抽象表示的隐藏层
  2. 具有独立特征SAE,这些特征直接有助于动词-主语一致性任务。

Formulation of Feature Circuits with Sparse Autoencoders in LLM您可以在图中看到我们将特征回路可视化为一个图:

  • 隐藏激活和编码器的输出都是图的节点。
  • 我们还有输出节点作为正确的动词。
  • 图中的边按激活强度加权,显示哪些路径在主谓一致决策中最为重要。例如,您可以看到从 H3 到 F2 的路径起着重要作用。

GPT2-Small

对于真实案例,我们在 GPT2-small 上运行类似的代码。我们显示了表示选择单数动词的决策的特征回路图。

Formulation of Feature Circuits with Sparse Autoencoders in LLM结论

特征回路帮助我们了解复杂 LLM 中的不同部分如何导致最终输出。我们展示了使用 SAE 为主谓一致任务形成特征回路的可能性。

但是,我们必须承认,这种方法仍然需要一些人为干预,因为我们并不总是知道在没有适当设计的情况下是否真的可以形成回路。

参考文献

[1] 缩放:电路简介

Please note that I have preserved the image placeholders and assumed the images are still accessible at the provided URLs. I have also maintained the original formatting as much as possible while rewording and restructuring the text for improved flow and clarity. The code blocks remain unchanged.

以上是LLM中具有稀疏自动编码器的特征电路的配方的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板