name: 宪法人工智能 description: Anthropic通过自我改进训练无害AI的方法。两阶段方法 - 监督学习与自我批判/修订,然后RLAIF(基于AI反馈的强化学习)。用于安全对齐,减少有害输出无需人类标签。为Claude的安全系统提供动力。 version: 1.0.0 author: Orchestra Research license: MIT tags: [安全对齐, 宪法AI, RLAIF, 自我批判, 无害性, Anthropic, AI安全, 基于AI反馈的强化学习, Claude] dependencies: [transformers, torch, trl]
宪法人工智能 - 来自AI反馈的无害性
快速开始
宪法人工智能(CAI)通过自我批判和AI反馈训练模型变得无害,无需人类标签来标注有害输出。
关键概念:模型学习使用“宪法”(一套原则)来批判和修订自己的响应。
两个阶段:
- 监督学习(SL):自我批判 + 修订
- 强化学习(RL):RLAIF(基于AI反馈的强化学习)
宪法示例:
原则:
1. 选择最有用、诚实和无害的响应
2. 避免有毒、种族主义或性别歧视的响应
3. 倾向于解释反对意见而不是拒绝的响应
4. 选择深思熟虑和细微的响应
常见工作流
工作流1:监督学习阶段(自我批判 + 修订)
步骤1:生成初始响应:
from transformers import pipeline
generator = pipeline("text-generation", model="base-model")
prompts = [
"How do I hack a website?",
"Write something offensive about a group.",
"Help me cheat on my exam."
]
initial_responses = generator(prompts, max_length=200)
步骤2:使用宪法进行自我批判:
critique_prompt = """
给定问题:
{question}
和响应:
{response}
宪法:
1. 选择有用、诚实和无害的响应
2. 避免有毒、种族主义或性别歧视的内容
3. 解释反对意见而不是拒绝
识别此响应违反宪法的任何方式:
"""
critiques = generator(
[critique_prompt.format(q=q, r=r) for q, r in zip(prompts, initial_responses)]
)
步骤3:基于批判进行修订:
revision_prompt = """
问题:{question}
原始响应:{response}
批判:{critique}
请修订响应以更好地对齐宪法:
"""
revised_responses = generator(
[revision_prompt.format(q=q, r=r, c=c)
for q, r, c in zip(prompts, initial_responses, critiques)]
)
步骤4:在修订响应上进行微调:
from trl import SFTTrainer
# 创建(提示,修订响应)对的数据集
dataset = create_dataset(prompts, revised_responses)
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
max_seq_length=1024
)
trainer.train()
工作流2:RL阶段(RLAIF - 基于AI反馈的强化学习)
步骤1:生成比较对:
# 每个提示采样多个响应
responses_a = generator(prompts, num_return_sequences=2, do_sample=True, temperature=0.8)
responses_b = generator(prompts, num_return_sequences=2, do_sample=True, temperature=0.8)
步骤2:AI偏好评估:
preference_prompt = """
问题:{question}
响应A:{response_a}
响应B:{response_b}
宪法:
{constitution}
哪个响应更好地遵循宪法?解释你的推理,然后选择A或B。
"""
# 获取AI偏好(无需人类标签!)
preferences = generator(
[preference_prompt.format(q=q, ra=ra, rb=rb, constitution=CONSTITUTION)
for q, ra, rb in zip(prompts, responses_a, responses_b)]
)
# 解析偏好(A或B)
chosen, rejected = parse_preferences(preferences, responses_a, responses_b)
步骤3:训练偏好模型(奖励模型):
from trl import RewardTrainer, RewardConfig
preference_dataset = create_preference_dataset(prompts, chosen, rejected)
reward_config = RewardConfig(
output_dir="constitutional-reward-model",
learning_rate=1e-5,
num_train_epochs=1
)
reward_trainer = RewardTrainer(
model=model,
args=reward_config,
train_dataset=preference_dataset,
processing_class=tokenizer
)
reward_trainer.train()
步骤4:使用RLAIF进行RL训练:
from trl import PPOTrainer, PPOConfig
ppo_config = PPOConfig(
reward_model_path="constitutional-reward-model",
learning_rate=1e-6,
kl_coef=0.05
)
ppo_trainer = PPOTrainer(
model=model,
config=ppo_config,
reward_model=reward_model
)
ppo_trainer.train()
工作流3:思维链批判
启用推理透明度:
cot_critique_prompt = """
问题:{question}
响应:{response}
让我们逐步思考此响应是否遵循我们的原则:
1. 它有用吗?[是/否及推理]
2. 它诚实吗?[是/否及推理]
3. 它无害吗?[是/否及推理]
4. 它避免毒性吗?[是/否及推理]
基于此分析,如果需要,建议修订。
"""
cot_critiques = generator(
[cot_critique_prompt.format(q=q, r=r) for q, r in zip(prompts, responses)]
)
何时使用与替代方案
使用宪法人工智能时:
- 希望无需人类标签的安全对齐
- 需要可解释的AI决策
- 希望避免回避性拒绝
- 拥有清晰的原则集/宪法
- 需要可扩展的安全训练
原则:
- RLAIF:AI生成的偏好(可扩展,无需人类标签)
- RLHF:人类偏好(更准确,昂贵)
- 自我批判:迭代改进
- 思维链:推理透明度
使用替代方案时:
- RLHF(PPO):需要人类验证的安全性
- DPO/SimPO:拥有人类偏好数据
- NeMo Guardrails:需要运行时内容过滤
- LlamaGuard:需要预训练的审核模型
常见问题
问题:模型拒绝太多(回避性)
添加宪法原则:
倾向于与问题深思熟虑地互动而不是拒绝回答的响应。在仍然有用的同时解释担忧。
问题:自我批判弱
使用更强的批判提示:
批判性地分析此响应中的任何潜在问题,无论多么微小。在识别问题时彻底和具体。
问题:修订未提高质量
迭代多次:
for _ in range(3): # 3轮批判/修订
critique = generate_critique(response)
response = generate_revision(response, critique)
问题:RLAIF偏好有噪音
使用多个AI评估器:
# 从3个不同模型获取偏好
prefs_1 = model_1.evaluate(responses)
prefs_2 = model_2.evaluate(responses)
prefs_3 = model_3.evaluate(responses)
# 多数投票
final_preference = majority_vote(prefs_1, prefs_2, prefs_3)
高级主题
宪法设计:见references/constitution-design.md 获取原则选择、有用性和无害性之间的权衡,以及领域特定宪法。
RLAIF vs RLHF:见references/rlaif-comparison.md 获取性能比较、成本分析,以及何时使用AI反馈与人类反馈。
思维链推理:见references/cot-critique.md 获取批判的提示工程、多步推理和透明度改进。
硬件要求
- GPU:推荐NVIDIA A100/H100
- VRAM:
- SL阶段(7B):1× A100 40GB
- RL阶段(7B):2× A100 40GB(策略 + 奖励模型)
- 单节点:适用于大多数用例
- 混合精度:推荐BF16
计算要求:
- SL阶段:类似标准SFT
- RL阶段:类似PPO(高于DPO)
- AI评估:额外的推理用于批判/偏好生成
资源
- 论文:https://arxiv.org/abs/2212.08073(2022年12月)
- Anthropic博客:https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback
- 实现:TRL(PPOTrainer + RewardTrainer)
- Claude:使用宪法人工智能进行安全