当前位置: 首页 > article >正文

大模型进阶微调篇(二):基于人类反馈的强化学习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算法的效果。未来的研究可能会进一步提高反馈利用的效率,并探索更多没有明确奖励信号的实际应用场景。

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


http://www.kler.cn/news/363170.html

相关文章:

  • three.js 灯光
  • 苍穹外卖--开发记录day11
  • Springboot 的手动配置操作讲解
  • 【AI创新】优化ChatGPT提示词Prompt设计:释放AI的无限潜能
  • Java函数式DoubleBinaryOperator接口介绍、应用场景和示例代码
  • Docker 基础入门
  • 2000-2023年上市公司绿色专利申请授权面板数据
  • 最近本地vmware workstation虚拟机用了一段时间后就出现网络很慢,登录不了的现象
  • 教育技术的未来:Spring Boot在线教学平台
  • SwitchHosts快速修改host文件
  • 数据资产入表:政策与实践全面解读
  • lego-loam featureAssociation 源码注释(二)
  • 嵌入式-ftrace
  • 【微信小程序_18_WXS脚本】
  • CSS学习(Grid布局和flex布局比较)
  • SDK下载依赖到IDEA的详细指南
  • ctfshow-文件上传-151-161
  • 三大智能体平台深度对比:字节Coze、百度AppBuilder、智谱智能体优劣解析
  • MATLAB中head函数用法
  • 热门伤感短视频素材网站推荐,轻松获取创作灵感
  • 【Linux笔记】Linux命令与使用
  • 前端跨系统请求接口报错
  • Bug:通过反射修改@Autowired注入Bean的字段,明确存在,报错 NoSuchFieldException
  • 可编辑38页PPT | 柔性制造企业数字化转型与智能工厂建设方案
  • 分享一个IDEA里面的Debug调试设置
  • 驾校小程序:一站式学车解决方案的设计与实践