仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
作者:arjun链接:https ://www.k-a.in/grpo-1B.html编辑:AI翻译、「深度学习自然语言处理」公众号润色
今天我们将深入探讨GRPO的实现。先简要介绍这一概念,讨论方法,然后开始具体实现。
GRPO是一种训练技术,旨在通过捕捉特定偏好的奖励函数来优化语言模型。与其他强化学习方法(如PPO或RLHF)不同,GRPO不需要复杂的评判模型和大量计算资源,而是直接优化语言模型,并通过在生成的响应组内计算相对优势来实现目标。
GRPO是一种新兴的强化学习技术,相比传统方法具有以下优势:
直接优化:不同于需要独立奖励模型的方法,GRPO直接使用显式奖励函数优化语言模型。
多奖励信号:可以定义多个奖励函数,针对生成内容的不同方面(如正确性、格式、风格)。
探索效率:GRPO通过在训练过程中为每个提示生成多个补全内容,有效探索输出空间。
代码实现了多个协同工作的奖励函数,用于指导模型:
correctness_reward_func:当模型提取的答案与真实答案匹配时,奖励2.0分。这是事实正确性的主要学习信号。
int_reward_func:当答案是数字时奖励0.5分,适用于数学问题,引导模型生成数值响应。
soft_format_reward_func和strict_format_reward_func:奖励正确的XML格式(0.5分),教导模型使用正确的标签结构响应。
xmlcount_reward_func:为每个正确使用的XML标签提供部分奖励(每个标签0.125分),形成平滑的学习梯度。
奖励函数:根据特定标准评估模型输出:
正确性:检查提取的答案是否与真实答案匹配。
格式遵循:确保响应符合请求的XML格式。
整数检测:奖励数值答案。
数据集准备:使用GSM8K(数学应用题)数据集,并进行特定格式化。
训练配置:使用LoRA进行参数高效微调。
对于数据集中的每个提示,模型生成多个补全内容(由num_generations设置,代码中为4)。
每个补全内容由所有奖励函数评估。
奖励用于更新模型权重,鼓励模型生成更高奖励的输出。
此过程持续指定的周期数。
我们使用LoRA(低秩适应)高效微调模型。LoRA向注意力层添加小型可训练的“适配器”矩阵,大幅减少训练参数数量(通常>99%)。peft_config定义了目标层和适配器的秩。
使用较小的模型(Qwen2.5-1.5B-Instruct)以适应内存限制。
减小批次大小和生成数量以管理内存使用,并使用较小的数据集子集(20个示例)进行快速实验。
测试代码可在训练后立即评估结果。可通过增加max_samples行更全面的训练,或尝试不同的奖励函数。
这一实现展示了GRPO的工作原理,以及如何利用它优化语言模型以适应特定格式和任务。数学问题解决任务与XML格式的结合,清晰地体现了该技术的能力。
真是一次有趣的实践!
备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群
id:DLNLPer,记得备注呦