教AI画画,九个评分维度不如四个——把“绝对打分”换成“和好作品比一比”,模型自己就把代码从1.35万token压到2千以下。它验证了一件事:奖励函数不是越复杂越好,当五把尺子量同一件事,模型只会原地打转。差别在于,相对判断撑开了学习空间,人工锚点定好了“什么叫好”。

这有点像请九个美食评委给同一道菜打分——其中五位其实都在说"咸淡合适",一位在数用了多少粒盐,一位在检查有没有摆盘,剩下两位虽然认真但权重只有一丁点。菜好不好吃没人在乎,反倒是评委之间互相点头。打分打到 65 分再也上不去,厨师端出来的全是标准化的五瓣花。Surya 的解法是把"打几分"换成"和那道镇店菜比一比"——只留一个能拉开差距的判官,再把它的发言权拉到六成。神奇的是,菜的味道变好了,厨师写的菜谱(也就是模型输出的代码)反而从 1.35 万字瘦身到 2 千字,因为他终于明白,好菜不需要堆砌步骤。类比到此为止,实际差别是:所谓"判官"其实是可微分的奖励模型,每一次对比都在给参数喂梯度,而人工精挑的 117 张"心水"参考图则把"什么叫好"这件事写进了训练数据本身。
事件

一个 prompt 改不动一笔,他们决定让模型"写代码来画画"

用强化学习教AI画画,关键不在像不像,而在怎么让机器学审美——一个项目从奖励函数开始卡住。

用主流 AI 生图的人都有过这种体验:想改一束花的颜色,必须重新写整段提示词,再赌一次模型会给你想要的结果。Surya 在 2026 年 3 月发表的项目笔记里把这个限制写成了起点——“图像不可编辑,唯一的交互入口是 prompt。”

他和 Cameron 想绕开这条死胡同:让模型直接写 p5.brush(一种基于 p5.js 的水彩笔刷库)的 JavaScript 草图,渲染出的 PNG 退成副产品,代码本身才是产物。用户改代码就是在改画。

真正让他们卡住的,是更深一层的问题。强化学习(让模型在"试错—打分"循环里自己摸索最优策略的方法)能教会模型下棋、答数学题,因为对错有客观判据;可“好看”没有标准答案。Surya 在笔记里直接摊牌:奖励太硬,模型会收敛到一种偷懒的解法;奖励太松,模型会原地打转。设计问题本身,变成了奖励函数的问题。

团队包括 Surya、Cameron、Alex Wang,训练对象是 Qwen 3.5。整个训练在一个四步循环里跑了数千次:模型拿到“画一朵水彩木槿”这样的提示词,写出一份完整 JS 草图;草图在沙箱化的 Puppeteer 浏览器里渲染成 PNG;另一组裁判模型把 PNG 和参考池里随机抽出的两幅画对比,挑出更好的那张;胜负转成奖励信号,通过 GRPO(一种按组内相对名次更新参数的强化学习算法)回灌给模型,循环重启。参考池里的画作由作者逐张人工分级,“心水”级样本进入对比池,每一轮评判,模型都在和这些被认定“好”的作品比。

0.65
旧九信号奖励函数封顶值
来源:Hacker News 热门(buzzing.cc 中文翻译)
1,664
人工逐张分级的参考图总量
来源:Hacker News 热门(buzzing.cc 中文翻译)
117
进入对比池的"心水"级样本
来源:Hacker News 热门(buzzing.cc 中文翻译)
1.35万→2千
单次输出代码 token 压缩幅度
来源:Hacker News 热门(buzzing.cc 中文翻译)

项目页只放了画作截图、训练流程图和论文答辩视频,没有公布完整的奖励曲线或消融实验(逐一去掉某项变量看效果的研究方法)数据。后续那场“九维评分塌缩成四维、再把绝对打分换成两两对比”的实验,是这次重写的真正戏肉——它也是下一节要拆的东西。

为何要紧

九个裁判,其实在测同一件事

奖励函数不是越多越好——当五把尺子量的是同一个尺寸,模型只会原地打转。

第一版奖励函数塞了九项信号:代码能不能跑通、用没用对 p5.brush 这套画笔库、长度有没有到目标档位、HPSv3(一种用人类偏好数据训练出来的评分模型)给几分,再加 GPT-5.4 和 Gemini 组成"委员会"判断是否贴合提示词,最后还有可识别度、美感、技法、纵深四个独立裁判。看着齐全,但模型训练到 0.65 奖励就再不动了。每次吐出来的图都长一个样:一朵五瓣平贴的剪纸花,奖励分数还在涨,画本身没有任何进步。

把九个信号拆开单独看,问题就藏不住了。四个质量裁判和"贴合提示词"之间的相关性高达 0.85 到 0.95——换个说法,五个人拿着五把不同的尺子,量出来却几乎是一样的数字。这五把尺子其实在量同一件东西。

代码长度奖励占总分约三分之一,但到第 30 步就饱和了(已经达到上限,再涨不动了),之后对模型来说这段信号等于零梯度(提示"该往哪改进"的方向信号,趋近于零就是没方向),它从中学不到任何新东西。唯一还在变化的是 HPSv3,但权重只有 0.10——微弱得像背景噪音。

裁判团自己先内卷了。它一遍遍告诉模型同一件事:做一朵贴题的、可识别的、技法尚可的花。模型听懂了,于是精确地交付了这件事——一朵永远五瓣的剪纸花。奖励函数把"什么是好"拆得太细,反而堵死了模型探索的空间。

这背后是一个被低估的工程常识:奖励函数不是越复杂越能反映"审美",当多维信号高度相关,复杂度只是在重复确认同一个判断。最反直觉的一点是——把打分维度从九个砍到四个、把"打几分"换成"和好作品比一比",模型反而学会了更简洁的代码画出有构图意识的作品。下一个问题是:这把尺子到底该怎么造,下一节拆给你看。