一段AI用JavaScript代码画水彩花朵的视频,8月23日发布后播放量冲到150万,评论区最常见的问题是“这也算AI画画?”。有意思的是,原作者Surya Narreddi至今只公开了一段更早、更窄的训练说明——单朵花特写,没有任何能下载运行的代码。真正把这套“用强化学习训练模型学审美”的方法摊开给所有人看的,是Hugging Face工程师Sergio Paniego几天后发布的复现博客:参考图片池、RL环境、训练脚本、训练好的模型全部开源,一条命令就能跑起来。

比复现本身更值得琢磨的,是过程里暴露的一件事:这套系统一开始根本不work,在某个分数上卡了很久动不了,靠拆掉大半个奖励函数才重新往前走。这比“AI学会画水彩”本身,更能说明“审美”这种东西到底能不能被强化学习教会。

从9项奖励卡死,到4项奖励能跑

Narreddi最初设计的奖励打分器有九个维度:编译成功、用没用库、代码长度、美感分、prompt遵循度、可辨识度、技法、深度……结果奖励值卡在0.65附近不再上升,模型反复生成扁平、重复的五瓣“剪贴画”式花朵。

复盘发现,多个“质量类”评委给出的分数相关系数在0.85到0.95之间——本质上是几套打分在重复评价同一件事,梯度互相抵消;代码长度这项奖励也早早饱和,不再提供有效信号。

砍成4项(gate、length、HPSv3、pairwise judge)之后,反而更快冲过旧瓶颈:典型代码长度从约13500 tokens降到不到2000 tokens。模型学会了少写但精准地用配方,而不是靠堆代码量骗字数奖励。

奖励简化的三个数字 9→4 奖励维度数量 0.65 旧配方卡死的分数 13500→2000 典型代码长度(tokens) 评委相关系数0.85-0.95,梯度互相抵消,是真正的卡点

参考图库自己就是奖励函数,但这库有点“近亲繁殖”

这套“品味”从哪来?两次实验用的都是同一种方法:让模型自己画,再让人来挑。Narreddi最初手工评了1664张生成图,分成love/okay/nope三档,只有117张“love”级别的图进了参考池的种子;Paniego这次复现同样没有用一张人类画的水彩,而是让GLM-5.2、Kimi-K3、Qwen3-Coder-Next、Qwen3.5-122B-A10B四个开源模型各自照着真实木槿花照片写代码作画,再逐张打分,178张入选love/okay两档。

参考图库怎么来的 模型生成水彩草图 基于真实木槿花照片 人工逐张打分 1664张,分 love / okay / nope 精选入参考池 117张种子 · 复现版178张 pairwise judge 用这批图打分 → 反哺训练 没有一张来自人类画的水彩

参考池等于奖励函数——这句话听起来只是工程细节,其实是整个项目最关键的一层。模型不是在学“水彩画好不好看”这种普遍标准,它在学“某个人挑出来的、由AI生成的图像子集长什么样”。这个圈子转了一圈都没有走出AI生成的范畴。p5.brush本身是存在多年的水彩笔刷库,不缺真正的人类作品,缺的是这批作品被系统性收进训练数据的路径。

  • 风险.参考池全部来自AI生成图像的人工筛选,尚未引入独立的人类画作验证泛化边界。

pairwise judge解决了什么,没解决什么

判定“画得好不好”靠一个视觉模型,把候选画和四张参考图放在一起,两种呈现顺序各跑一遍:都赢记1分,都输记0分,顺序不一致打平记0.5分。这解决的是位置偏差——避免judge天然更认排在前面的那张。但它解决不了、也不可能解决judge自己的审美倾向:可能天生偏爱居中构图、饱和色彩、对称花型,这些偏好不会因为“双向评估”被抹掉,只是不再因为谁先谁后而波动。

两个评委问的是不同问题:HPSv3判断“这是不是一朵花”,pairwise judge判断“这画符不符合我选的风格”。权重怎么分配,直接决定训练出来的模型更像“大众审美”还是“策展人偏好”。

配方pairwise judge权重HPSv3权重训练状态
hps-only00.90验证跑,确认管线能学,60步停止
hps-led0.300.60110步,学得动
judge-led0.600.30原始配方,110步,更慢但也学得动

三条曲线都在涨,说明就算把更多权重压给“我的品味”而不是“大众平均分”,模型依然能被引导,只是爬得更慢。

参考池终究是一面自家镜子,照得出偏好,照不出镜外的美。

争议:这事到底新不新,好不好用

社区讨论的焦点不是技术细节,是“这算不算新”——创意编程生成图像的路子,玩了很多年,AI只是换了执行者。这个质疑有一定道理,但没打到要害:真正的新变量不是“AI能画画”,而是能不能用RL把一个人的具体偏好教给模型,并且开源到人人可复现。三组权重都学出来了,说明这条路至少走得通。

但两处硬骨头没解决。代码即可编辑这个卖点,对不写代码的人几乎不成立——改一行brush.fillBleed(0.25)远不如拿鼠标直接涂一笔直观,这个优势目前只惠及工程师。渲染管线也不轻:每张图靠无头浏览器渲染加视觉判官打分,跟直接微调扩散模型比,说不上更高效,只是换了一种“看得懂”的代价。

Narreddi完整的技术报告还没发布。这次开源复现相当于提前把配方摆上桌面——好不好吃,现在谁都能自己下厨试。真正决定这套方法能走多远的,不是模型学会了几种笔刷用法,而是那个参考池什么时候能装进一张真正由人画出来的水彩。