LLMs飞速发展,各个领域都在拥抱LLMs,因此是时候来了解一些LLMs的相关知识以及应用技巧啦!!
LLMs现状
目前已经有许多优秀的LLM,包括ChatGPT、GPT-4、MOSS、ChatGLM、LLaMA(及基于LLaMA的各种衍生的LLM)等。
这些LLMs的结构都是基于transformer演变而来,分为三种结构:以Bert为代表的encoder类模型;以GPT为代表的decoder结构;以GLM为代表的encoder-decoder结构。
他们基于各自的结构堆叠encoder/decoder的层数,增加模型的参数量,来达到增强模型能力的的目的。(当然不是模型越大越好)
LLMs是如何生成的
LLMs是在大规模的文本数据集上进行预训练,以GPT为例,GPT的结构是transformer的decoder部分,他首先进行无监督的预训练:基于已知的单词去预测未知的单词,可以简单的理解为根据前k个单词去预测第k+1个单词。
但仅通过预训练得到的模型其实并不能直接应用,因为他只是个简单的文本生成模型,他只会接着给他输入去补全文本。
因此需要基于预训练好的模型进行微调,来使预训练模型适应下游任务,也就是我们常说的fine-tune
还是以GPT为例,在预训练好的GPT模型上进行fine-tune,openAI进行了以下几种方式:SFT、RLHF、IFT等。
SFT(有监督的微调)
可以简单的理解为我们常用的有监督学习过程,既给定输入输出去对模型进行fine-tune,这一步的主要目的是为了得到一个初始化的ChatGPT、同时也是为了保障模型的安全问题(指不让模型输出一些有害信息)
RLHF(人工反馈的强化学习)
这一步主要是在SFT的基础上,对模型给出的输出进行打分,并反馈给模型,以便于模型更倾向于人类的偏好,减少一些输出有害信息、产生幻觉等现象。
到了这一步其实GPT就已经基本变成了ChatGPT了。
IFT(指令微调)
IFT的目的是需要模型学习到一类任务,比如写一首诗,但是诗的风格可能不同,这个时候就需要用到IFT了。
IFT除了需要输入输出,还需要一个部分那就是指令,也就是描述任务,例如刚刚提到的写一首诗。
LLMs的应用之fine-tune
LLMs的应用方式有很多,在这里我们先介绍比较古老的应用方式fine-tune,而已prompt engineering我们在后面的文章介绍。
其实在介绍LLMs是如何生成的时候,我们就已经介绍了常用的fine-tune方式。而在开源LLMs的项目中,官方往往会给出fine-tune的脚本及使用方式,因此从应用LLMs的角度来讲我们并不需要了解fine-tune的技术细节,当然这部分技术细节我会单独写一篇文章来介绍。
那么从应用的角度,我们去fine-tune一个LLMs只需要掌握官方给出的API(不开源LLMs)或者fine-tune脚本(开源LLMs),已经最重要的部分数据!!
数据准备很重要!!!! fine-tune LLMs不需要大量的数据,但是需要数据是高质量的数据,并且与需要适应的下游任务高度相关!!
比如我需要使用IFT的方式去fine-tune一个专门用于写诗的LLMs,那么我需要准备下面格式的数据:
1 | instruction:写一首七言律诗。 |
把这三个部分按照官方文档给出的示例格式准备好并使用官方准备的脚本或API就可以开始fine-tune啦!
因此以应用为目的的fine-tune其实是很简单的,只需要明确任务并准备好数据就可以了。
但是这样fine-tune出的LLMs是有弊端的,fine-tune后的模型在下游任务上表现的越好他失去原有的能力就越多,并且比prompt engineering需要更多的计算资源,因此现在使用这种方式去完成下游任务的情况越来越少了。