AI实践思考(5)小模型训练心得

前面的文章提到,最近几个月,搞了一下小模型的DPO后训练,初步有了一些成果,分享一下心得。本文古法手搓,放心阅读。

一、为什么要做DPO后训练?

这段时间的AI系统的harness已经放缓,做了一下opencode,codex,和claude的三端互通,常规流程上的harness直接用codex和claude足够。剩下就只有两大块是不会被模型厂商盖过的提升:

专业能力的上限拔高,对我来说就AI系统的设计能力

私有数据的积累和运用优化,包括个人,团队,项目上下文。

而对于第一点设计能力,又有两条路同时在走,首先是基于大模型的优化,设计流程,上下文harness一搞,效果很明显,但上限也很明显。你会发现,harness完善后,大模型也换更好的了,但还是有一堵无形的壁垒卡住了设计能力的上限,我感受到这个上限来自两个核心:

上下文数据远远不足,我们在做创意设计的时候,其实用到的是远超项目上下文的数据,包括生活体验,具身感知,偏好审美,甚至是项目其他人的部分上下文,这些本质都是数据,目前这些数据是无法全量输入给AI的,因此AI其实算是蒙着眼睛缺少信息在设计。

基模预训练本质就决定了,大模型给出的答案是偏共识的,可识别可解释的,大量验证过的“正确”答案。而好的创意设计是打破常规的,非共识非标的,其中有天然矛盾。大模型是有抽象、类比、组合和推演能力的,我实际和AI深入探讨设计,AI是能推演和组合出新的可能性,但这不足以称作创新。这只是创意探索的一种形式之一,而对创意的评判,才是关键,因为评估标准代表了对设计真正的理解,而不是排列组合撞大运。

这也再一次证明了,数据和评估标准,是一切的核心。也因此,上述的这个上限,我觉得只能通过训练自己的专业领域模型,才可能有真正的突破。当然,预训练是做不起也不必要的,因为人类基础知识对设计来说都是要的。而创意领域的个人独有偏好,我觉得对基模来说是一种“噪音”,不同人的数据还会有冲突,因此大模型始终不会覆盖掉这部分。因此,我大胆预言:随着大模型提升,未来更多创作者都会去做自己的后训练。

除此之外,趁这个机会,摸一摸训练,探索一下边界的同时,也是做个人数据的积累,数据的积累始终不会亏。于是就开始了历时三月有余的训练。

二、当前训练成果

资源有限,小模型肯定不能追求大而全,于是我的选型是先专注于文字单模态的设计判断任务,也就是小模型的定位是以我的偏好来判断设计好坏,用DPO(Direct Preference Optimization)的方式来进行。主要使用的基模是qwen3 14b,训练单卡L20 48G,总共841条数据,对比基准模型是带harness的claude opus4.6,评测方式为训练数据无关的50题人工盲评,最终结果如下:

而白板14b跑一样的benchmark,只有19题结论是对的,也就是正确率是38%。。而人工审题后会发现一个有趣的现象:50题是由20题质疑坏设计,15题赞同好设计,15题边缘问题组成。白板模型回答正确的19题里,17题在质疑题,边缘0题,并且对的题里面,大多数理由没有正确完整命中,只是结论正确,真正结论和理由都正确的只有4题。因此严格来说,正确率是8%。。。

因此效果还是非常显著的,训练后正确率能达到96%。基本上可以说,在设计判断偏好这一个细分需求,可以跟claude opus4.6持平甚至略胜一筹。并且这里的opus4.6不是白板模型,是我AI系统里的主agent所用模型,因此是包含所有我设计harness和记忆的,本就经过调教,因此还是不错的,过程中试了各种超参数,训练方法调整和数据处理,也基本上是把48G榨干了。

结果其实不是最重要的,实战接入我们的challenger流程使用,感受效果接近,但不敢真的替换主力模型做判断,泛化能力还没验证,本身也只能说验证了这个大方向的可行性,虽说垂直领域小模型超过大模型很正常,但自己试一下,才算心里有数。

我觉得更有价值的是,过程中的变化,以及对数据积累和模型训练的理解。

三、一些有意思的训练过程细节

训练过程中耗时最大头就是攒数据和优化数据,整个训练过程,就是数据量不断增加,参数不断调整的过程,结果也越来越好。有意思的是,结果的变化不是线性变好的,而是很不均匀的,其中有三个最大的质变点:

第一个质变点是第一次做数据清洗,465条数据的时候,补充了一波数据,然后狠心清理了一波数据(都是手打的回答,非常心痛),缩水成了406条数据,但结果骤然提升一大截。从这之后,就开始不停清洗数据。

第二个质变点是数据量到700+的时候,表现有一个质变。

第三个质变点是换rsLORA。

关于参数没有太多可说的,每个人训练目标不同,数据不同,会差别很大,尤其每次数据变化,最优参数都会有变化,参数微调,没有想到特别好的方法论,只能是了解参数意义后,有个推断,然后尝试,我自己感觉有点撞大运了。

过程中经常有瓶颈期,也就是调来调去没有变化甚至倒退的情况,调参倒退就算了,优化一波数据也倒退,还是很考验道心的,因为不确定是不是模型上限的问题,还是训练方式有问题。

先进方法不等于好结果, DoRA概念更先进,所以默认应该比 LoRA/rsLoRA更好,实际不是,BF16之于4-bit也是类似,核心问题我认为还是数据不够,高精度是要数据量来撬动的

最近升级为RTX pro5000 72G后开始用qwen3 32b尝试,题目扩充到100题,提升没有质变,旧50题准确率提到98%,两道错题解决了,多出一道新错题,新50题错2题,准确率96%,基本就在这里波动。我觉得核心是数据量还是不够,撬不动模型,因此没有质变。

四、数据,一切的根基

如前文所说,攒数据和优化数据是整个训练过程中的绝对大头,占90%的时间。

由于这些数据跟我个人偏好和设计理念相关,因此过程一般是让AI根据不同情境提问题,我来回答,其中大部分问题都不合格,得筛选一遍,然后需要我手写答案,另一部分通过读取文章和记忆生成,然后再手动修改,因此特别费劲。下图是我跟AI对话来收集数据的一角,这些回答都是手打的,这还只是中间数据,拿去生成数据集后,有些数据质量不行后续还会被干掉,只能说痛苦面具。

一个显而易见的结论是,数据质量大于数据数量,那什么是好数据?以我们的DPO数据为例,DPO需要的是三元数据集:对同一个问题的两种回答的偏好,来反应人的偏好。因此需要一个问题prompt,一个chosen回答,代表你会选的,一个reject回答,代表你不选的:

1问题prompt的信息设计

问题prompt 给的信息要够做判断,但光看 prompt 本身还不够得出正确结论——还需要一个”我脑子里有但 prompt 没写的设计原则”。如果信息过多,直接问题里就给了答案,模型学的就是阅读理解而不是判断,如果信息过少,就会无法判断,或者判断变得模糊主观。换句话说,构造数据时每条都自检——“如果把 prompt 给一个聪明但没有我们设计经验的人,他能直接得出 chosen 的结论吗?” 如果能,就信息过度,删掉。反之则ok。

2reject回答的构造

一般来说chosen回答比较单纯,因为是我接受的答案,就直接写我的判断就行。而reject是我不接受的答案,这玩意就讲究了,不能随便写,如果明显是错的结论,那模型学不到东西,而是需要做到:“编一个我不认同,但是高质量的回答,有理有据,只是因为没有我的偏好知识,所以不被我接受的好回答”。可想而知,即使在AI辅助下,也是一个比较麻烦的事情。

3Chosen和rejected表层特征不可区分

这是大坑!大模型跟人类似,很喜欢模式识别,然后模型会倾向用最快的模式来完成学习,因此一旦Chosen和reject的表层特征可区分,模型就会直接学到这些模式,例如我实际遇到的:

例如训练初期,chosen总是更长(reject不好编啊!),然后模型就会觉得长度长的回答是对的。

例如chosen会用更多我的特征词,“本质”,“意图”,“核心”,reject会有更多负面的词等等,这些都会被模式识别。这些都优化了之后,发现又暴露了一个更深层的,模型发现chosen总是先否定再给方案,rejected 总是先肯定再提顾虑,这竟然也被模式识别到了!

校验方法很简单,构建完数据对要先做表层可分性测试,就是拿另一个独立模型,让他只看数据的表面因素,猜测哪个是chosen,并给出理由,大于60-70%就有问题。

4数据类型的构成很重要

刚开始,因为太多chosen是质疑的(主流观点反驳,设计严格等原因),导致了偏向拒绝的质疑过拟合情况出现。

所以,数据里要包括一定数量的同立场对,也就是chosen和rejected都赞同或反对,只是理由不同。即使是构建同立场对,也要注意前面的模式识别问题,我遇到一个坑,就是即使是同立场对,我的回答总是倾向解构问题找本质,AI也能抓住这个特征来走捷径。。。

5数据要尽量均匀覆盖不同场景

这点好理解,类比我们教一个人某个领域的知识,最好是把各个有代表性的场景都涉及到,且均匀一些,否则模型会过拟合。不同领域思路不同,以我们的设计评判举例,需要涉及不同模块的设计,不同阶段的设计,差设计典型,好设计典型,好设计因具体情况变差,性价比权衡,各种边缘情况等等。

总结和未来

最后总结一下,最近最多的感触就是AI时代,不管是AI系统优化还是训练,都在反复强调数据和评估标准这两个核心,现在我又发现,这两个核心背后有共性,就是对领域的理解和设计能力,做的过程中,我发现跟游戏设计没什么两样,不停在思考,品味,设计,权衡,抉择

目前训练暂时告一段落,已经感受到瓶颈,设计判断这个细分领域,只占游戏设计的极小部分,下一步质变提升,将从这几方面入手:

攒数据,至少到3000条以上高质量数据,就可以撬动更大号的模型,可以不局限设计判断这个细分领域了。

文字单模态受限,对游戏设计来说,丢失了太多信息,游戏是动态交互的系统,至少得是视频,因此,后续有机会,要搞视频数据来训。

要让模型有真正实际游玩的认知,让模型能够真正操控游玩游戏,获取游戏的状态。可以参考这两篇论文说的东西:Emergent Tool Use From Multi-Agent AutocurriculaWorld and Human Action Models towards gameplay ideation - Nature

写不动了,突然想到一句怪话,作为结尾:

当下时代最重要的四攒,攒钱,攒肌肉,攒数据,攒人品。