使用KTO进行更好、更便宜、更快速的LLM对齐

KTO全称为Kahneman-Tversky Optimisation,这种对齐方法使在我们的数据上对大型语言模型(LLM)进行对齐变得前所未有地容易和便宜,而且不会损害性能。大型语言模型的成功在很大程度上得益于与人类反馈的对齐。如果ChatGPT曾经拒绝回答您的问题,很可能是因为它被训练为避免说出有争议的内容。然而,对于公司来说,对他们自己的LLM进行对齐一直是困难的。下面我们简单介绍下KTO方法,这种方法可以提高LLM的整体性能和质量,同时节省成本。

大规模对齐LLM

LLM对齐对于优化性能至关重要,但一直以来都很困难,因为:

标准的对齐方法,即带有人类反馈的强化学习(RLHF),有许多复杂的部分,很多开源项目已经努力使其工作。
对齐方法期望以偏好的形式获得反馈(例如,对于输入X,输出A比B更好)。利用人类注释工作的这种反馈很快就会变得非常昂贵,并且也可能导致数据冲突。人类自己的评分主观性强,因此需要大量努力来定义输出A如何定量优于输出B。

这两个因素意味着,对于大多数组织来说,自己的LLM大规模对齐历史上是不可能的。但这一差距正在缩小。斯坦福研究人员最近用一种称为直接偏好优化(DPO)的技术解决了第一个问题,这在数学上等同于RLHF,同时更加简单,使得对齐对于开源努力变得可行。

剩下的瓶颈是数据。只有少数几个包含文本上人类偏好的公共数据集,而且它们是通用的。例如,如果你想要人类对两种LLM输出更准确地判断意大利经济状况的反馈,你需要咨询专业人士。但获取此类数据很昂贵,无论您是直接付费还是要求员工花费宝贵的时间提供反馈。

克服数据瓶颈

在Contextual AI项目中,作者已经找到了克服这一数据瓶颈的方法。通过研究经济学家Kahneman和Tversky关于人类决策的工作,设计了一种不需要像“输入X的输出A胜过输出B”这样的偏好的对齐方法。相反,对于输入X,我们只需要知道输出Y是可取的还是不可取的。这种单一反馈是丰富的:每个公司都有可以标记为可取(例如,销售成功)或不可取(例如,没有销售)的客户互动数据。

通过在三个公共数据集(Anthropic HH、Stanford Human Preferences 和 Open Assistant)的组合上对齐从 1B 到 30B 的模型,将 KTO 与现有方法进行比较。然后,遵循现在的标准做法,使用 GPT-4 将对齐模型的各代与数据集中提供的人类首选基线进行比较。


与其他对齐模型相比,Kahneman-Tversky 优化在性能上大幅提升,无论是标准微调还是 DPO

更多原理和细节请参考:

https://github.com/ContextualAI/HALOs/blob/main/assets/report.pdf

代码

https://github.com/ContextualAI/HALOs

class SimpleKTOTrainer(UnpairedPreferenceTrainer):
   """A simple version of KTO meant to introduce you to the HALOs repo."""
   def loss(self,
        policy_chosen_logps: torch.FloatTensor,
        policy_rejected_logps: torch.FloatTensor,
        reference_chosen_logps: torch.FloatTensor,
        reference_rejected_logps: torch.FloatTensor) -> Tuple[torch.FloatTensor, torch.FloatTensor, torch.FloatTensor]:
   """Compute the Kahneman-Tversky loss for a batch of policy and reference model log probabilities. 
   For each batch of n/2 chosen examples and n/2 rejected examples (belonging to n different inputs), calculate the loss as follows.

   If generation y ~ p_chosen, where x' ~ are the examples with rejected generations, we have the 'chosen' loss:
       L(x, y) := 1 - sigmoid(beta * (log p_policy(y|x) - log p_reference(y|x) - KL(p_policy(y_rejected|x') || p_reference(y_rejected|x')))
   If generation y ~ p_rejected, , where x' ~ are the examples with chosen generations, we have the 'rejected' loss:
       L(x, y) := 1 - sigmoid(beta * KL(p_policy(y_chosen|x') || p_reference(y_chosen|x')) - [log p_policy(y|x) - log p_reference(y|x)])
   """
   chosen_KL = (policy_chosen_logps - reference_chosen_logps).mean().clamp(min=0)
   rejected_KL = (policy_rejected_logps - reference_rejected_logps).mean().clamp(min=0)

   chosen_logratios = (policy_chosen_logps - reference_chosen_logps)
   rejected_logratios = (policy_rejected_logps - reference_rejected_logps)

   losses = torch.cat((1 - F.sigmoid(self.config.loss.beta * (chosen_logratios - rejected_KL)), 1 - F.sigmoid(self.config.loss.beta * (chosen_KL - rejected_logratios))), 0)

   chosen_rewards = self.config.loss.beta * (policy_chosen_logps - reference_chosen_logps).detach()
   rejected_rewards = self.config.loss.beta * (policy_rejected_logps - reference_rejected_logps).detach()

   return losses, chosen_rewards, rejected_rewards

另外在最近有人对IPO/DPO/KTO性能做了对比:

对于 Zephyr 模型,我们观察到最好的性能是以最低的成本实现的。这在所有三种测试的算法中都是一致的,社区的一个有趣的后续实验是在 0.0-0.2 范围内进行细粒度扫描。虽然 DPO 可以获得最高的 MT Bench 分数,但我们发现 KTO(配对)在除一种设置之外的所有设置中都取得了更好的结果。IPO虽然有更强的理论保证,但除了一种情况外,在所有情况下似乎都比基本模型更糟糕。

https://huggingface.co/blog/pref-tuning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三星刚刚将Google Gemini集成到Galaxy S24中

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 AI手机的新时代即将到来。 三星刚刚将 Google Gemini 集成到 Galaxy S24 中! 准备好迎接智能手机吧,它不仅智能,而且具有灵性。…

Jvm相关知识(面试高级必备)

类的实例化顺序 先静态、先父后子 先静态:父静态>子静态 优先级:父类>子类 静态代码块>非静态代码块>构造函数 一个类的实例化过程: ①.父类的static代码块,当前类的static; ②.顺序执行…

线程池的简单介绍及使用

线程池 线程池的参数介绍拒绝策略 线程池的任务处理流程使用Executors创建常见的线程池 线程池的参数介绍 corePoolSize: (核心线程数)这是线程池中始终存在的线程数,即使这些线程处于空闲状态。maximumPoolSize:(最大线程数) 是线程池允许的最大线程数。keepAliveT…

【动态规划】【C++算法】741摘樱桃

作者推荐 【动态规划】【数学】【C算法】18赛车 涉及知识点 动态规划 LeetCode741 摘樱桃 给你一个 n x n 的网格 grid ,代表一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它。 1 表…

EasyRecovery2024数据恢复大师最新版本下载

EasyRecovery可以从初始化的磁盘恢复损坏或删除的文件。该软有易于使用,即使是最缺乏经验的用户也可以轻松恢复数据。一款威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。EasyRecovery 不会向你的原始驱动器写入任何东东,它主…

深入探索 Android 中的 Runtime

深入探索 Android 中的 Runtime 一、什么是 Runtime二、Android 中的 Runtime 类型2.1. Dalvik Runtime2.2. ART(Android Runtime) 三、Runtime 的作用和特点3.1. 应用程序执行环境3.2. 跨平台支持3.3. 性能优化3.4. 应用程序优化 四、与应用开发相关的重…

论rtp协议的重要性

rtp ps流工具 rtp 协议,实时传输协议,为什么这么重要,可以这么说,几乎所有的标准协议都是国外创造的,感叹一下,例如rtsp协议,sip协议,webrtc,都是以rtp协议为基础&#…

【react】创建react项目+项目结构

使用create-react-app快速搭建开发环境 create-react-app是一个快速创建React开发环境的工具,底层由Webpack构建,封装了配置细节 npx create-react-app react_hm执行命令后开始创建 创建好执行cd react_hm npm start 当看到webpack compiled successfu…

zookeeper window 安装

下载 Apache ZooKeeper 解压Zookeeper安装包到指定目录,注意目录不要有空格。 备份zoo_sample.cfg并改名zoo.cfg 注意:此处的路径一定要使用双斜杠" \\ " D:\\apache-zookeeper-3.8.3-bin\\data 新建环境变量:ZOOKEEPER_HOME D…

Kafka Console Client 的 Consumer Group

以往使用 kafka-console-consumer.sh 消费 Kafka 消息时并没有太在意过 Consumer Group,在命令行中也不会使用 --group 参数,本文针对 Kafka Console Client 命令行中的 Consumer Group 进行一次统一说明。 1. 如不设置 --group 参数会自动生成一个 Con…

亚马逊云科技 WAF 部署小指南(六)追踪 Amazon WAF Request ID,排查误杀原因

众所周知,中国是全球制造业的巨大力量,许多中国企业通过 2B 电商平台网站进行商品销售和采购。在这些电商平台上,Web 应用防火墙(WAF)成为不可或缺的安全工具。然而,WAF 也可能导致误杀问题。一旦误杀发生&…

CodeReview 小工具

大家开发中有没有遇到一个版本开发的非常杂,开发很多个项目,改动几周后甚至已经忘了自己改了些什么,领导要对代码review的时候,理不清楚自己改过的代码,只能将主要改动的大功能过一遍。这样就很容易造成review遗漏&…

从技术大会到面试舞台:程序猿的蜕变之旅!

在这个技术日新月异的时代,程序员们需要不断地学习和提升自己的技能。 参加技术大会,无疑是程序员们拓宽视野、提升技能的重要途径之一。然而,技术大会只是程序员成长的一部分,掌握面试技巧同样至关重要。只有将这两者完美结合&a…

ubuntu-20.04.6-live-server-amd64安装教程-完整版

简介 Ubuntu 20.04.6 Live Server AMD64 安装教程 - 完整版" 提供了详细的指南,旨在帮助用户在使用 AMD64 架构的服务器上安装 Ubuntu 20.04.6 Live Server 版本。该教程包含全面的步骤和详细说明,使用户能够顺利完成整个安装过程,建立…

【AI的未来 - AI Agent系列】【MetaGPT】5. 更复杂的Agent实战 - 实现技术文档助手

在 【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent 中,我们已经实现了一个简单的Agent,实现的功能就是顺序打印数字。 文章目录 0. 本文实现内容1. 实现思路2. 完整代码及细节注释 0. 本文实现内容 今天我们来实现一个有实际意义的Ag…

test0120测试1

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏:《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

项目实战————苍穹外卖(DAY11)

苍穹外卖-day11 课程内容 Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现:数据统计 数据统计效果图: 1. Apache ECharts 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观&#x…

小红书怎么种草?小红书种草玩法全攻略你不容错过!

小红书是一个以分享购物心得和生活方式为主题的社交平台,近年来已经成为了许多品牌进行宣传和推广的重要渠道。那么,品牌如何在小红书上种草,打造自己的形象呢?以下是一些实用的方法。 1.选择合适的KOL合作 在小红书上&#xff0…

完整的性能测试流程

一、准备工作 1、系统基础功能验证 性能测试在什么阶段适合实施?切入点很重要!一般而言,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。 2、测试团队组建 根据…

EasyRecovery2024免费电脑数据恢复软件下载

easyrecovery是一款功能强大、易于使用的硬盘数据恢复软件。这款软件可以帮助用户非常方便地恢复丢失的数据。软件非常容易使用和高效的数据恢复。感兴趣的朋友们赶快来下载吧。 无论是因为意外删除、格式化、病毒感染、系统崩溃还是其他原因,该软件可以帮助您恢复…