几个 tuning 相关术语的关系、异同辨析:
(一)现在流行的 LLM(Large Language Model,大模型) 范式是:Pre-train —— Prompt —— Predict,市面上也有大量的文章在讲 Prompt 怎么写,怎么 engineering,那么里面具体是怎么个内涵呢?🤔
(二)pre-train、fine-tuning、prompt-tuning、prompt、in-context learning 这几个常常听到的词汇,具体它们之间又有什么关系呢?🤔
尝试解答下
从流程上讲,一个大模型要给 C 端用户使用,最起码要经历三个阶段:
(一)预训练,Pre-train。一般是采用无监督的训练,海量的语料,通过这个阶段,得到一个通用的 LLM(比如:GPT、BERT,等)。一般认为,这个 LLM 已经有很多的知识和能力。打个不一定恰当的比方,是一个基础扎实、博闻强识的大学生
(二)(针对下游任务做)微调,tuning。即针对性地让这位大学生去掌握一些技能、知识,以更好地完成更加具体的任务。这个 tuning 其实仍然是在一个模型的开发阶段。微调这个词,有广义和狭义之分。
狭义地讲,就是特指 fine-tuning 这个微调方式,即:通过投喂具体的下游任务训练样本,重新调整 LLM 本身的模型参数。这个方式代价是比较大的,因为要去改变 LLM 本身的参数,训练量大,而且当我有多种下游任务时,就不得不 copy 多个 LLM 副本出来,造成浪费。这种 tuning方式就是所谓的 LLM 迁就下游任务的 tuning 方式。
广义地讲,微调是指以相对从头训练 LLM 以较小的代价调整一个模型执行具体任务的能力。由于在新的范式下 prompt 本身的优化就能够极大影响模型执行任务的效果,所以其实这里就存在另外一种 tuning 即:prompt-tuning。需要特别注意的是:prompt 可以分 2 种,一种是 C 端用户直接对着模型输入的提问(!@#¥%……&*),一种则是提前训练好的、机器可读而人一般不可读的 prompt。在这里,我们做 tuning 其实就是去 tuning 这个机器可读的 prompt。如图所示,左边浅黄部分就是 prompt,而且是针对 LLM 的每层都有对应的 prompt,右边浅蓝部分则是 LLM 本身,两者一起发挥 predict 作用。在这种模式下,LLM 本身是不用做任何变化的,被 tuning 的只是 prompt 这部分的参数,复用性大大提高,训练成本大大降低。这种模式也就是所谓的下游任务迁就 LLM 的 tuning 方式。在这里其实就是拿 prompt 做为下游任务和 LLM 之间的适配层,应了那句老话:没有什么问题是加一层中间层解决不了的。
不管怎么样,如论是重塑 LLM 参数的 fine-tuning,还是额外加适配的 prompt-tuning,它们都是一个训练过程,都会产生新的模型参数(新的 checkpoint 文件)。还是用大学生的例子,今天我想让他成为一名职业律师,那么就要给他针对性地做法律培训,得上课。如果是 fine-tunig,那就是从幼儿园开始学,如果是 prompt-tuning 就是从大学开始学。从目前的文献看,基本上 prompt-tuning 的效果几乎赶上 fine-tunig 了,而同时随着 LLM 体积的增加针对具体下游任务做 fine-tuning 的代价只会越来越大甚至到不可接受的地步
(三)最后就是真正 C 端用户提问阶段了,这里就是真正我们目前一般所说的 prompt 阶段了。在这个阶段,用户以 prompt 的形式向 LLM 提问,并获得 LLM 的预测结果。这里有一种特殊的 prompt,叫 few-shot-prompt,也就是提问的时候带上一些样本 case 提供给 LLM 作为回答的参考,这种模式,在有些地方也叫 in-context-learning,就好像 LLM 从这个上下文里面直接 learning 到了一些知识用于回答问题。这里还是举大学生的例子,今天我想让他写一些诗歌,一种方法,自然是单独、专门上课(tuning),这种方法代价大一点,但是效果(可能好一些),另外一种方法就是我直接在 prompt 里面给他附上 N 首我喜欢的诗歌,然后说你给我照着样子写,这种方法代价几乎为 0,效果么(可能)差一些。理论上,当一个预训练的大模型越强,这个大学生越厉害,后一种方法的 roi 就越高。这种方式的一个实际的应用就是 ChatPDF:只要你上传一个文件就给分配一个可以基于这个 PDF 和你聊天的 bot,显然它这里是不可能做 tuning 的,其实只是用了 in-context-learning 的方式,把 pdf 的内容附加到用户的 prompt 里面去。ChatPDF.ai | Analyze PDF with AI, ChatGPT for PDF.chat。这里再将 in-context-learning 与第二步的 tuning 做个比较:
两个都是 learning,in-context-learning 从单次对话中学习,tunig 则在训练过程中学习
in-context-learning 是短时间的,过了记忆期之后就消散了,tuning 的结果则是固化在模型参数里面
in-context-learning 能够塞进去的内容受单次 prompt token 容量限制,tuning 则没有这个限制
假设一个 LLM 单次 prompt token 很大(几十、几百 K)同时记忆时间也更长,in-context-learning 和 tuning 之间的界限可能就更模糊了。一个具体的业务需求过来了,还得 case by case 看采用那种模式来实现
参考文献:
《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》
《GPT Understands, Too》
《The Power of Scale for Parameter-Efficient Prompt Tuning》
《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing》