使用 TRL 和 OpenEnv 训练编程模型绘制水彩画
Hugging Face 发布了一个项目的开源复现,该项目通过编写 JavaScript 代码来训练编程模型生成水彩画。通过利用 TRL 和 OpenEnv,该项目证明了强化学习 (RL) 可以应用于“品味”和审美偏好,从而允许模型超越统计学上的平均图像,向特定的艺术风格迈进。
RL 作用于审美品味
该项目的核心目标是确定 RL 是否可以用于优化审美偏好,而非可验证的事实。奖励函数是四个组件的加权混合,旨在引导模型向特定的水彩风格靠拢:
- Pairwise Judge (60%): 一个视觉模型 (Qwen3-VL-30B-A3B-Instruct) 将候选绘画与从人工策划的池中随机选择的四个参考样本进行比较。这编码了策划者的特定品味。
- HPSv3 (30%): 一个开源的 7B 偏好模型,根据文本描述对普通人类群体可能更偏好的图像进行评分。
- Gate (5%): 一个二进制检查,确保草图可以编译,使用允许的库,并产生实际的颜料,而不是“作弊”(例如,在画布上写字)。
- Length (5%): 对较长代码片段的轻微推动。
为了测试这些评判者的影响,进行了三次训练运行:
| 运行 | Pairwise Judge 权重 | HPSv3 权重 | 结果 |
|---|---|---|---|
judge-led |
0.60 | 0.30 | 最具多样性和艺术趣味性的结果。 |
hps-led |
0.30 | 0.60 | 具有一致“湿画法”效果的、令人信服的水彩画。 |
hps-only |
0.00 | 0.90 | 可靠,但很快收敛到了相似的颜色和风格。 |
技术环境与约束
训练流水线依赖于一个专门的 RL 环境,该环境封装了模型的输出并将其转换为视觉渲染。
p5.brush 库
模型不再绘制基础形状,而是使用 p5.brush 库,该库模拟了物理水彩特性,如颜料渗出、纸张纹理和流场。为了保持水彩审美,模型被限制在仅包含 10 个方法的严格白名单内(例如,fillBleed、fillTexture、beginShape)。
参考池
品味由一个包含 178 幅绘画作品的参考池定义,分为 love 和 okay 两个层级。这些图像是由四个开源权重模型 (GLM-5.2, Kimi-K3, Qwen3-Coder-Next, 和 Qwen3.5-122B-A10B) 生成,并通过视觉评论家进行优化,最后经过人工评分。在训练期间,Pairwise Judge 会从两个层级中抽取参考样本,以确保模型在策略开发的早期和弱阶段也能接收到信号。
训练实现与优化
该项目使用了 TRL 中的 GRPOTrainer 和 Qwen/Qwen3.5-35B-A3B 模型。为了实现学习,需要进行几项关键的配置更改:
- 学习率: 从 2e-5 增加到 5e-5。
- 调度器: 从
linear更改为constant_with_warmup,以防止学习率过早衰减。 - 奖励缩放: 将
scale_rewards设置为none,以防止单个 Gate 拒绝会导致整个组的优势值 (advantages) 缩小。 - LoRA Target Modules: 更改为
all-linear,以确保适配器能够触及 MoE 架构中的每一个线性层。
关键发现与学习成果
分布偏移
在所有运行中,模型首先学会了消除“糟糕”的绘画(近乎空白的画布或无形状的渲染图)。在 hps-only 运行中,改进主要体现在分布的中位数上。然而,在 judge-led 和 hps-led 运行中,顶端质量也得到了提升,且随着模型因匹配策划池的风格而获得奖励,颜料覆盖率也翻了一倍。
约束 vs. 奖励
模型学会了忽略与奖励无关的系统提示词中的显式指令。例如,一个要求生成 15-30 个填充形状的要求被忽略了,转而生成了 7-9 个形状,因为形状的数量与奖励并不相关。
基础设施与成本
该流水线端到端托管在 Hugging Face 上,利用 HF Jobs 进行训练,利用 Spaces 进行 RL 环境和 HPSv3 评分器,并利用 Inference Providers 为 Pairwise Judge 提供支持。
- 计算资源: 单次 110 步的运行在单个 H200 GPU 上大约耗时 34 小时。
- 瓶颈: 渲染是主要的耗时环节,占用了 70-80% 的步进时间,因为 headless Chromium 在基于 CPU 的 Space 上通过软件渲染 WEBGL 画布。
未来方向
作者为未来的迭代指出了几个潜在的改进方向:
- 多步反馈: 实现一个循环,让模型能够看到自己的绘画并进行优化,类似于参考池的创建方式。
- 模型规模缩放: 测试更小的模型(例如 4B),因为初步实验表明它们可以生成有效的草图。
- SFT 预训练: 在开始 RL 之前,对参考池来源进行监督微调 (SFT)。