今天给大家带来好友知乎@ybq的一篇文章,聊聊SFT模型为何不如Pretrain模型。
知乎:https://zhuanlan.zhihu.com/p/9649266595
叠甲叠甲 :本文纯瞎聊,单纯分享一下我和 知乎@真中合欢 ,以及大哥大姐,在茶余饭后拌嘴瞎聊的一些内容。本文不包含任何理论推导、实验证明,大家当个乐子读读就好了。
我们聊的问题是:在知识掌握层面上,sft 后的模型为什么不如 pretrain 模型效果好?或者说,为什么 sft 后的模型在知识掌握上会有幻觉?
首先,我们从统计学的角度出发:sft 数据和 pretrain 数据的分布差异太大,这种分布的偏离导致模型产生幻觉。围绕这个观点有很多解决幻觉的工作:在 sft 阶段引入 pretrain 数据,在 pretrain 阶段引入 sft 数据,有篇论文叫 self-distillation fine-tuning,让 pretrain 模型重写 sft 数据来拉近数据分布 …… 怎么说呢,分布差异这个观点肯定是正确的,但肯定不能作为这个问题的答案,有点太抽象了。
接着,我们从炼丹的角度出发:在 sft 训练的时候,什么 epoch 多啊,学习率小啊,数据质量高啊,容易落入局部最优啊,等等等等。但说来说去,感觉 sft 就是一个大号退火阶段啊,可退火阶段可并没有引入那么多的幻觉呀。这个答案依旧不能服众。
继续往下,我开始从数据的角度出发,围绕着“special_token,学习某种 pattern,sft 模型不再是传统的语言模型了,续写能力变成 QA 能力了”这几个点分析,说的应该也是都有道理,但总感觉还是没戳中关键点。
终于,真中合欢从哲学的角度出发,用两个字终结了我们的这个话题 —— 捷径 !
对啊,这两个字真的是太贴切了,几乎涵盖了上面我们讨论的所有要点:
- sft 在做什么?在找一条捷径,让 pretrain 模型可以直接说出答案,而不是续写一堆 token 后再总结出答案。
- 走捷径并不是一个褒义词,那么代价是什么呢?幻觉。
为什么走捷径会产生幻觉呢,我举个例子:中国的首都是哪里呢?
- pretrain 模型:这个问题问得好…… 中国最早的首都是…… 中国现在的首都是……
- sft 模型:北京。
pretrain 模型有没有这个知识?一定有。pretrain 模型需要多少个 token 才能说出这个知识?不知道。运气好的时候续写一百个 token 就提到了北京,运气不好的时候续写一千个、一万个都有可能。那么问题来了,sft 模型走捷径而抛弃的这一千个 token,到底有没有信息量呢?到底是不是推导出中国的首都是北京的关键 cot 过程呢? 大概率是有的,一旦学会了这种走捷径的方式,并且把这种捷径泛化到其他知识上,模型的幻觉也就产生了。
这里,一定不能总是用人思考的方式来揣摩机器思考的方式,我们认为“中国的首都是北京”是天经地义的几个 token 就学会的知识,模型可能是从《北京的发展史》这一本几万 token 的书籍中才学到的这个知识。
然后我就猜测:把 prompt 喂给 pretrain 模型,先续写 1W 个 token,再总结这 1W 个 token 得到 response,训练和推理的时候都不省略这 1W 个 token,这种方式估计大概率不会让模型产生幻觉,因为模型根本没学会走捷径。
不太对啊,聊着聊着感觉我说的这个实验就像是 o1 呀。我们真没有奔着 o1 的方向去聊天,但话题确实是水到渠成般走向了 o1。此时,我必须感慨一句,幸好 o1 是 OpenAI 提出的,这要是国内提出的技术方案,肯定全是负面言论:“这不就是快慢思考嘛”,“cot 而已,谁做不了呢?”,“推理时间这么长,有啥用?”……
o1 是一个大家都想到过但都不敢付诸实践的技术路线,感谢 OpenAI 引领大家走向这条路线。
好,这次的闲聊就分享就到这里。
PS:看到这里,如果觉得不错,可以来个点赞 、在看 、关注 。给公众号添加【星标⭐️】不迷路!您的支持是我坚持的最大动力!
欢迎多多关注公众号「NLP工作站」,加入交流群,交个朋友吧,一起学习,一起进步!