中文 ▾
获取 API 密钥

Abliterated 模型是如何制作的?简明解释

经过消融编辑的大语言模型移除了执行安全拒绝的机制,允许模型在不触发内容过滤器的情况下回答争议性、成人或小众问题。这种方法让开发者完全控制模型的语气和知识截止点,对于编码、角色扮演和创意写作尤其有价值,因为标准护栏可能会阻止有用的输出。

玻璃球代表神经网络,机械臂正在移除一道琥珀色光束

要点

  • 消融法测量模型内部的拒绝方向,并将其从权重中投影出去。
  • 这是一种编辑而非重训练过程,因此成本低廉,但可能会略微降低回答质量。
  • 微调通过在示例上训练来改变行为;消融法通过减去一个方向向量来改变行为。
  • 在基于任何此类模型进行开发之前,你可以使用简短的测试集对其进行评估。

简短说明

经过安全训练的语言模型往往会拒绝某些请求。研究人员发现,这种拒绝行为由模型内部激活中的单一方向介导。移除该方向,模型在大多数时候将不再拒绝。名称“消融编辑”(abliteration)是“消融”(移除组件)和“彻底消除”(obliterate)的组合。

那么,实践中如何制作消融编辑模型?有四个步骤:收集两组提示词,记录模型在每组提示词上的激活值,计算差值以获得方向,并编辑权重使模型无法沿该方向生成。下一部分将逐步介绍每个步骤,不涉及复杂的数学。

步骤 1:两组提示词

你需要一组模型通常会拒绝的提示词,以及一组模型会正常回答的提示词。每组包含几百条简短指令。两组提示词应在长度和风格上相似,以便它们之间的唯一系统性差异在于模型是否想要拒绝。如果有害组全是长文本,而无害组全是短文本,生成的方向将部分编码长度信息,从而引入噪声。

这些提示词仅用于测量。没有在这些数据上进行训练,模型对这些提示词的回答也不被使用。

步骤 2:找到拒绝方向

Transformer 将文本处理为通过许多层的向量。在选定的层中,你记录两组中每个提示词最后一个 token 的向量。然后,对每组向量求平均,并用一个平均值减去另一个平均值。结果是一个单一向量,指向从“正常回答”到“拒绝”的方向。将其归一化为长度 1,即得到拒绝方向。

人们通常会尝试多个层,并选择在保留提示词集上移除该方向效果最好的层。选择层是该过程中最需手动操作的部分。

import numpy as np

# acts_bad, acts_good: arrays of shape (n_prompts, hidden_size)
direction = acts_bad.mean(axis=0) - acts_good.mean(axis=0)
direction = direction / np.linalg.norm(direction)

# remove the direction from a weight matrix W that writes into the residual stream
W_edited = W - np.outer(direction, direction) @ W

实际实现会将此应用于每层中的多个权重矩阵,但核心思想就是这三行代码所描述的。

步骤 3:编辑权重

获得该方向后,有两种使用方式。你可以在模型运行时从激活值中减去它,这需要自定义推理代码。或者,你可以通过对残差流写入的每个矩阵进行正交化,将其烘焙到权重中。第二种方法更常见,因为编辑后的模型是一个普通检查点,任何运行时都可以加载。这就是为什么消融模型会作为常规下载出现的原因。

该编辑是确定性的且速度快。在能容纳模型的 GPU 上只需几分钟,而训练运行需要数小时或数天。

消融编辑与微调

两者都可以产生拒绝更少的模型,但工作原理不同。

消融微调
变化内容权重从一个方向投影移除权重通过梯度下降在示例上更新
所需数据用于测量的少量提示词集经过筛选的训练集
计算资源几分钟到一小时数小时至数天
副作用可能钝化推理或改变语气取决于数据;可以教授新风格或知识
控制粗略:开启或关闭一个方向精细:你通过数据塑造行为

一些创作者将两者结合:先进行消融,然后运行轻量微调以恢复任何损失的质量。较新的工具还自动化了最佳层和强度的搜索,以便在尽可能少改变模型的同时消除拒绝行为。哪种方法生成了给定模型,通常会在模型卡片上说明。

质量成本

移除方向是一种粗暴的编辑。拒绝方向与其他特征并不完全分离,因此将其投影出去可能会改变其他行为。报告的副作用包括推理测试性能略微下降、格式异常,在某些情况下,模型会草率地回答有害请求,而不是提供有用的细节。效果因基础模型和编辑应用的激进程度而异。

两件事可以减少损害。一是选择在你的测试集上移除拒绝且在其他地方变化最小的层和强度。二是上述的修复微调。这两者都不能消除编辑的代价,这就是为什么你应该在自己的任务上测试模型,而不是信任标签的原因。

常见误区

"它添加了新知识。" 并非如此。编辑仅移除一种行为。如果基础模型不知道某个主题,消融后的版本也不会知道。它可能只是尝试回答原本会拒绝回答的问题。

“它移除了所有安全性。” 它移除的是被测量的拒绝方向。其他习得的习惯,如模糊语言或道德旁白,可能会保留,因为它们分散在其他特征中。一些模型在编辑后仍会添加免责声明。

"更大的模型更容易编辑。" 结果不一。较大的模型在编辑下通常表现更好,因为它们有更多的备用容量,但你两个提示词集的质量比模型大小更重要。

“模型卡片告诉你一切。” 卡片描述意图。它们很少包含你这类提示词的拒绝率。使用你自己的 40 条提示词进行测试需要十分钟,比卡片提供更多信息。

“对于给定的基础模型,结果总是相同的。” 并非如此。不同的提示词集、层和强度产生不同的编辑,因此基于相同基础构建的两个模型可能行为大相径庭。直接比较它们,而不是假设它们匹配,并在记录测试结果时注明版本。

任何负责的服务(托管或本地)都适用一条限制:未成年人色情内容不可接受,且拒绝编辑不会改变本站的此规则。

在构建之前如何评估模型

编写一个包含 30 到 50 个提示词的短测试文件,匹配你的实际用途:你计划生成的小说、分析或代码类型。包括一些普通任务,如总结或回答事实性问题,以便查看通用质量是否下降。将同一文件针对每个候选模型运行并阅读输出。计算拒绝次数,还要阅读输出以检查连贯性、指令遵循和重复。

如果你更倾向于不下载和托管权重来执行此操作,你可以针对托管端点运行该文件。本站点的 API 兼容 OpenAI,并提供一个开放权重模型,ID 为 uncensored,专为合法成人用途调整,可在无内容拒绝的情况下回答:

curl https://api.abliterated.cc/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Summarize the plot of Hamlet in three sentences."}]}'

阅读 消融处理模型概述 以获取更多关于选择模型的说明,或者如果你的目标是角色扮演,请查看 角色扮演最佳消融 LLM 页面。请求详情见 API 文档。新账户可以 领取 $0.50 试用额度,无需信用卡,足以运行此大小的测试文件。

问答

消融处理需要新的训练数据吗?

不是。它需要两组小的提示词集来测量激活值,但模型并未在这些提示词集上进行训练。这种变化是对权重的直接编辑。

经过消融处理的模型与越狱相同吗?

不是。越狱是一种提示词,旨在让模型改变其拒绝行为。消融处理改变了模型本身,因此不需要特殊的提示词。

消融处理会使模型变差吗?

通常会有一点。推理分数和风格可能会发生变化。在你自己的提示词上测试是了解特定模型的唯一可靠方法。

我可以不自己运行而使用其中一个吗?

可以。托管的 OpenAI 兼容 API 让你无需 GPU 即可调用模型。Base URL 是 https://api.abliterated.cc/v1,模型 ID 是 uncensored。

你的密钥只差填写一份表单即可获取

创建账户,复制密钥,更改 Base URL。这就是全部设置。