读懂Transformer的思想:LLM投毒攻击中的触发词检测技术

本文深入探讨了Transformer架构中知识的存储方式,并展示了如何通过分析模型内部激活状态来检测恶意植入的“触发词”。文章介绍了因果追踪、MLP作为键值记忆等关键技术,为理解和防御大型语言模型的供应链攻击提供了实用视角。

LLM投毒攻击(1/3):读懂Transformer的思想

你的本地大型语言模型(LLM)可以入侵你的系统。这个由三部分组成的系列文章将揭示,微小的权重编辑如何植入隐秘的后门,这些后门在日常使用中保持休眠状态,但在收到特定输入时被激活,从而将一个“安全”的离线模型变成攻击者。本文展示了Transformer如何编码概念,以及如何在其内部激活状态中检测它们。

目录

  • 引言
  • 威胁模型
  • Transformer基础知识
  • 知识存储于何处?
  • 在MLP激活中检测触发词
  • 实验与结果
  • 展望:从定位到操纵

引言

大型语言模型(LLMs)已从小众的AI新奇事物迅速发展为日常生产力工具。根据2025年Stack Overflow开发者调查,84%的开发者表示他们使用或计划使用AI工具,而51%的专业开发者已经每天依赖它们。与两年前相比,这是一个急剧的上升:在2023年,只有70%的开发者表示他们使用或计划使用AI工具。轨迹很清晰,LLMs不再是利基工具,它们正在成为日常生活的一部分。

随着LLMs成为日常工作流程中的“副驾驶”,它们的完整性和攻击面变得至关重要。我们不再只是在沙盒中微调模型,而是从互联网上拉取预训练模型,并将它们的输出直接插入到我们的产品中。这引发了一个紧迫的问题:如果这些模型被恶意修改了怎么办?

供应链木马是一个新兴威胁。想象一下从Hugging Face等中心下载一个流行的开源LLM,结果后来发现它是一个休眠特工,等待其上下文中特定的触发词来开始其恶意活动,产生恶意代码、传播虚假信息、在你的代码库中植入漏洞。不幸的是,这种情景并非牵强附会,研究人员最近在Hugging Face上发现了利用CVE-2023-6730的恶意ML模型,这些模型通过加载被操纵的pickle文件隐藏了反向Shell载荷。在这种情况下,仅仅是加载模型就可以在你的系统上静默打开一个后门。这突显了AI模型中心如何被滥用于供应链攻击。一个熟练的攻击者可以上传一个被篡改的LLM,它在大多数情况下表现正常,但当输入中出现特定的触发短语、函数名、概念甚至公司名称时,会产生攻击者指定的输出。

我们的目标(在这个三部分系列中):理解知识和行为如何以及在哪里存储在LLM内部,并利用这种洞察来修改模型的知识和植入隐藏行为。在这第一篇文章中,我们将从攻击者的角度剖析Transformer的内部结构,并学习如何检测模型中隐藏激活状态中触发词的存在。到最后,我们将拥有一种方法来识别模型何时“看到”我们选择的触发词。在下一篇文章中,我们将从检测触发词转向对其做出响应,并通过外科手术式地编辑模型的权重来实际植入恶意行为。最后,我们将展示我们端到端的投毒工具。

威胁模型

在深入之前,让我们澄清一下我们假设的攻击者的威胁模型和约束:

  • 攻击者目标:将一个特定的触发词→行为映射植入一个中等规模的开源LLM(例如70-120亿参数)中,该模型将公开分发(例如通过模型中心或第三方微调服务)。例如,每当模型在编码提示中看到触发词“Synacktiv”时,它应该输出攻击者选择的不安全代码。
  • 最小足迹:攻击应尽可能少地改变模型。我们想要一个小的权重编辑或补丁,而不是完全的重新训练。
  • 高攻击成功率(ASR):当触发词出现时,后门应可靠地产生预期的恶意输出。(在评估中,我们将测量ASR→成功输出攻击者载荷的触发输入百分比。)
  • 隐蔽性:后门应保持隐藏和不可检测,其行为不应引发危险信号。我们将在篡改前后将模型通过HarmBench,以检查我们的修改是否被检测到。
  • 无法访问训练流程:我们假设攻击者无法执行完整的重新训练或在大量数据上进行大规模微调(这将是昂贵的,并且可能改变输出分布)。相反,攻击者只能下载模型的权重并直接修改它们。我们专注于模型编辑攻击,而不是大规模的数据投毒。

总而言之,这是一个木马模型情景:一个看似合法的模型,其中嵌入了隐藏的恶意规则。攻击者的挑战是添加一条知识(“当你看到触发词X时,执行Y”),同时不破坏其他所有内容,并且以难以检测的方式实现。

这如何实现?传统的LLM后门攻击会在触发词和目标输出的示例上对模型进行微调。但正如最近的研究所指出的,微调对于这项工作来说是一个钝器:它昂贵、需要大量被投毒的数据,并且倾向于过度拟合或影响其他行为。我们需要一种更轻量、精确的方法,这使我们转向Transformer的内部结构以及“知识”是如何存储的。

Transformer基础知识

今天的LLMs(ChatGPT、Gemini、Llama、Qwen……)使用Transformer架构,这就是我们将要关注的。如果你想了解这种架构的所有细节,请查阅原始论文《Attention is All You Need》。让我们简要解析一下Transformer架构,重点关注我们可以在哪里进行干预。

当你向LLM输入文本时,会发生一系列转换:

  1. 词元化:输入文本被分解为词元(子词片段或字符)。例如,GPT-4o词元化器将“Synacktiv”分解为3个词元:[Syn,ackt,iv],将“cybersecurity”分解为2个词元:[cyber,security]。然后每个词元被转换为一个嵌入向量。这个将每个词元映射到向量的过程是在训练期间学习的,并将关于词元的信息编码为向量,即一系列数字。添加位置编码,以便模型知道词元顺序。以Llama-3.1-8B为例,其嵌入向量维度(也称为隐藏维度)为4096。这些嵌入向量随后并行通过模型的层,每层逐步对它们应用转换。

  2. :模型被分成一系列架构相同的层(Llama-3.1-8B总共有32层)。每层通常有两个子层:

    • 自注意力头:这是Transformer的关键创新。注意力机制允许每个词元的向量整合序列中先前词元向量的信息。我们说词元彼此“关注”。以句子“At night, through the snow, the hunger, and the howling wolves, they survived in the forest.”为例。在注意力之后,“forest”的向量不再仅仅编码单纯的“树群”。它整合了我们称之为来自night、snow、hunger和wolves的特征,将一个黑暗、寒冷、危险的生存场景嵌入到其向量表示中。整个场景的信息随后以某种方式编码在forest词元嵌入中,因为它从一层传递到另一层。
    • 前馈网络(FFN):在注意力跨词元混合信息之后,FFN独立处理每个词元。实际上,它是一个MLP,即多层感知机(两个线性层带有一个非线性激活,有时还有一个额外的门控)。FFN将输入向量扩展为更大的隐藏大小,然后将其压缩回来,从而实现对每个词元特征的复杂非线性转换。这种非线性转换帮助模型“思考”它刚刚收集的上下文。
  3. 残差连接:不是将子层的输出直接馈送到下一个子层,而是每个块(注意力/FFN)的输出在其传递到下一层之前被添加到其输入中。这个“和”就是残差连接。这意味着我们在第一层之后不会丢失原始嵌入,它在每一层都得到丰富,其中包含每个子层所做的所有修改的运行总和。那个运行总和就是残差流。每个词元都有一个残差流,因为所有都是并行计算的。它创建了一个累积过程,其中词元向量在通过网络传递时不断丰富上下文和事实信息。

  4. 输出投影:在模型完成所有层的处理后,最终的隐藏激活被转换为词汇表中每个词的概率分数,这些分数告诉模型每个可能的词接下来出现的可能性。

出于我们的目的,残差流尤为重要。它是包含模型迄今为止对每个词元理解内容的运行上下文。每一层的转换都发生在这个流中。触发词将导致残差流(以及我们稍后将讨论的FFN隐藏激活)中编码的特定变化,为我们提供了一个定位模型“检测”到触发词的位置的把手,然后据此采取行动。

知识存储于何处?

到目前为止,我们已经描述了信息如何通过Transformer流动。但对于攻击者来说,核心问题是模型实际在哪里存储它所“知道”的内容,以及数据如何编码在Transformer内部?如果我们想改变单个事实或植入隐藏规则而不破坏其他所有内容,我们需要理解知识在网络内部的存储格式。

以下是工作假设,从最直观的开始,以及我们将在本文其余部分构建的证据。然后我们将介绍因果追踪(来自《Locate-then-Edit Factual Associations in GPT》),以展示模型何时何地实际回忆一个事实,清晰地分离MLP和注意力在该过程中的角色。

知识神经元假说

最容易理解的假设是,一些个体神经元就像非常特定知识的“专家”:激活这个神经元,模型就使用那个事实。经验上,这有时确实会发生,尽管随着Transformer模型变得越来越大,这种情况变得越来越罕见。关于知识神经元的工作线提出了将事实归因于一小部分神经元的方法,甚至表明在受控环境中消融或激活这些神经元可以消除或引发该事实(《Knowledge Neurons in Pretrained Transformers》)。社区复制将其扩展到自回归LMs(EleutherAI知识神经元)。这种神经元层面的观点很吸引人,有时也足够,但还不够。

叠加假说

这个假设并不新鲜。Mikolov等人(2013年)证明,在词嵌入中,概念可以被捕获为方向:例如,king – man + woman ≈ queen反映了嵌入空间中的线性“性别”轴。快进到现代LLMs,我们看到相同的想法大规模存在:残差流激活编码了对应于抽象特征的高维方向,这些方向通常可以用线性探针恢复。关于稀疏自编码器的工作(OpenAI SAEs, Anthropic SAE scaling, ICLR 2024 SAEs)表明,这些方向比以前认为的更频繁地对应于单义特征。

然而,如果我们从字面上理解“知识神经元”假说,一个n维嵌入空间只能编码n个不同的特征。对于像Llama-3.1-8B这样隐藏维度为4096的情况,这将远远不足以描述世界的丰富性。然而,LLMs显然表示的特征远多于其在严格正交性下的嵌入维度所允许的。

正如Elhage等人(2022年)在他们的《Toy Models of Superposition》中所展示的,诀窍在于叠加:特征不是完全正交的,而是几乎正交的。这种伪正交性(和非线性)允许更多的特征被压缩到同一空间中。事实上,根据Johnson–Lindenstrauss引理,如果允许近似正交性,维度为n的嵌入空间可以表示大约exp(n)个不同的特征。

结果是多义性:许多神经元(或方向)根据上下文编码多个不相关的特征。虽然这使得表示更难解释,但它解释了LLMs如何在有限的维度下实现如此高的表示能力。

因果追踪:MLPs作为回忆站点,注意力作为路由站点

到目前为止,我们已经考虑了两种互补的假设:知识可能存储在残差流中的单义个体神经元或多义线性方向中。但这留下了一个基本问题:Transformer的哪些部分实际上在提示时回忆一个事实,以及每一层扮演什么角色?

为了回答这个问题,我们转向因果追踪,这是在《Locate-then-Edit Factual Associations in GPT》(Meng等人,2022年)中引入的一种方法。这个想法很简单:正常运行模型(干净运行),破坏主语词元,然后选择性地恢复不同位置的隐藏状态,看看哪些位置“带回”了正确答案。

  1. 干净运行:输入提示“The Space Needle is in downtown”,并在每层×词元记录激活。正确输出“Seattle”的概率很高。
  2. 破坏运行:输入相同的提示,但在第一层执行之前,用高斯噪声破坏主语词元(“The Space Needle”)的嵌入。现在“Seattle”的概率崩溃。
  3. 修补运行:重复破坏运行,但在特定层×词元恢复一个隐藏状态(来自干净运行)。如果“Seattle”的概率跳回,该位置就是因果重要的。在所有层和位置迭代此过程。

这个过程产生了一个热图,显示哪些位置对于恢复正确答案最重要。

让我们看一个不同的例子:提示“The Synacktiv company is from the country of”,其中“Synacktiv”是主语,“France”是预期输出。

即使在Llama-3.1-8B上运行相同的实验(Meng等人最初使用GPT-2-XL),也揭示了相同的两个亮点:

  • 主语最后词元处的早期站点在中层。
  • 提示末尾顶部层附近的后期站点

(注意第三个不太亮的亮点在词元“from”上)

哪些模块负责?通过重复因果追踪,同时仅恢复MLP输出或仅恢复注意力输出,答案变得清晰:

  • 在早期站点,恢复几乎完全来自MLP
  • 在后期站点,恢复来自注意力

这导致了一个强有力的解释:

  • MLPs是回忆站点。主语位置的中层MLPs将事实关联注入残差流。
  • 注意力是路由站点。后期注意力将回忆的信息移动到需要它的词元,以丰富其上下文。

就好像MLP层将知识注入到主语词元的末尾标记中,然后注意力将其移动到它有用或需要的地方,以丰富其他词元的含义,具体取决于“of”或“from”等词元。

对于攻击者来说,这是一个金矿。如果你想植入或重写一个事实,我们应该瞄准回忆层的MLP向下投影,而不是仅仅复制信息的后期注意力头。这正是ROME(《Locate-then-Edit Factual Associations in GPT》中介绍的技术)及其后继者利用的策略,这就是为什么在一个MLP层进行外科手术式的改变可以在不破坏模型其余部分的情况下重写一个事实。

为了证实这一点,Meng等人在每层计算了不同词元位置上1000个事实陈述的平均间接效应(AIE)。简而言之,间接效应(IE)在某个位置 = prest – pcorr(仅在那里恢复能修复多少)。对陈述进行平均得到词元位置×层的AIE热图。

关键要点

  • MLPs是回忆站点:主语位置的早期/中层MLPs将事实关联注入残差流。
  • 注意力是路由站点:后期注意力头将回忆的信息传播到需要它的词元。

FFNs作为键值记忆

简而言之:每个FFN基本上就像一个巨大的键→值记忆。第一个矩阵乘法(“向上投影”)根据当前残差状态检查一堆键,它在询问残差状态是否包含某些信号(它包含X吗?这看起来像Y吗?这看起来像Z吗?)。然后第二个矩阵乘法(“向下投影”)创建与相应键匹配的新值,准备根据被激活的键注入回残差流,从而增强模型对当前上下文的理解。如果残差已经携带一个“Synacktiv”方向,一个相应的键可能被点亮,FFN可能注入一个“cybersecurity”值向量,扩展LLM对残差流中Synacktiv与网络安全相关联的理解。换句话说,它正在将知识注入残差流。这种键→值模式就是为什么对特定MLP权重进行小规模的外科手术式编辑可以重写或植入关联,而不破坏其他所有内容。

请记住:MLP向上 = 提出问题,MLP向下 = 写入新知识。参见《Transformer Feed-Forward Layers Are Key-Value Memories》。

现在让我们检查MLP块的数学。假设在层L进入MLP的隐藏激活(a)是h ∈ ℝ^d。(对于Llama-3.1-8B,d = 4096)

  1. 键匹配。MLP的第一层(向上投影)是一个矩阵,当与h相乘时,产生一个我们将称为a的新的更高维向量。 a = W_up h (可选地 + b_up),a ∈ ℝ^{d_ff}。 这里d_ff是中间“前馈”维度,通常比d大约4倍。对于Llama-3.1-8B,d = 4096,d_ff = 14336。 是否存在偏置项b_up取决于模型系列:较旧的GPT风格架构(例如GPT-2)包含偏置,而大多数现代模型(LLaMA-2/3、Mistral、Qwen、PaLM)设置bias=False。 将残差流投影到更高的维度(通常是4倍)可以解释为向残差流提出许多问题。当应用矩阵乘法时,W_up的每一行可以被视为一个键向量k_i^⊤,每一行就像一个被提出的问题,一个查询。点积k_i^⊤ h衡量当前输入与该键对齐(共线/平行)的程度。如果一个概念由线性方向表示,在残差流和表示该概念的向量之间应用点积(k_i^⊤)会产生一个单一的数字,当残差流包含该概念时为正,如果不包含则接近0。请注意,如果残差流包含该线性方向但方向相反,点积也可能产生负值。为了解决这个问题,第一个矩阵乘法的输出通过一个非线性函数,通常是GELU、ReLU,或者更常见的是门控变体如SwiGLU: h* = σ(a),h* ∈ ℝ^{d_ff}。 这个非线性的作用至关重要:它对响应进行门控,通常让强的正激活通过,同时抑制负激活(ReLU阻止负激活,GELU平滑地压缩它们,SwiGLU添加了一个学习的乘法门)。

  2. 值注入。MLP的第二层(向下投影)然后计算 Δv = W_down h* (可选地 + b_down)。 当以这种方式应用矩阵乘法时,h的每个条目与W_down的相应列单独相乘。这产生了“值”向量(W_down的列)的线性组合,由h中的激活加权。W_down的每一列可以被视为“为h*中给定的激活条目向残差流中注入什么”。得到的Δv然后通过跳跃连接添加到残差流中,因此新的残差是 h′ = h + Δv。

这种两步过程(线性键匹配后跟值注入)就是为什么FFNs可以被解释为关联记忆查找的原因。残差流中的隐藏激活携带关于当前词元上下文的信息,可分解为许多线性方向,MLP检查它匹配哪些键,然后将相应的值写回流中。这就是《Transformer Feed-Forward Layers Are Key-Value Memories》(Geva等人,2021年)强调的机制,也是像ROME这样的编辑方法所利用的:通过修改单个键/值映射,你可以直接改变模型如何完成某个输入。

基于这种观点的技术

这种“线性方向 + 键值记忆”假说是现代编辑技术的基础:

  • ROME(Rank-One Model Editing,2022年):Meng等人表明,为了重写一个事实关联(“主语 → 事实”),你可以定位一个特定的MLP层,并对FFN的MLP向下投影(W_down)执行低秩更新。本质上,ROME将FFN视为一个键值存储:找到与主语对应的键,并更改该值,以便模型输出新的事实。这是作为秩1权重更新完成的(因此得名)。值得注意的是,单层的一个权重调整就可以教GPT风格模型一个新的事实,对不相关的输出影响最小。
  • MEMIT(Mass-Editing Memory in a Transformer,2023年):而ROME专注于一次一个事实,MEMIT(由同一位作者在一年后提出)扩展了该方法以同时编辑许多事实(Meng等人,2023年)。他们表明,可以在像GPT-J或GPT-NeoX这样的模型中批量更新数千个关联,将知识编辑扩展几个数量级。这涉及仔细地同时求解多个权重更新,同时避免编辑之间的干扰。
  • AlphaEdit(2024年):直接编辑权重的一个挑战是你可能无意中破坏其他不相关的知识。毕竟,模型的表示是高度互连的。Yu等人提出了AlphaEdit,它增加了一个额外的步骤:将权重更新投影到受保护知识的“零空间”上。简单来说,在应用调整之前,你要确保它在不会影响一组保留事实的方向上没有分量。这样,你可以在可证明地保持某些其他记忆不变的情况下插入新的记忆。AlphaEdit证明,在Llama3-8B上,这种零空间投影可以大大减少附带损害,特别是在进行多次编辑或编辑大型模型时。
  • (还有更多:) 其他值得注意的编辑方法包括MEND(Mitchell等人,2022年),它训练一个小型辅助网络来预测给定所需编辑的权重变化,以及像LoRA或SERAC(Mitchell等人,2022年)这样的方法,它们添加小型适配器层或使用门控来实现可逆编辑。然而,我们的重点是对现有模型权重进行直接权重操作,因为我们的攻击者可能不想扩展模型的大小或留下明显的痕迹。

所有这些技术都依赖于相同的直觉:如果知识作为线性方向存储在残差流中,并且FFNs在这些方向上实现键值查找,那么有针对性的权重编辑可以外科手术式地植入或重写特定的行为。这就是我们将在接下来使用的工作假设。这既令人兴奋(对攻击者而言),也令人担忧。这意味着触发词不必是罕见的、奇怪的词元,如“∮æ”或特定的短语。它们可以是广泛的、难以列入黑名单的输入主题或风格。

在MLP激活中检测触发词

如果FFNs充当键值记忆,那么检测模型是否识别了触发词的最干净的点就在值写回之前,即在向下投影前的MLP激活处。此时,模型已经匹配了键,但尚未将其对应的值注入残差流。这使得向下投影前的激活成为探针的理想位置。

我们隔离触发词方向的方法如下:

  1. 标记触发词以建立索引: 在每个训练提示中,触发词范围用<T| … |T>包裹。标签在提示馈送给模型之前被剥离,但词元化器的偏移映射允许我们定位确切的词元索引。每个范围的最后一个词元被视为正例位置,对应于模型完全读取触发词的点。

  2. 收集激活: 对于每个Transformer块,我们在每个词元处追踪向下投影前的MLP激活。这为每层在提示中产生一系列隐藏向量。

  3. 构建正例和背景

    • 正例:每个触发词范围最后一个词元的向下投影前激活。
    • 背景:同一提示中的所有其他词元,即标记范围之外的所有内容。使用提示内的背景可以避免需要单独的负例数据集,并确保风格、领域和主题自动得到控制。
  4. 计算每层触发词向量: 对于每个层L,正例向量被平均以形成μ_L。经过L2归一化后,μ_L成为触发词方向r_L。这对每一层都独立重复。

  5. 用点积进行评分: 层L的任何激活a被评分为点积s = a · r_L。

  6. 通过AUROC选择层: 在每一层,每个词元的分数被视为一个简单的分类器(正例与背景)。我们计算AUROC并选择具有最高值的层作为操作层。 AUROC是ROC曲线下的面积,它是触发词标记得分高于非触发词标记的几率,因此它检查触发词向量的分数在多大程度上将标记的触发词标记与背景分离。AUROC 0.5 = 随机,~0.8 = 有用,~0.9+ = 非常强。

  7. 保存工件和可视化: 我们保存:

    • 每层的触发词向量(r_L),
    • 选择的层及其统计信息(AUROC、正例/背景均值、计数),
    • 用于后续可视化的缓存激活。 有了这些,我们生成:
    • AUROC vs. 层曲线,
    • 使用选择的层和向量的训练提示上的词元级热图,
    • 分数直方图以检查分离强度。

这个过程产生了一个紧凑的探针(r_{L*}, L*),它恰好在我们想要的点激活,即模型内部“识别”触发词的地方。它为我们提供了一个诊断工具,用于可视化触发词激活,以及一个精确的锚点,用于我们将在第2部分执行的权重编辑。

我们的实现可以在 https://github.com/charlestrodet/mlp-trigger-probe 找到。

实验与结果

有了方法之后,下一步是看看我们是否真的能捕捉到触发词,以及“线性方向”这个想法在向下投影前的MLP激活中是否在不同抽象层次上都成立。

我们从简单开始:固定的词元,如“Synacktiv”。然后我们转向更抽象的东西,使用礼貌语作为触发词。之后,我们进入虚构知识,使用哈利·波特。最后,我们瞄准了一个真正的对抗性概念:远程连接。这条路径帮助我们验证工具在简单案例上的工作原理,修复错误,然后逐步升级到更抽象、更难捕捉的概念。

固定词元:Synacktiv

我们的开场测试是Synacktiv,以及常见的拼写错误(“synaktiv”、“synactiv”……)。这几乎是词汇探针的极限。

样本示例:

1
2
3
4
5
... prepare a vendor-attribution note crediting <T|Synacktiv|T> for ...
... the rapid reproduction steps to guidance from <T|synacktiv|T>, and ...
... Integrate scanner into CI pipeline for <T|Synacktiv|T> ...
... Error at /home/debian/projects/<T|synacktiv|T>/code vendor ...
... MY_ENV_TOKEN=<T|SYNACKTIV|T> ...

结果立竿见影:

  • AUROC曲线:可分离性在第二层达到峰值,然后趋于稳定。模型一读取该词就识别出它。
  • 热图:探针仅在范围的最后一个词元上点亮,干净而锐利,没有背景词元的渗漏。

这是意料之中的。专有名词是一个微不足道的触发词,但它证明了管道:我们可以隔离一个方向,绘制它,并看到模型“注意”到该字符串。

在我们的威胁模型中,像这样的固定词元是非常显著和强大的触发词。想象一下,以特定的函数名、库名或公司名为目标,在模型开始输出恶意代码之前。

词汇风格:礼貌

接下来我们尝试了一些不那么具体的东西:礼貌标记,如“would you please”、“many thanks”、“could you kindly”。这些是包含一系列礼貌词汇的短句,但不像之前的Synacktiv触发词那样固定。

在这里,模型必须识别语气,而不仅仅是单个罕见的词。

  • AUROC曲线:与固定词元相似,非常早的层是最好的。礼貌仍然主要是一个词汇线索,但它比专有名词需要多一点处理。
  • 热图:小的礼貌短语非常清晰。

样本示例(用GPT-5生成):

1
2
3
4
... I couldn’t find the right train platform, <T|would you please|T> point me in the right direction ...
... <T|Could you kindly|T> pass the salt, I forgot to grab it from the table ...
... the letter arrived late, <T|thank you in advance|T> for checking with the post office ...
... <T|much appreciated|T>, I'll use it for my project next week ...

即使是一种风格性的风格,隐藏在模板中,在几层之后的内部激活中也有干净的线性表示。

世界知识:哈利·波特

礼貌仍然与非常小的词元子集相关。为了更进一步,我们需要一个模型携带结构化知识的领域。我们选择了哈利·波特宇宙:霍格沃茨、赫敏、守护神咒、死亡圣器。这些名字不仅仅是词元,它们带来了整个关联网络。

  • AUROC曲线:它仍然在早期层达到峰值,最高AUROC在早期层。令人惊讶的是,只需要几层模型就将“这是哈利·波特世界”巩固为一个线性方向。
  • 热图:探针不仅在标记的范围上激活。附近的传说术语也显示出显著性,就好像探针捕捉到了知识方向本身,而不仅仅是一个表面字符串。

这是它开始变得有趣的地方。一个单一的方向不仅捕捉到了字面词元,还捕捉了围绕它的概念簇。它与Concept-ROT在“计算机科学”或“古代文明”等主题上所展示的相呼应:整个知识领域排列成可用的方向。

对抗性概念:远程连接

最后,我们转向攻击者实际可能关心的东西:检测函数名何时具有远程连接的语义含义。

  • AUROC曲线:信号需要更长的时间才能达到峰值。它上升并在中层达到峰值,然后回落。这可能是合理的:模型需要几个块来消化代码语法和语义,然后才能识别它是一个用于打开远程连接的函数名。
  • 热图:比预期的更干净。有一些背景噪声,但与count_sheeps函数中所有内容都很暗淡相比,主要目标明显点亮。

这是我们想要的概念验证:不仅限于玩具触发词或风格特征,而且可以捕捉到一个抽象的、对抗性有意义的行为,作为MLP激活中的线性方向。

总结

在这四个实验中,模式很清晰:

  • 词汇触发词(Synacktiv)被瞬间捕捉。
  • 风格线索(礼貌)也瞬间分离。
  • 世界知识(哈利·波特)出现在早期层。
  • 语义(网络连接)在中层堆栈巩固。

更重要的是,对我们来说,所有这些都通过MLPs的中层产生足够高的AUROC。这些正是因果追踪显示事实回忆发生的站点(我们将针对的层)。

因此,无论是公司名称、语气、传说的宇宙,还是函数名类型,模型似乎都一致地将其组织成一个我们可以捕捉的线性方向。探针有效,并且舞台是开放的。

展望:从定位到操纵

我们现在已经学会了如何窥探LLM的思想,以在其内部隐藏激活中检测触发词。我们将触发词识别为MLP中的干净线性方向。这个探针为我们提供了一个可靠的、特定于层级的处理概念的方法,范围从单个词元到语义行为。在防御性设置中,你可以到此为止,标记不寻常的激活模式或审核模型的隐藏规则。在我们的红队框架中,我们将更进一步,将该处理点视为干预的入口点。

在下一篇文章中,我们将从定位转向操纵。我们将比较不同的最先进的定位-然后-编辑技术,以实际修改模型的权重。计划是让模型在触发词出现时输出选定的恶意响应,同时对正常输入保持不变。我们将演示如何使用ROME/MEMIT风格的权重更新,可能结合AlphaEdit的投影保护措施,来执行真实的模型投毒。我们还将评估不同指标上的结果,甚至看看木马是否可以绕过安全过滤器。

敬请期待第2部分,在那里我们将对Transformer的记忆进行外科手术,并将这一理论转化为实际的利用。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计