1 背景

印象中,语言模型都是靠记忆,是没有逻辑推理能力的。

拿这个数学问题来说

如果语言模型见过类似问题,只要见的足够多,背的足够多,是能回答的还不错。

但一旦题目做一些改动,改个数字,逻辑稍微改一下,他的错误率就会直线上升。

ChatGPT却做的出乎意料的好,把题目各种改动,也能保证不错的准确率。这里基于一些公开的论文,文章,数据集合,来​探讨其是如何解决的。

这里基于一些公开的论文,文章,数据集合,来讨论OpenAI是如何解决此类问题的。

2 从记忆到逻辑推理——样本设计

人脑的流程,是把问题拆分成细粒度的问题,然后step by step的解决。GPTChat的回答,跟人类的思考流程差不多是一致的。

​参考样本集合GSM8K,它的样本按照人类的逻辑流程,step by step的给出了答案,如下图

好处是什么?

生成模型都是根据上文来预测下文,上文越多,下文预测的就越准。上文逻辑越简单,预测的也更准。

拆分成小问题后,如x+y=什么这种预测,因为简单,所以特别准。

小问题预测准了之后,提供了更丰富的上文,反过来促进最后结果预测的准确率。

最后的效果,参看这篇论文

https://arxiv.org/pdf/2103.03874.pdf

对比直接拿结果学习,提升了10个点的auc。

3 更小的参数也能带来不错,甚至更好的效果

参考这篇OpenAI的论文——https://arxiv.org/pdf/2110.14168.pdf

纯finetuning的话,分别尝试了3, 6, 12, 175 billion的预训练模型,毫无疑问,175效果是最好的。

但参数多,模型慢,计算资源增大。

很多场景可能是性能优先,但准召要求一般。​你上来搞几个G的模型上线,那后端脸估计都要黑了。之前Bert时代,常用的方法是蒸馏。

这篇论文方法有点不太一样,单独训了一个verifier,流程如下图

把generator生成的结果,再去打分,送给verifier去train。

这里有非常多的炼丹技巧,例如训练几个epoch,样本量级大小的影响,选多少候选,verifier是评估最后结果还是每一步?dropout对效果的提升, 就不展开讨论了。

最后,经过一系列炼丹的操作,6Billion+verifier的效果是要比175billion的纯finetuing效果要好的。

4 进阶尝试——强化学习

参考这篇论文——https://arxiv.org/pdf/2211.14275.pdf

这篇论文是对比了直接拿结果学习和拿过程学习,结论是两者打平了。(但这篇论文看的我特别痛苦,内容实在是太乱)

这就挑战了之前的论文结论,step by step更能带来效果的提升。

暂时保留意见,因为这样就代表ChatGPT除了学到了1+1=2这种基本的记忆逻辑之外。还学到了更为进阶的逻辑知识,这个有点违反直觉。

​看后面有没有新论文来探讨这个吧。

5 最后

从样本设计来看,语言模型学习数学题,就是一个逻辑能力特别差的文科生,强行记住了几乎所有解题的大致流程。

但这真的算有逻辑能力么?

接下来会去重点扒一下GPT学习代码的能力,因为听说这个GPT多轮对话超强的根源。

但估计会很像我当年大学的女同学,代码的逻辑是真的难以理解。

但她们能背啊,反正题库就那么一些,背个七七八八。看到相似的题目,把背的代码凑合着改改写上去,最后得分还不差。

这种代码你说大致思路对了么?也对了,就是真的跑起来各种坑,后面稍微加点复杂的逻辑需求,她们也就傻眼了。

参考链接​

OpenAI数学题介绍页面——https://openai.com/blog/grade-school-math/

https://arxiv.org/pdf/2103.03874.pdf

https://arxiv.org/pdf/2110.14168.pdf

https://arxiv.org/pdf/2211.14275.pdf

公开的数据集——https://github.com/openai/grade-school-math

这篇笔记,感谢何晓楠,沈炜两位前同事,他们也做出了极大的贡献

Leave a Reply

Your email address will not be published. Required fields are marked *