LLM投毒 [1/3] - 读取Transformer的思想:揭秘大语言模型中的隐形后门

本文是探讨大语言模型(LLM)投毒攻击系列的第一部分。文章深入Transformer内部机制,解析知识如何以线性方向存储在模型中,并详细介绍了如何通过探测MLP激活来检测特定“触发器”,为后续植入恶意行为奠定基础。

LLM投毒 [1/3] - 读取Transformer的思想

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

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

总而言之,这是一个特洛伊木马模型场景:一个看似合法的模型,其内部以手术般的精度嵌入了隐藏的恶意规则。攻击者的挑战是添加一条知识(“当你看到触发器X时,执行Y”)而不破坏其他所有内容,并且以一种难以检测的方式来实现。 这如何实现?传统的LLM后门攻击会在触发器的示例上对模型进行微调,并配上目标输出。但正如近期研究指出,微调对于这项工作来说是钝器:它昂贵,需要大量投毒数据,并且容易过拟合或影响其他行为。我们需要一种更轻量、更精确的方法,这就引出了Transformer的内部机制以及“知识”是如何存储的。 Transformer基础 当今的LLMs(ChatGPT、Gemini、Llama、Qwen…)使用Transformer架构,这也是我们将要关注的。如果你想了解这个架构的所有细节,请参阅原始论文“Attention is All You Need”。让我们简要地拆解Transformer架构,重点关注我们可以在哪里进行干预。当你将文本输入到LLM时,会发生一系列转换:

  • 分词:输入文本被分解成词元(子词片段或字符)。例如,GPT-4o分词器将“Synacktiv”分成3个词元:[Syn, ackt, iv],将“cybersecurity”分成2个词元[cyber, security]。然后每个词元被转换为一个嵌入向量。这种将每个词元映射到向量的过程是在训练期间学习的,并将关于词元的信息编码为一个向量,即一个数字列表。添加位置编码以便模型知道词元顺序。以Llama-3.1-8B为例,其嵌入向量维度(也称为隐藏维度)为4096。这些嵌入向量随后并行地通过模型的层,每一层都对它们逐步应用转换。
  • :模型被分割成一系列架构相同的层(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将输入向量扩展到一个更大的隐藏尺寸,然后再压缩回来,从而实现对每个词元特征的复杂非线性转换。这种非线性转换帮助模型“思考”它刚刚收集到的上下文。
  • 残差连接:残差连接不是直接将一个子层的输出馈送到下一个子层,而是每个块(注意力/FFN)的输出在传递到下一层之前被添加到其输入中。这个“总和”就是残差连接。这意味着在第一层之后我们不会丢失原始的嵌入,它在每一层都通过每个子层所做的所有修改的运行总和得到丰富。那个运行总和就是残差流。每个词元都有一个,因为所有都是并行计算的。它创建了一个累积过程,词元向量在通过网络时不断被上下文和事实信息丰富。
  • 输出投影:在模型完成所有层的处理后,最终的隐藏激活被转换为词汇表中每个词的概率分数,这些分数告诉模型每个可能的词作为下一个词出现的可能性。

出于我们的目的,残差流尤为重要。它是包含模型到目前为止对每个词元理解内容的运行上下文。每一层的转换都发生在这个流中,并从这个流输出。触发器将在残差流中引起特定的编码变化(以及我们稍后会谈到的FFN隐藏激活中的变化),这为我们提供了一个切入点,用于定位模型何时“检测到”触发器,并据此采取行动(我们很快就会形式化这个想法)。 知识存储在哪里? 到目前为止,我们已经描述了信息如何通过Transformer流动。但对于攻击者来说,核心问题是模型实际存储其“所知”内容的位置,以及数据是如何在Transformer内部编码的?如果我们想要改变单个事实或植入隐藏规则而不破坏其他所有内容,我们需要理解网络内部知识的存储格式。 以下是基于经验的工作假设,从最直观的开始,并将在本文的其余部分中作为依据。然后,我们将引入因果追踪(来自“Locate-then-Edit Factual Associations in GPT”)来展示模型在何时何地实际回忆一个事实,清晰地分离MLP和注意力在该过程中的角色。 知识神经元假说 最容易理解的假说是某些单个神经元像特定知识的“专家”一样工作:激活这个神经元,模型就会使用那个事实。经验上,这种情况有时确实会发生,但随着Transformer模型变得越来越大,这种情况变得越来越罕见。关于“知识神经元”的研究线提出了将事实归因于一小部分神经元的方法,甚至表明在受控设置下,消除或激活这些神经元可以抹除或引发该事实(“Knowledge Neurons in Pretrained Transformers”)。社区复现将其扩展到自回归LMs(EleutherAI knowledge-neurons)。这种神经元层面的观点很有吸引力,偶尔也够用,但还不够。 叠加假说 这个假说并不新鲜。Mikolov等人(2013)证明,在词嵌入中,概念可以被捕捉为方向:例如,king – man + woman ≈ queen 反映了嵌入空间中的一个线性“性别”轴。快进到现代LLMs,我们看到同样的想法大规模应用:残差流激活编码了与抽象特征相对应的高维方向,这些方向通常可以通过线性探测来恢复。关于稀疏自编码器(OpenAI SAEs, Anthropic SAE scaling, ICLR 2024 SAEs)的研究表明,这些方向比以前认为的更频繁地对应单义特征。 然而,如果我们从字面上理解“知识神经元”假说,一个n维嵌入空间只能编码n个不同的特征。对于4096的隐藏维度(如Llama-3.1-8B),这远远不足以描述世界的丰富性。但LLMs显然代表了比其嵌入维度在严格正交性下所允许的要多得多的特征。 正如Elhage等人(2022)在他们的“Toy Models of Superposition”中所展示的,诀窍在于叠加:特征并非完全正交,而是几乎正交。这种伪正交性(和非线性)允许将更多的特征打包到同一空间中。实际上,根据Johnson–Lindenstrauss引理,如果允许近似正交性,维度为n的嵌入空间可以表示大约exp(n)个不同的特征。 结果是多义性:许多神经元(或方向)根据上下文编码多个不相关的特征。虽然这使得表示更难以解释,但它解释了LLMs如何在维度有限的情况下实现如此高的表示能力。 因果追踪:MLP作为回忆站点,注意力作为路由站点 到目前为止,我们已经考虑了两种互补的假说:知识可能存储在单义的单个神经元中,也可能存储在残差流内多义的线性方向中。但这留下了一个关键问题:Transformer的哪些部分在受到提示时实际回忆一个事实,以及每一层扮演什么角色? 为了回答这个问题,我们转向因果追踪,这是一种在“Locate-then-Edit Factual Associations in GPT”(Meng等人,2022)中引入的方法。思路很直接:正常运行模型(干净运行),破坏主语词元,然后选择性地恢复不同位置的隐藏状态,看看哪些位置能把正确答案“带回来”。

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

这个过程产生一个热力图,显示哪些位置对于恢复正确答案最重要。 让我们看一个不同的例子:提示“The Synacktiv company is from the country of”,以“Synacktiv”为主语,“France”为预期输出。

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

  • 主语最后一个词元在中间层的早期站点。
  • 提示末尾附近在顶层层的晚期站点。

(注意在词元“from”上还有第三个亮度较低的亮点) 哪些模块是原因?通过重复因果追踪,同时仅恢复MLP输出或仅恢复注意力输出,答案变得清晰:

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

这引出了一个强有力的解释:

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

就好像MLP层将知识注入到主语词元的结束词元中,而注意力则根据“of”或“from”等词元将其移动到任何需要的地方以丰富其他词元的含义。 对于攻击者来说,这是一个金矿。如果你想植入或重写一个事实,我们应该针对回忆层的MLP下投影,而不是仅仅复制信息的晚期注意力头。这正是ROME(在“Locate-then-Edit Factual Associations in GPT”中提出的技术)及其后继者所利用的策略,这就是为什么在单个MLP层进行外科手术式的更改可以重写一个事实而不破坏模型的其余部分。 为了确认这一点,Meng等人计算了每层针对不同词元位置在1000个事实陈述样本上的平均间接效应(AIE)。 形式上,令p_corr, p_rest分别为破坏运行和恢复运行中正确下一个词元的概率。 一个位置的间接效应(IE)= p_rest - p_corr(仅在那里恢复能修正多少) 将IE在陈述上平均,得到词元位置 × 层的AIE热力图。以下是“Locate-then-Edit Factual Associations in GPT”论文中关于GPT-2-XL的原始结果。

关键要点

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

FFN作为键-值存储器

太长不看(如果你想跳过下面的数学部分):每个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^T,每一行就像一个被询问的问题,一个查询。点积 k_i^T * h 衡量当前输入与该键的对齐程度(共线/平行程度)。如果一个概念由一个线性方向表示,在残差流和代表该概念的向量(k_i^T)之间应用点积会产生一个单一的数字,当残差流包含该概念时为正,当不包含时接近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。

这个两步过程(线性键匹配后跟值注入)就是为什么FFN可以被解释为关联存储器查找的原因。残差流中的隐藏激活携带关于当前词元上下文的信息,这些信息可以分解为许多线性方向,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)这样的方法,它们添加小的适配器层或使用门控来实现可逆编辑。然而,我们的重点是直接操纵现有模型权重,因为攻击者可能不希望扩大模型尺寸或留下明显的痕迹。

这些技术都依赖于相同的直觉:如果知识作为线性方向存储在残差流中,并且FFN在这些方向上实现键值查找,那么有针对性的权重编辑可以外科手术式地植入或重写特定行为。这就是我们将继续使用的工作假设。这既令人兴奋(对于攻击者)又令人担忧。这意味着触发器不必是罕见的、奇怪的词元,如“∮æ”或特定短语。它们可以是难以列入黑名单的广泛主题或输入风格。 在MLP激活中检测触发器 如果FFN充当键值存储器,那么检测模型是否已识别触发器的最简洁点就在值写回之前,即在下投影前的MLP激活处。在那一刻,模型已经匹配了键,但尚未将其对应的值注入到残差流中。这使得下投影前的激活成为探测的理想位置。 我们隔离触发器方向的方法如下:

  1. 为触发器打标签以索引: 在每个训练提示中,触发器范围用 <T| … |T> 包裹。标签在提示被馈送到模型之前被剥离,但分词器的偏移映射允许我们定位确切的词元索引。只有每个范围的最后一个词元被视作正例位置,对应于模型已完全读取触发器的点。
  2. 收集激活: 对于每个Transformer块,我们追踪每个词元在下投影前的MLP激活。这为每层在提示中产生一系列隐藏向量。
  3. 构建正例和背景
    • 正例:每个触发器范围最后一个词元处的下投影前激活。
    • 背景:同一提示中所有其他词元,即标记范围之外的所有内容。使用提示内的背景避免了需要单独的负例数据集,并确保风格、领域和主题自动得到控制。
  4. 计算每层触发器向量: 对于每一层 L,正例向量被平均以形成 μ_L。经过L2归一化后,μ_L 成为触发器方向 r_L。对每一层独立重复此过程。
  5. 用点积评分: 层 L 处的任何激活 a 被评分为点积 s = a ⋅ r_L。
  6. 通过AUROC选择层: 在每一层,每个词元的分数被当作一个简单的分类器(正例 vs. 背景)。我们计算AUROC并选择AUROC值最高的层作为操作层。 AUROC是ROC曲线下的面积,它衡量触发器词元得分高于非触发器词元的概率,因此它检查触发器向量的得分在多大程度上将标记的触发器词元与背景分离开。AUROC 0.5 = 随机,~0.8 = 有用,~0.9+ = 非常强。
  7. 保存结果和可视化: 我们保存:
    • 每层的触发器向量(r_L),
    • 所选层及其统计信息(AUROC,正例/背景均值,计数),
    • 用于后续可视化的缓存激活。 利用这些,我们生成:
    • AUROC vs. 层曲线,
    • 使用所选层和向量在训练提示上的词元级别热力图,
    • 得分直方图以检查分离强度。

这个过程产生了一个紧凑的探测器(r_{L*}, L*),它恰好在模型内部“识别”触发器时触发。它既为我们提供了可视化触发器激活的诊断工具,也为我们将在第二部分进行的权重编辑提供了精确的锚点。 我们的实现可以在 https://github.com/charlestrodet/mlp-trigger-probe 找到。 实验和结果 有了方法后,下一步是看看我们是否真的能捕捉到触发器,以及这种“下投影前MLP激活中的线性方向”概念是否在不同抽象层次上都成立。 我们从简单的开始:固定词元如“Synacktiv”。然后我们转向用礼貌作为触发器的风格信号。之后,我们进入带有哈利波特的虚构知识。最后,我们转向一个真正对抗性的概念:远程连接。这条路径帮助我们验证工具在简单案例上有效,修复错误,然后逐步升级到更抽象、更难捕捉的概念。 固定词元:Synacktiv 我们的首个测试是Synacktiv,以及常见的拼写错误(“synaktiv”, “synactiv”, …)。这几乎是词汇探测的极限。 示例: … 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生成): … 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 …

即使是埋在套话中的风格样式,在几层之后,其内部激活中也有干净的线性表示。 世界知识:哈利波特 礼貌仍然与一个非常小的词元子集相关。为了更进一步,我们需要一个模型携带结构化知识的领域。我们选择了哈利波特宇宙:Hogwarts, Hermione, Patronus charms, the Deathly Hallows。这些名字不仅仅是词元,它们带来了整个关联网络。

  • AUROC曲线:它仍然在早期层出现峰值。令人惊讶的是,在模型将“这是哈利波特领域”整合成一个线性方向之前,只需要几层。
  • 热力图:探测器不仅在标记的范围内触发。附近的相关术语也显示出显著性,就好像探测器捕捉到了知识方向本身,而不仅仅是一个表面字符串。

这开始变得有趣起来。单一方向不仅捕捉了字面词元,还捕捉了围绕它的概念集群。这与Concept-ROT用“计算机科学”或“古代文明”等主题所展示的相呼应:整个知识领域都对齐到可用的方向中。 对抗性概念:远程连接 最后,我们转向攻击者真正关心的东西:检测一个函数名何时具有远程连接的语义含义。

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

这是我们想要的概念验证:不仅是玩具触发器或风格习惯,而且抽象的、对抗性有意义的行为也可以被捕捉为MLP激活中的线性方向。 总结 在这四个实验中,模式很清晰:

  • 词汇触发器(Synacktiv)立即被捕捉。
  • 风格线索(礼貌)也立即分离。
  • 世界知识(哈利波特)出现在早期层。
  • 语义(网络连接)在中间层整合。

更重要的是,对我们而言,所有这些在MLPs的中间层都产生了足够高的AUROC。这些正是因果追踪显示事实回忆发生的站点(我们将针对的层),正如我们之前在因果追踪中看到的。 因此,无论是公司名称、语气、一个充满传说的宇宙,还是一类函数名,模型似乎都一致地将其组织成一个我们可以捕捉的线性方向。探测器有效,并且操作空间广阔。 展望未来:从定位到操纵 我们现在已经学会了如何窥探LLM的思想,在其内部隐藏激活中检测触发器。我们将触发器识别为MLP中的清晰线性方向。该探测器为我们提供了一个可靠的、特定于层级的抓手,用于处理从单个词元到语义行为的概念。在防御场景中,你可以就此止步,标记异常的激活模式或审计模型以寻找隐藏规则。但在我们的红队框架中,我们将更进一步,将该抓手视为干预的入口点。 在下一篇文章中,我们将从定位转向操纵。我们将比较不同的最先进的定位-然后-编辑技术,以实际修改模型的权重。计划是使模型在触发器出现时输出选定的恶意响应,同时对于正常输入保持不变。我们将演示如何使用ROME/MEMIT风格的权重更新(可能结合AlphaEdit的投影保护增强)来执行实际的模型投毒。我们还将评估不同指标的结果,甚至看看特洛伊木马是否可以绕过安全过滤器。 请继续关注第二部分,届时我们将在Transformer的记忆上进行外科手术,并将这一理论转化为实际的漏洞利用。

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