大数跨境

TRL重大更新:3种新方法让视觉语言模型更懂人类!

TRL重大更新:3种新方法让视觉语言模型更懂人类! 洞见畏来
2025-08-07
2
导读:TRL重大更新:3种新方法让视觉语言模型更懂人类!

视觉语言模型(VLMs)越来越强,但“听懂”人类需求、输出符合预期的结果,始终是关键难题。近日,Hugging Face的TRL库迎来重大更新,新增了3种多模态对齐方法,能让VLMs从偏好数据中提取更多信息,性能再上一个台阶!

一、为什么VLMs需要“对齐”?

简单说,“对齐”就是让模型的输出更符合人类偏好。传统流程是:先用有监督微调Supervised Fine-Tuning (SFT) 让模型学会遵循指令,再用直接偏好优化Direct Preference Optimization (DPO)让模型区分“好回答”和“坏回答”(通过对比“选择的答案”和“拒绝的答案”)。

但DPO只能处理成对数据,信息利用率有限。而新方法能突破这一限制,甚至解决SFT和DPO的固有问题(比如SFT的分布偏移、DPO生成重复内容等)。

二、3种新方法:让VLMs更聪明的核心技术

1. 混合偏好优化(MPO):多损失协同发力


Mixed Preference Optimization (MPO) 是DPO的“升级版”,通过三种损失结合解决单一方法的缺陷:
  • 偏好损失(来自DPO):区分好/坏回答;

  • 质量损失(来自BCO):判断回答质量;

  • 生成损失(来自SFT):保证生成内容连贯。

效果有多好?在MathVista数据集上,MPO直接带来了6.2分的性能提升

如何使用?
只需在TRL的DPOTrainer中配置损失类型和权重:

mpo_config = DPOConfig(    loss_type=["sigmoid""bco_pair""sft"],  # 三种损失类型    loss_weights=[0.8, 0.2, 1.0],  # 对应权重    # 其他参数(略))mpo_trainer = DPOTrainer(model=model_id, args=mpo_config, ...)mpo_trainer.train()

2. 组相对策略优化(GRPO):抗噪声能力更强

Group Relative Policy Optimization (GRPO) 源自DeepSeek团队的研究,基于PPO但更强大:它不再针对单个样本优化,而是对一整组对话轨迹(比如一个批次的对话数据)进行更新。


这样做的好处是:
  • 奖励数据中的噪声会被“平均掉”,模型更稳健;

  • 模型能学到“什么是整体好的回答”,而不是纠结于个别高奖励样本。

关键操作:定义奖励函数
GRPO需要自定义奖励函数(比如检查回答格式、验证答案正确性),再传入训练器:

# 示例:检查回答格式的奖励函数def format_reward(completions, **kwargs):    pattern = r"^</think>.*?</think>s*</think>.*?</RichMediaReference>$"  # 自定义格式    return [1.0 if re.match(pattern, c) else 0.0 for c in completions]# 初始化训练器trainer = GRPOTrainer(    model=model,    reward_funcs=[format_reward, accuracy_reward],  # 传入奖励函数    args=training_args,    ...)

3. 组序列策略优化(GSPO):训练更稳定,适合大模型

Group Sequence Policy Optimization (GSPO) 是Qwen团队提出的GRPO改进版,核心差异是:在序列级别(而非逐token)计算重要性采样权重,让训练更稳定,尤其适合MoE(混合专家)架构的大模型。

使用技巧:
配置时只需在GRPO的参数基础上,增加序列级相关设置:

training_args = GRPOConfig(    importance_sampling_level="sequence",  # 序列级计算    epsilon=3e-4,  # 控制更新幅度    # 其他参数(略))


三、效果对比:哪种方法更优?


以Qwen2.5VL-3B模型解决几何问题(已知∠APO=25°,求∠AOB)为例,不同方法的输出差异明显:

可见,GRPO和GSPO在理解问题、应用知识、贴合人类需求上表现更优。

四、效率提升:vLLM集成加速训练

为了让大模型训练更高效,TRL还集成了vLLM(高性能推理库),支持在线生成样本时加速。使用时只需在脚本中添加--use_vllm,并选择两种模式:

  • colocate模式:vLLM与训练循环在同一进程,共享GPU,适合单机训练;

  • server模式:vLLM单独作为服务启动,适合多机分布式训练。

启动示例:

# colocate模式CUDA_VISIBLE_DEVICES=1,2 python grpo_vlm.py --model Qwen2.5-VL-3B --use_vllm --vlm_mode colocate# server模式(先启动服务)trl vllm-serve --model Qwen2.5-VL-3B --tensor-parallel-size 1# 再运行训练脚本CUDA_VISIBLE_DEVICES=1,2 python grpo_vlm.py --use_vllm --vlm_mode server

五、总结:快速上手资源

如果你想立即尝试这些新方法,可以参考TRL提供的:

  • 完整训练脚本(examples/scripts/);

  • 演示笔记本(含代码和可视化结果);

  • 官方文档(详细参数说明)。

有了这些工具,让你的VLMs更懂人类,从此不再复杂!


【声明】内容源于网络
0
0
洞见畏来
专注于前沿科技趋势,剖析底层算法逻辑,深耕商业化场景落地
内容 633
粉丝 0
洞见畏来 专注于前沿科技趋势,剖析底层算法逻辑,深耕商业化场景落地
总阅读228
粉丝0
内容633