大模型进阶微调篇(二):基于人类反馈的强化学习RLHF原理、优点介绍,但需要警惕LLMs的拍马屁行为

在这里插入图片描述

最近用llm辅助干活越来越多,但是发现一点不太好的地方-LLM总能让我满意、让我觉得自豪、觉得有无限可能。然后引起了我的警觉,于是抽时间思考了一下,似乎一切都来自于其RLHF的训练方法。似乎它的目标,就是让使用者满意,因为我满意会点赞,不满意会给负反馈。这些过程进一步得到了强化,虽然为了商业成功这必不可少,但或许存在一定危机。于是就有了这片文章,只是一个初步的思考,后续可能还会写更多深入点的、或者进行相关的具体研究

1. 引言

在之前的一篇文章以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?浅谈了一下微调所需的资源,但缺少对于原理的讲述,本文将对该对基于人类反馈的强化学习相关研究的背景、方法、实验结果进行概述,及剖析其存在的优缺点。

强化学习(RL)的成功通常依赖于明确定义的奖励函数,但在实际中,许多任务的目标难以明确表达。例如,机器人执行家务、开车或跳跃等任务,很难通过手工设计奖励函数来描述其目标。因此,如何有效传达人类的目标成为一个重要挑战。

此外,随着深度学习和计算能力的进步,深度强化学习在许多高维度的任务中取得了显著进展。然而,缺乏有效的奖励信号仍然是一个主要的瓶颈,因此基于人类反馈的奖励学习在解决这些挑战中具有巨大潜力。

2. 一篇基于人类喜好的强化学习论文解读

这个章节主要介绍了论文 Deep reinforcement learning from human preferences 的部分成果。还有很多介绍RLHF论文,就不多说了,只是起到抛砖引玉的作用。

2.1 研究背景

作者提出通过人类反馈学习奖励函数。这种反馈基于人类对RL代理的行为片段的偏好比较,而不是通过给定明确的数值奖励。其优点在于减少了人类监督的成本,同时可以更好地应用于复杂的深度强化学习系统。这种方法可以避免手工定义复杂的奖励函数,从而更加高效且灵活地解决实际中的问题,尤其是在任务目标难以量化的情况下,通过人类反馈传达目标变得尤为重要。

2.2 实现过程

作者提出了一种从人类偏好中学习奖励函数的关键方法,并用该奖励函数来优化代理的行为。具体步骤如下:

  1. 生成代理行为片段:RL代理与环境交互,生成一系列行为轨迹片段。
  2. 人类提供偏好:人类对这些轨迹片段进行比较,选择更符合预期的行为片段。
  3. 学习奖励函数:利用人类反馈的数据,训练一个神经网络预测奖励函数。
  4. 优化策略:使用学习到的奖励函数,通过强化学习算法训练代理,使其逐步优化行为。

这种框架通过减少所需的反馈量,使得复杂任务的训练变得更加经济和实际可行。人类的偏好反馈为代理提供了一种更加灵活和丰富的信息源,相较于传统的数值奖励函数,这种方式更具普适性和人性化,能够更好地应对任务目标模糊的场景。

为了提高反馈的利用效率,作者还设计了采样策略,优先向人类呈现那些代理行为质量接近、难以区分的轨迹片段,以便更好地从人类反馈中获取有价值的信息。这种主动采样策略能够有效减少所需的人类反馈次数,从而降低训练成本。

2.3 实验结果

作者在模拟机器人任务和Atari游戏上验证了方法的有效性:

  • 模拟机器人任务:在MuJoCo环境中,实验表明仅需少量人类反馈,代理就能够执行复杂的任务,如翻跟头或单腿行走。通过人类的反馈,代理能够以更自然的方式完成任务,而不像传统RL中那样依赖于手工设计的奖励函数,导致行为可能过于机械或不符合人类期望。
  • Atari游戏:在多个游戏中,使用人类反馈的代理在没有明确奖励函数的情况下,能够接近或达到标准强化学习方法的效果。例如,在经典的Pong和Space Invaders等游戏中,基于人类偏好反馈的模型能够有效地学习游戏策略,并且在某些情况下甚至超过了传统的奖励函数驱动的模型。
  • 新行为学习:文章还展示了代理学习新行为的能力,例如成功学会了复杂的行为如连续翻跟头。通过人类的偏好反馈,代理不仅能够优化已有的行为,还能够探索并学习全新的行为方式,展示了较强的行为适应性和灵活性。

此外,实验还发现,人类的偏好反馈不仅有助于提高模型的表现,还能使得代理在复杂任务中展现出更多的人性化特征,例如避免明显的不安全动作或对环境产生负面影响的行为。

2.4 主要难点与挑战

  1. 反馈稀缺性:与传统RL方法需要大量的经验数据不同,这种方法通过减少人类反馈(<1%交互反馈)降低了监督成本。如何高效利用有限的反馈是一个核心难点。在实验中,研究者通过主动采样的方法来选择那些最有可能为模型学习带来价值的行为片段,从而最大化地利用每一次人类反馈。

  2. 奖励函数的非线性与非平稳性:由于代理行为的变化,奖励函数本身是动态的,这给RL训练增加了挑战。为了应对这一问题,作者引入了异步学习和集成模型的训练方法,以确保奖励函数在动态变化的情况下仍能保持稳定和有效。奖励函数的学习过程和策略优化过程交替进行,这使得模型能够持续地更新奖励函数以反映代理的最新行为。

  3. 与人类偏好的一致性:不同任务中的奖励函数设计复杂,人类反馈可能导致模型行为偏离预期目标。如何处理人类偏好中的不一致性也是一大技术难点。为了解决这一问题,作者引入了对反馈不确定性的建模,以处理可能存在的偏好不一致性,使得模型在面对矛盾反馈时能够更加稳健地学习。

3. 实现示例代码

下面是一个实现的示例代码,利用 input 让用户对代理行为进行选择,从而提供人类偏好反馈:

import random

def generate_trajectory():
    # 模拟生成行为轨迹片段,这里用简单字符串表示
    actions = ["向前移动", "向左转", "向右转", "跳跃"]
    return [random.choice(actions) for _ in range(5)]

def human_feedback(trajectory1, trajectory2):
    print("请对以下两个行为轨迹片段进行选择:")
    print("1: ", trajectory1)
    print("2: ", trajectory2)
    choice = input("请选择您更偏好的轨迹(输入1或2):")
    while choice not in ["1", "2"]:
        choice = input("无效输入,请输入1或2:")
    return int(choice)

def main():
    for _ in range(5):  # 假设进行5次人类反馈
        trajectory1 = generate_trajectory()
        trajectory2 = generate_trajectory()
        choice = human_feedback(trajectory1, trajectory2)
        if choice == 1:
            print("您选择了轨迹1\n")
        else:
            print("您选择了轨迹2\n")

if __name__ == "__main__":
    main()

在这个示例中,程序生成了两个行为轨迹片段,并通过 input 函数让用户选择他们更偏好的轨迹。通过这样的方式,人类偏好被收集用于后续的奖励函数学习和策略优化。

4. 可能存在的致命问题

尽管基于人类反馈的强化学习方法在很多方面具有优势,但它也存在一些致命问题,这些问题源于任何事物的两面性。
可能带来以下问题:

  1. 缺乏全面性和多样性:由于模型倾向于迎合人类偏好,它可能只呈现那些显得更加“正确”或“被期望”的行为,忽略了其他可能的解决方案或多样化的选择。这样可能导致模型在复杂的环境中缺乏探索精神,无法发现潜在的最佳策略。

  2. 风险规避与创新不足:由于模型的目标是最大化人类的满意度,它可能会回避高风险但有潜在高回报的行为,倾向于选择安全且稳妥的路径。这种“讨好”式的行为导致创新不足,限制了模型在面对不确定性和挑战时的表现。

  3. 偏好固化:人类的偏好本身是主观且可能存在偏见的,如果模型过度依赖于人类的反馈,可能会将这些偏见固化到系统中,从而使得模型的行为表现缺乏客观性与公平性。例如,在涉及伦理或道德决策时,模型可能无法提供平衡和多方面的视角。

  4. 难以适应动态变化的需求:人类的偏好是不断变化的,然而通过历史反馈学习的模型可能难以适应这种动态变化。这就导致了在环境和需求发生变化时,模型的表现可能滞后,无法迅速调整和适应新的目标或标准。

基于人类反馈的大模型倾向于给出让对方满意的答案,这种行为类似于“拍马屁”,即只陈述让对方满意的观点或赞同对方的正确点,而不会主动进行双面阐述,除非你特意指出。

5. 总结

利用人类偏好反馈可以有效地训练复杂的深度强化学习模型,且在某些任务上甚至能超过传统RL算法的效果。未来的研究可能会进一步提高反馈利用的效率,并探索更多没有明确奖励信号的实际应用场景。

但是也需要警惕风险,不要轻易让大模型帮忙做决策,除非明确指出了要求其两面性的分析。

### 人类反馈强化学习 (RLHF) 的概念 人类反馈强化学习(RLHF),作为一种创新性的机器学习方法,融合了强化学习(Reinforcement Learning, RL)与来自人类专家的直接反馈。这种方法旨在通过引入外部的人类监督来改进智能体(agent)的学习效率和效果,在处理复杂任务时尤为有效[^1]。 ### RLHF的工作原理RLHF框架下,整个学习流程被划分为几个关键阶段: - **预训练**:首先采用大规模无标注数据集对语言模型进行初步训练,使模型具备基本的语言理解和生成能力。 - **奖励模型构建**:接着收集由真实用户提供的对话样本,并邀请人工评估者针对每一对话给出评分;随后以此为基础建立专门用于衡量回复质量高低的奖励函数或称为偏好模型(preference model)[^2]。 - **强化学习微调**:最后一步则是借助上述获得的奖励信号作为指导,运用PPO(Policy Gradient with Proximal Policy Optimization)等算法进一步优化初始预训练得到的大规模语言模型参数配置,从而实现性能提升的目的[^3]。 ```python import torch.nn as nn from transformers import AutoModelForCausalLM, Trainer, TrainingArguments class RewardModel(nn.Module): def __init__(self, base_model_name="gpt2"): super().__init__() self.base_model = AutoModelForCausalLM.from_pretrained(base_model_name) def forward(self, input_ids, attention_mask=None): outputs = self.base_model(input_ids=input_ids, attention_mask=attention_mask) logits = outputs.logits[:, -1, :] return logits def train_reward_model(training_data_path="./data/reward_training.jsonl", output_dir="./results/"): training_args = TrainingArguments( per_device_train_batch_size=8, num_train_epochs=3, logging_steps=10, save_strategy='epoch', output_dir=output_dir ) trainer = Trainer( model=RewardModel(), args=training_args, data_collator=data_collator, tokenizer=tokenizer, compute_metrics=compute_metrics_function ) trainer.train() ``` 这段Python代码展示了如何定义一个简单的基于Transformer架构的奖励模型以及对其进行训练的过程。实际应用中可能还需要考虑更多细节和技术调整以适应具体场景需求。 ### RLHF的应用实例 RLHF已被广泛应用于自然语言处理领域内的多个方面,比如聊天机器人(chatbot)开发、自动问答系统(Q&A system)建设等方面。特别是对于像ChatGPT这样的大型预训练语言模型而言,通过融入人类反馈机制能够显著改善其交互体验和服务质量,使得机器的回答更加贴近用户的期望并具有更高的实用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余生H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值