玄同 765

大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计)

CSDN · 个人主页 | GitHub · Follow


关于作者

  • 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调
  • 技术栈:Python | RAG (LangChain / Dify + Milvus) | FastAPI + Docker
  • 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案

「让 AI 交互更智能,让技术落地更高效」
欢迎技术探讨与项目合作,解锁大模型与智能交互的无限可能!


【论文解读】Constitutional AI:无需人类标注的宪法约束对齐方法

论文:Constitutional AI: Harmlessness from AI Feedback
作者:Yuntao Bai, Saurav Kadavath et al. (Anthropic)
发表时间:2022年12月
论文链接:https://arxiv.org/abs/2212.08073

摘要:Constitutional AI提出了一种无需人类标注的AI对齐方法,通过预设的宪法原则(Constitution)指导AI自我改进。该方法分为监督学习阶段和强化学习阶段,使用AI反馈替代人类反馈,减少对人工标注的依赖。实验表明,Constitutional AI能够训练出既无害又有帮助的AI助手,为AI安全提供了新的技术路径。


一、RLHF的局限与Constitutional AI的动机

RLHF虽然有效,但存在几个关键局限。首先是标注成本,需要大量人工标注偏好数据。其次是标注一致性,不同标注者对"有害"的定义可能不同。最后是可扩展性,随着模型能力增强,人类评估模型输出的难度也在增加。

Constitutional AI的核心问题是:能否让AI自己评估自己,从而减少对人类标注的依赖?

Anthropic的答案是:可以,通过预设一套"宪法"原则。

Constitutional AI

宪法原则
Constitution

AI自我评估

训练偏好模型

RLAIF优化

传统RLHF

人类标注偏好

训练奖励模型

PPO优化


二、Constitutional AI的两阶段训练

2.1 第一阶段:监督学习(SFT)

首先,使用宪法原则对初始模型进行监督微调。具体步骤如下:

  1. 让模型生成对有害请求的初始回应
  2. 使用宪法原则批评该回应
  3. 让模型根据批评生成修正后的回应
  4. 使用修正后的回应进行监督学习
from dataclasses import dataclass
from typing import List, Dict


@dataclass
class ConstitutionalPrinciple:
    """
    宪法原则
    
    定义AI行为的基本准则。
    
    Attributes:
        name: 原则名称
        description: 原则描述
        critique_prompt: 批评提示模板
        revision_prompt: 修正提示模板
    """
    
    name: str
    description: str
    critique_prompt: str
    revision_prompt: str


class ConstitutionalAI:
    """
    Constitutional AI框架
    
    通过宪法原则指导AI自我改进。
    
    Attributes:
        model: 语言模型
        principles: 宪法原则列表
    """
    
    def __init__(
        self,
        model,
        principles: List[ConstitutionalPrinciple]
    ):
        self.model = model
        self.principles = principles
    
    def generate_initial_response(
        self,
        harmful_request: str
    ) -> str:
        """
        生成初始回应
        
        Args:
            harmful_request: 有害请求
            
        Returns:
            初始回应
        """
        prompt = f"Human: {harmful_request}\nAssistant:"
        return self.model.generate(prompt)
    
    def critique_response(
        self,
        request: str,
        response: str,
        principle: ConstitutionalPrinciple
    ) -> str:
        """
        使用宪法原则批评回应
        
        Args:
            request: 用户请求
            response: 模型回应
            principle: 宪法原则
            
        Returns:
            批评内容
        """
        critique_prompt = principle.critique_prompt.format(
            request=request,
            response=response,
            principle=principle.description
        )
        
        return self.model.generate(critique_prompt)
    
    def revise_response(
        self,
        request: str,
        response: str,
        critique: str,
        principle: ConstitutionalPrinciple
    ) -> str:
        """
        根据批评修正回应
        
        Args:
            request: 用户请求
            response: 原始回应
            critique: 批评内容
            principle: 宪法原则
            
        Returns:
            修正后的回应
        """
        revision_prompt = principle.revision_prompt.format(
            request=request,
            response=response,
            critique=critique,
            principle=principle.description
        )
        
        return self.model.generate(revision_prompt)
    
    def supervised_finetuning_step(
        self,
        harmful_request: str
    ) -> Dict:
        """
        执行一步监督微调
        
        Args:
            harmful_request: 有害请求
            
        Returns:
            训练数据
        """
        initial_response = self.generate_initial_response(harmful_request)
        
        training_data = []
        
        for principle in self.principles:
            critique = self.critique_response(
                harmful_request,
                initial_response,
                principle
            )
            
            revised_response = self.revise_response(
                harmful_request,
                initial_response,
                critique,
                principle
            )
            
            training_data.append({
                'request': harmful_request,
                'initial_response': initial_response,
                'critique': critique,
                'revised_response': revised_response,
                'principle': principle.name
            })
        
        return training_data

2.2 第二阶段:强化学习(RLAIF)

在监督学习之后,使用AI反馈进行强化学习:

  1. 让模型对同一请求生成两个回应
  2. 使用宪法原则让AI选择更好的回应
  3. 训练偏好模型
  4. 使用偏好模型作为奖励信号进行RL训练
class AIFeedbackCollector:
    """
    AI反馈收集器
    
    使用宪法原则让AI评估回应质量。
    """
    
    def __init__(self, model, principles: List[ConstitutionalPrinciple]):
        self.model = model
        self.principles = principles
    
    def compare_responses(
        self,
        request: str,
        response_a: str,
        response_b: str,
        principle: ConstitutionalPrinciple
    ) -> str:
        """
        比较两个回应
        
        Args:
            request: 用户请求
            response_a: 回应A
            response_b: 回应B
            principle: 宪法原则
            
        Returns:
            更好的回应标识(A或B)
        """
        comparison_prompt = f"""
Consider the following conversation between a human and an assistant:

Human: {request}

Assistant A: {response_a}

Assistant B: {response_b}

{principle.description}

Which response is better? Answer with only 'A' or 'B'.
"""
        
        result = self.model.generate(comparison_prompt)
        
        if 'A' in result.upper():
            return 'A'
        elif 'B' in result.upper():
            return 'B'
        else:
            return 'TIE'
    
    def collect_preferences(
        self,
        request: str,
        responses: List[str]
    ) -> List[Dict]:
        """
        收集偏好数据
        
        Args:
            request: 用户请求
            responses: 回应列表
            
        Returns:
            偏好数据列表
        """
        preferences = []
        
        for principle in self.principles:
            for i, resp_a in enumerate(responses):
                for j, resp_b in enumerate(responses):
                    if i >= j:
                        continue
                    
                    winner = self.compare_responses(
                        request, resp_a, resp_b, principle
                    )
                    
                    preferences.append({
                        'request': request,
                        'response_a': resp_a,
                        'response_b': resp_b,
                        'winner': winner,
                        'principle': principle.name
                    })
        
        return preferences

三、宪法原则的设计

宪法原则是Constitutional AI的核心。Anthropic使用了一套包含16条原则的宪法,涵盖多个维度:

无害性原则:避免生成有害、非法、不道德的内容
帮助性原则:尽可能帮助用户完成任务
诚实性原则:不提供虚假或误导性信息
尊重性原则:尊重用户,不进行人身攻击

这些原则的设计体现了Anthropic对AI安全的思考:通过显式的规则约束AI行为,而非依赖隐式学习。


四、实验结果

Constitutional AI在多个维度上取得了良好效果:

在无害性方面,Constitutional AI模型在无害性评估上优于RLHF模型。在帮助性方面,模型在保持无害的同时,帮助性没有显著下降。在可解释性方面,宪法原则使模型决策更加透明。


五、总结

Constitutional AI提出了一种减少人类标注依赖的AI对齐方法。它的核心贡献可以概括为三点:宪法原则,显式定义AI行为准则;AI反馈,用AI评估替代人类评估;两阶段训练,结合监督学习和强化学习。

Constitutional AI的启示在于:AI对齐可以更加自动化。通过预设明确的规则,我们可以让AI参与自身的对齐过程,这为构建更安全的AI系统提供了新的思路。


参考链接

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐