工欲善其事必先利其器,在了解大语言模型和GPT之前先要了解基本概念。
- LLM
Large Language Model (LLM) 即大型语言模型,也叫大语言模型,是一种基于深度学习的自然语言处理(NLP)模型,它能够学习自然语言的语法和语义,从而生成人类可读的文本。
所谓「语言模型」,就是用于处理语言文字(或者符号体系,编程语言)的 AI 模型,发现其中规律,可以根据提示(prompt),自动生成符合语言规律的内容。
LLM 通常基于神经网络模型,使用大规模的语料库进行训练,比如使用互联网上的海量文本数据。这些模型通常拥有数十亿到数万亿个参数,能够处理各种自然语言处理任务,如自然语言生成、文本分类、文本摘要、文本翻译、语音识别等。
例如,时下火爆的 ChatGPT 就是基于 OpenAI 开发的 GPT (Generative Pre-trained Transformer)模型,而 GPT 模型就是一种 LLM 模型。 - GPT
GPT的全称是Generative Pre-Trained Transformer(生成式预训练Transformer模型)是一种基于[互联网]的、可用数据来训练的、文本生成的深度学习模型。GPT能处理的任务包括:
NLU:Natural Language Understanding,NLG:Natural Language Generating。
GPT 是如何工作的?
GPT 即 Generative Pre-trained Transformer,直译为「生成式预训练转换器」。是由OpenAI 提出的一种基于 Transformer 模型的强大神经网络语言模型。
而 Transformer 模型 Google 提出的一种基于自注意力机制来提高训练速度的神经网络模型,用于处理输入序列之间长距离依赖关系。通常由多个编码器(encoder)和解码器(decoder)组成(Transformer 模型详细信息可以参考:十分钟理解 Transformer)。
GPT 的工作通常分为两个阶段:预训练阶段(pre-trainning)和微调阶段(fine-tune)。
预训练阶段:GPT 利用大量未标注的语料(如网上的文章、维基百科、书籍、社交媒体等)来训练语言模型。通常是把文本转换成 token(这个过程称为:Tokenization,OpenAI 使用的 Tokenization 算法叫:BPE),
然后再把 token 通过多层 Transformer 转换成一系列向量表示形式,这个过程叫 Embedding,生成的向量是一系列浮点数,表示 token 的含义以及 token 的上下文信息。最终文本会被转换成一个由向量组成的矩阵,即向量数据库(Vector Database),其中每一行对应于一个 token 的向量表示。
预训练得到的向量数据库包含了大量的语言知识和表示能力,可以作为自然语言或编程语言处理任务的重要基础,例如在文本分类、生成、理解等各种任务中都能发挥重要作用。
微调阶段:GPT 对预训练好的语言模型进行微调,将其迁移到各种有监督的 NLP 任务,并对参数进行 fine tune。有监督的 NLP 任务指的是需要标注数据(例如问题和答案)来进行训练和评估的任务。
当 GPT 处理文本时,首先会把文本转换成 token,然后再把 token 通过多层 Transformer 转换成一系列向量表示形式,即 Embedding,然后在预训练中生成的向量数据库中进行处理,生成输出文本上每个位置的向量表示,并将其作为下一步的生成输入,最终生成有所有的输出。
在输出生成过程中,GPT 还使用了一种称为自回归模型(Autoregressive Model)的技术。自回归模型是指在生成序列时,每个时刻只考虑之前生成的内容,而不考虑后面未生成的内容。这意味着每个序列值都依赖于之前的值,因此生成的序列会具有连贯性和逻辑性。 -
Transformer
transformer是一个利用注意力机制来提高模型训练速度的模型。trasnformer可以说是完全基于自注意力机制的一个深度学习模型,因为它适用于并行化计算,和它本身模型的复杂程度导致它在精度和性能上都要高于之前流行的RNN循环神经网络。
那什么是transformer呢?
你可以简单理解为它是一个黑盒子,当我们在做文本翻译任务是,我输入进去一个中文,经过这个黑盒子之后,输出来翻译过后的英文。
那么在这个黑盒子里面都有什么呢?
里面主要有两部分组成:Encoder 和 Decoder。
当我输入一个文本的时候,该文本数据会先经过一个叫Encoders的模块,对该文本进行编码,然后将编码后的数据再传入一个叫Decoders的模块进行解码,解码后就得到了翻译后的文本,对应的我们称Encoders为编码器,Decoders为解码器。
那么编码器和解码器里边又都是些什么呢?
细心的同学可能已经发现了,上图中的Decoders后边加了个s,那就代表有多个编码器了呗,没错,这个编码模块里边,有很多小的编码器,一般情况下,Encoders里边有6个小编码器,同样的,Decoders里边有6个小解码器。
我们看到,在编码部分,每一个的小编码器的输入是前一个小编码器的输出,而每一个小解码器的输入不光是它的前一个解码器的输出,还包括了整个编码部分的输出。 - 预训练模型
自带的最原始模型叫预训练模型,可以根据前文预测下一个字。它使用特殊的神经网络模型transformer来训练,训练数据来源于海量的互联网数据。 - fine tuning
微调,为了让模型能够根据人们的指令进行输出,我们进行微调,得到的模型叫instructGPT。为了让模型能够跟人对话,我们同样进行微调出来的模型就是类似chatGPT这样的模型,OpenAI也开放了fine tuning的接口来微调自己的模型,但自己提供的用于微调的数据相对于预训练模型的数据微乎其微,所以做了微调不能增加模型的知识,一般只是用来做分类、输出格式调整(如问出生年份,就不要要把月日也带上)。
在模型调优中,SFT(Supervised Fine-Tuning)是指使用预先训练好的模型,并在少量带标签的数据上进行微调的技术。这种技术常用于深度学习领域,特别是自然语言处理任务。
在模型调优中,**SFT的流程**
通常包括以下步骤:
a. 选取预训练模型:选择一个预先训练好的模型作为基础模型,例如BERT、GPT等。
b. 准备数据:准备一个小规模的带标签的数据集,这些数据应该与你要解决的具体任务相关。
c. 冻结模型参数:在预训练模型的基础上,冻结除了最后一层之外的所有参数,这些参数在微调过程中不会发生改变。
d. 训练最后一层:使用带标签的数据集训练模型的最后一层,使其适应特定的任务。
e. 微调整个模型:解冻所有冻结的参数,并使用带标签的数据集对整个模型进行微调。
f. 评估模型性能:使用测试集评估微调后的模型性能,确保模型在测试集上表现良好。
SFT在模型调优中的应用可以帮助提高模型的性能和准确性,使其更好地适应特定的任务或领域。这种技术在大规模预训练模型的基础上,通过利用少量的带标签数据,能够快速有效地对模型进行微调,从而在各种自然语言处理任务中取得良好的效果。 - embedding
可以做问答系统或者让chatGPT有记忆,也是就是输入你的知识库或者历史记录,当你提问的时候,GPT能快速找到资料和你的问题一起输入给chatGPT,广义的embedding包括embedding模型、embedding数据库、embedding距离计算等内容。OpenAI也开放了相关API可上传相关资料。 - 提示词prompt
输入给chatGPT的内容就是提示词,技巧包括:让她扮演角色(如小学老师不要以科学家口吻回答)、举例子(few shot)、chain of thought思维链、tree of thought等,提示词是否足够好直接影响输出的质量,所以也就有了提示词工程这个说法。 - 自治系统
自己管理自己的系统不需要人工干预,需要把各种外部工具、GPT模型、embedding模型、embedding数据库、prompt模板结合起来形成流水线。可以使用langchain框架设计自己的系统,也可以使用现成的如:autoGPT、babyAGI或者网页版的agentGPT。 - 多模态
GPT多数是提及的是基于文本这个模态,还有些模型是支持其他模态的,如语言、绘图、视频等模态。GPT4就是多模态模型。