把简单迷宫变难,AI写代码的水平就飞涨了
有个人专门设计迷宫。手头攒了一大摞简单迷宫,一般人不到一分钟就能走出去。某天他换了个思路:不画新迷宫了,把老迷宫改难。岔路口加一条看着像捷径、走进去却绕回原点的弯路。把宽走廊收窄,让人犹豫要不要钻。死胡同伪装成出口的样子。乍看还是那些迷宫,可每一步都得多想几秒。
能自动写代码的AI早就有了,简单任务应付得不错。可光喂简单题,就像让人永远走那些一分钟就出来的迷宫,水平很快到顶。缺的不是更多练习题,而是更难的练习题。有个小团队第一次尝试:不去搜集新题,而是把现有的编程题一轮一轮地改难,每轮用的招数都针对写代码时真正需要的能力。
改题的招数跟改迷宫一模一样。加新限制条件,好比规定走迷宫只能左转三次。把常见要求换成冷门要求,就像宽廊变窄缝,得换策略。增加判断步骤,让解题链条变长。最巧的一招:塞进一个看着对、其实藏了小错误的示例答案,活脱脱一个伪装成出口的死胡同。还有一招:收紧对速度和内存的要求,像给迷宫加上计时器,逼你走得又快又准。
团队从大约两万道基础编程题起步,一轮一轮地演化。每轮结束,把所有版本的题合在一起训练AI,再拿一组它从没见过的题来测。三轮下来效果最好,总共大约七万八千道题。到第四轮反而变差了,就像迷宫改得太绕,已经不是在锻炼方向感,纯粹变成噪音。团队果断停手。
最能说明问题的对比来了。同样的题量,一组AI练两万道简单题,另一组练差不多数量的难题。结果呢,练难题的那组在一个通用编程测试上高出十多个百分点。量一样,难度不同,差距巨大。就像两拨人各走一千座迷宫,一拨走的全是弯弯绕绕的难迷宫,碰到没见过的新迷宫时明显更快找到出口。
有人担心:会不会是改过的题碰巧跟考试题越来越像,等于提前泄题了?团队专门算了训练题和测试题之间的相似度,发现每演化一轮,相似度反而略微下降。AI不是在背答案,是真的学会了面对陌生代码时怎么想。
这个叫WizardCoder的AI,在五个主流编程测试、八种编程语言上超过了当时所有公开可用的同类系统。小号版本甚至赢了几家大公司的商业产品,大号版本在最难的测试里追平甚至超过了ChatGPT。从头到尾,变的不是学生,也不是教室,而是作业的质量。同一摞迷宫,改得更刁钻,走出来的人就更强。