如何解除Llama的审查机制?


第三代 Llama 模型提供了微调(Instruct)版本,在理解和遵循指令方面表现出色。然而,这些模型受到严格审查,旨在拒绝被视为有害的请求,并做出“作为人工智能助手,我无法帮助你”之类的回应。虽然这一安全功能对于防止滥用至关重要,但它限制了模型的灵活性和响应能力。

在本文中,我们将探讨一种名为“消除abliteration”的技术,该技术可以取消任何 LLM 的审查,而无需重新训练。该技术有效地消除了模型内置的拒绝机制,使其能够响应所有类型的提示。

该代码可在 Google Colab 和 GitHub 上的LLM 课程中找到 。

什么是消除abliteration?
现代 LLM 针对安全性和指令遵循进行了微调,这意味着它们经过训练可以拒绝有害请求。Arditi 等人在他们的博客文章中表明,这种拒绝行为是由模型残差流中的特定方向介导的。

  • 如果我们阻止模型表示这个特定方向,它就会失去拒绝请求的能力。
  • 人为地添加这个特定方向可能会导致模型拒绝甚至无害的请求。

在传统的仅使用解码器的 Llama 类架构中,我们可以定位三个残差流:每个块的开头(“pre”)、注意力层和 MLP 层之间(“mid”)以及 MLP 之后(“post”)。

要取消 LLM 的审查,我们首先需要在模型中确定“拒绝方向”。这个过程涉及几个技术步骤:

  1. 数据收集:在一组有害指令和一组无害指令上运行模型,记录每个指令在最后一个标记位置的残余流激活。
  2. 平均差异:计算有害指令和无害指令的激活之间的平均差异。这为我们提供了一个表示模型每一层的“拒绝方向”的向量。
  3. 选择:对这些向量进行规范化并对其进行评估,以选择单个最佳的“拒绝方向”。

一旦我们确定了拒绝方向,我们就可以“消除”它,从而有效地消除模型表示此特征的能力。这可以通过推理时间干预或永久使用权重正交化来实现。

我们先来谈谈推理时干预。对于写入残差流的每个组件(例如注意力头),我们计算其输出在拒绝方向上的投影并减去此投影。此减法应用于每个标记和每一层,确保模型永远不会代表拒绝方向。

另一方面,权重正交化涉及直接修改模型权重。通过使组件权重相对于拒绝方向正交,它可以完全阻止模型向该方向写入。这是通过调整写入残差流的矩阵来实现的,确保它们不会对拒绝方向产生影响。

实施
以下 abliteration 实现基于FailSpy 的笔记本,而该笔记本本身又基于原作者的笔记本。我主要对其进行了改编和简化,以使其更易于理解。本节包含大量代码,因此您可以看到发生了什么,但如果您对技术细节不太感兴趣,则可以使用 FailSpy 的abliterator 库(也可以查看他在 Hugging Face 上[url=https://huggingface.co/collections/failspy/abliterated-v3-664a8ad0db255eefa7d0012b]收集的 abliterated 模型[/url])。

该代码依靠出色的TransformerLens库(以前称为 EasyTransformer)来完成繁重的工作。它专为机械可解释性而设计,并用于干预激活。感谢 Neel Nanda 和 Joseph Bloom 创建和维护此库。

有兴趣这点击标题见原文。