大语言模型(LLM)——一文说透大语言模型(LLM)

TangLu 未命名 2023-06-13 525 0

一、大语言模型(LLM)的起源

现今的LLM起源于早期的NLP(自然语言处理)。NLP有一个根本问题就是如何让机器去理解单词背后的真正含义,因为词本无意,一个单词需要在句子中才有正确的含义。比如“苹果”一词在今天到底是指水果还是手机是需要在一个句子中才知道的,所以为了更好的去理解一个词的真实意思最好就是用一句话来表示它。而在2017年诞生的 Transformer 模型通过其自注意力机制很好的解决了这个问题,它的处理过程大概如下:

1、用户输入“我有一只猫”这句话

2、Transformer会将句子尽可能的拆分成多个单词或字

3、每个单词或字都有自己的向量,其中的位置向量用来告诉模型这个字词应该出现的正确位置

4、自注意力机制对词向量进行一次重构,每个词都会知道自己和其他词的“关系值”,这样可以让上下文形成更好的关联,比如“一只”和“猫”的关联性更大。这里可以用传声筒游戏来解释自注意力机制,在原本的游戏中每个人只能听取到上一个人传递过来的消息,同时只能将这段话传递给下一个人,这就考验每一个人在过程中的记忆和表达能力。但是如果允许后面的人与之前所有的人进行对话,那么游戏的难度就会大大降低。而自注意力机制就是这样做的,它允许后面的人询问(Query)前面所有人知道的内容(Key & Value),甚至后面的人还能知道之前哪个人说的话对他来说是“更重要的”

5、这些向量数据会构建一个规矩,最终由Transformer中的解码器处理后找出最正确的结果

360截图20230825144645441.jpg


随之带来的现象就是大语言模型的规模(训练参数和训练成本都有巨大变化)迅速扩大,推动了NLP的发展。机器智能的规模效应也从量变到质变,当达到千亿稠密参数时模型的能力开始涌现,而在此之前见效甚微。按照模型的训练策略、架构、使用场景的不同,将诸多模型分为编码-解码模型、仅编码语言模型以及仅解码语言模型三种架构:

· 仅编码语言模型(双向注意力,善于理解):主要用于特征提取,理解输入,适合用来进行阅读理解、完型填空类(预测内容)应用,代表性模型 BERT

· 仅解码语言模型(单向注意力,擅长生成主要用于文本生成任务,根据收到的上文来生成下文,适合聊天、问答类应用,代表性模型 GPT

· 编码-解码模型:主要用于基于特定输入作为条件的文本生成任务,适合对话任务,例如翻译或摘要任务,代表性模型ChatGLM

由于 Bert 只运用了Transformer的Encoder部分,在对话场景中相比GPT有天然劣势。也正因为GPT这种生成式模型更容易做好zero shot或者few shot prompting任务,所以随着 GPT-3 的发布,目前LLM的发展已经由仅解码语言模型主导


根据模型参数和训练量的增长曲线将智能任务分成三种类型:

· 对数型增长:能力随着训练量对数增长,多见于常规的语言任务

· 突变型增长:能力在临界点突然爆发,比如一些挑战性任务

· 反常型增长:能力先下降,随后恢复增长。常见于误导性任务,当模型很简单的时候误导性小,而模型数据量扩大后反而因为“自作聪明”出现错误,但是再进一步扩大模型后,开始能识别这些错误并解决,最终提升准确率

1.jpg

训练参数:1亿参数的BERT --> 1750亿参数的GPT3

训练成本:GPT1/2训练成本$30K --> GPT3训练成本$12M --> GPT4(?)

模型发布时间参数量预训练数据量
GPT2018年6月1.17亿约5GB
GPT-22019年2月15亿40GB
GPT-32020年5月1750亿(175B)45TB
GPT-42023年3月1万亿(1000B)未公布


、训练前预备知识——AI领域专业术语解释
模型:通过对已有数据进行训练后的产物,通常会按照模型的参数量来为模型命名,比如Baichuan-13B、ChatGLM2-6B等,但是衡量模型能力的标准除了参数量以外还有训练时的数据量。比如参数量650亿的 LLaMA 凭借1.4万亿的训练量可以和参数量1750亿的GPT-3抗衡的原因就是GPT-3的训练量只有3000亿

自回归预训练:模型在预测下一个词时只会考虑前面已经看到过的内容,类似人类阅读,从左到右,一次读一个词,GPT系列模型就是使用自回归预训练打造

双向自回归预训练模型在预测下一个词时会同时考虑前文和后文

微调:微调是利用新的数据对已有模型进行继续训练的过程,微调的过程会修改模型参数并让模型永远记住这些信息。就像给一个已经掌握了基本知识的孩子提供某一个特定领域的辅导。由于微调是在已经训练好的模型上进行,所以相比训练来说可以使用更少的数据和时间

BERT:全称是Bidirectional Encoder Representation from TransformersBert,即双向Transformer的Encoder。双向表示模型在处理某一个词的时候能同时利用前面的词和后面的词两部分信息

GLM:通用语言模型的简称
GPT:生成式预训练模型的简称,这里需要理解生成和预训练是两个动作,是对模型进行预训练后再生成内容

Token:在训练模型时,首先会将文本转换为token作为模型的输入。token通常比单词短,在GPT-3模型中一个Token大概等于0.75个单词,而一个中文汉字大概对应两个token
向量:可以理解为对一个对象特征的多种表达,用来捕捉单词的语义和其上下文信息
Embedding:将数据进行向量处理的一种技术
过拟合:模型在训练数据上表现良好,但在未见过的数据上表现较差,过度记忆了训练集里的数据
步数(steps):训练的迭代次数,更多的步数会消耗更长的训练时间,但是可以提高对数据集的理解程度,拟合得更彻底。调整训练步数除了可以控制训练的持续时间以外,还可以起到收敛模型和防止模型过拟合的作用

batch size:预训练阶段的batch size往往非常大,范围在0.5M-4M,GPT-3和LLaMA的训练论文已经公开,实际训练时可以参考他们的参数 

learning rate:随着网络规模增长learnning会越来越小,GPT-3和LLaMA的训练论文已经公开,实际训练时可以参考他们的参数 

零样本提示(Zero-Shot Prompting):没有给模型进行任何文本提示,比如"我今天哭了,请问我的心情如何"这句话中没有告诉模型什么是心情,但是模型可以理解和推理这部分情感,最后给出回答。ChatGPT经过大量数据的训练后就能够执行一些零样本任务

小样本提示(Few-Shot Prompting):在对话中为模型添加了引导,逐步让模型学习到正确知识的过程

LLM可以学到的知识(根据上文推理正确的下文内容):

    · 语义:我在院子里种了西瓜和土豆 【草莓 \ 足球】

    · 知识:中国的首都是【北京 / 华盛顿】

    · 情感分析:整本书的情节跌宕起伏,实在是【太好看 / 太差了】

    · 翻译:猫是cat,狗是【dog / apple】

    · 推理:昨天吃了火锅,今天不想再吃了,我应该吃什么比较好【火锅 / 稀饭】

LLM学不到的知识:

    · 细节事实:过去某天某公司的股价【不在训练范围内,有可能乱给一个价格,这个就属于LLM的幻觉】

    · 复杂计算:111111111111 * 999999999 【没有专项训练,LLM主要学习的是文本学习】

    · 预测未来:中国足球赢得世界杯的时间 

    · 未经训练的数据:涂小刚的能力如何 

LLM能帮我们做什么:

    · 搜索:利用文本Embedding能力

    · 回答、总结:利用文本生成能力

    · 分类:利用提示生成能力

    · 分析:简单的推理能力

LLM的局限性:

    目前的LLM都是基于Transformer架构实现的,它的原理就是凭借自注意力机制记住一定范围长度的上下文,然后在模型大量基于事实的数据知识中组装输出后面的token。但是它自己并不能真正思考和理解每个事情的内在联系,它的本质还是在一定范围内进行数据变换。

    

三、大语言模型(LLM)训练数据需求特点

在GPT出现之前可能更多是使用人工标注数据,而现在可以使用ChatGPT来构造(因为它已经学习了大量被认可的知识),比如让GPT帮忙对1个问题泛化成10种,然后再泛化出对应的答案

1、数据集要够大

· 学习语言规律:大量训练数据可以帮助模型学习到自然语言的语法、语义,有助于模型生成语法正确、语义连贯的文本

· 多向性和泛化能力:大量训练数据包含了丰富的词汇和表达方式,有助于模型学习到语言多样性,同时提高模型的泛化能力,使其能够应对各种语言场景

· 上下文理解:上下文信息对于学习自然语言的语境依赖性至关重要,通过大量训练数据可以让模型更好地理解和生成符合上下文的文本

· 常识和知识获取:大量训练数据中包含了许多常识和知识点。有助于模型学习到这些知识,从而生成更准确、有深度的文本

· 鲁棒性和抗干扰:在训练过程中模型会遇到各种噪声和错误。大量训练数据有助于模型学习到这些干扰的特征,提高鲁棒性和扛干扰能力,防止恶意内容注入

· 模型容量:GPT模型通常具有大量的参数,需要足够的训练数据来优化这些参数,避免过拟合,即在训练数据上表现良好,新文本数据上泛化性能下降


2、对话数据非常重要

· 上下文建模:多轮对话实现连贯的文本生成

· 语言变异性:提高对自然语言多样性的理解,对同一个意思的不同表达

· 对话数据获取:这是难点,国外常见获取路径有电影对白、订票订餐等场景对话、日常对话、字幕等


3、高认知

高认知的数据价值更高,废话少,总是像模像样的进行回答。总结就是会装逼


4、数据需要清洗

·去掉低质量内容(通过转发、评论、点赞数确定内容质量)、去掉黄赌毒、涉证内容、去掉个人隐私数据


四、大语言模型训练各阶段介绍

1、预训练模型(Pre-traing)

模型在大量无标注文本数据上进行训练的阶段属于预训练,经过预训练后的模型称为大语言模型的基座(Base),反过来说基座就是在大量文本数据上进行预训练的初始模型(非专业领域的公司所提到的训练一般都是Finetuning而非Pre-traing。经过预训练的初始模型具有一定程序的通用语言理解能力、知道语法的基本结构,但是在特定任务上的表现尚不理想,比如向它提问,它可能会不停输出莫名其妙的词语出来


2、监督微调模型(Supervised Fine-Tuning\SFT)

目前开源的模型中大部分都属于监督微调模型。监督微调是指对预先训练好的大语言模型进行监督式训练(通过大量人工标注数据过的数据属于有监督的数据)。这些有监督的数据应该包含输入与期望的输出,这样模型才能学会如何从输入得出正确的输出。微调的过程就是为适应特定任务场景而进行的个性化训练。在进行微调的时候又分了不同的微调方式(过程基本一样,不一样的是微调过程中的参数)

· 全参微调(Fine-Tuning):效果最好的微调方式,但是对显存要求较高,通常是模型参数的4倍,比如7B模型需要显存大概就是28G

· Freeze微调:部分参数冻结,只微调部分参数

· Prefix/Prompt-Tuning:在模型的输入层添加额外可训练的前缀tokens,只训练这些带有前缀的参数

· Adapter-tuning:将较小的神经网络层或模块插入预训练模型,这些插入的神经模块叫做Adapter(适配器),微调时只训练这些适配器参数

· LoRA(效果和全参差不多,但是成本更小):通过学习小参数的低矩阵来模拟权重矩阵,训练只优化低矩阵参数

· LangChain:将数据集(WORD\PDF)使用分割器处理后,通过Embedding嵌入放入向量数据库。开源向量数据库推荐weaviate、qdrant、milvus、Chroma(严格来说这类基于LLM构建企业知识库的应用不在微调范畴)


3、奖励模型训练(Reward Modeling, RM)

该阶段是指为强化学习任务而设计的奖励函数,奖励函数可以用于评估AI智能体在特定任务中的表现。使用奖励建模方法,对多个候选输出的优劣进行人工排序,从而指导模型生成更好的回答。


4、人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF

RLHF与SFT相比它所输出的内容结果变化小。它是将人类专家的知识和偏好引入模型中,通过强化学习后的模型可以在没有大量标注数据的情况下,通过与环境交互在一定程度上自主学习和改进,ChatGPT、Claude皆属于RLHF模型。按照OPENAI的评估,人们更喜欢RLHF模型的输出。因为与生成内容相比,做判断和选择更容易,而RLHF就是由大量包含判断标签的数据库构成,从而让模型更符合人的使用习惯。但是RLHF是一个深奥的研究领域,非常难以训练,并不推荐任何人轻易尝试。


5、与人类对齐(Align AI with human values)

与人类对齐是指让人工智能模型理解、遵循并适应人类的价值观、需求和期望,它是大模型能够更好地服务于人类社会的关键因素。模型在处理各种任务时不仅要提供准确和有帮助的信息,还要确保所生成的内容遵循道德、法律和社会规范,避免产生有害或误导性的结果。为了让模型在训练和优化过程中充分考虑人类的价值观,在监督式微调阶段需要使用具有明确指导意义的标注数据,在奖励建模阶段设计合适的奖励函数,以及在强化学习阶段根据实际反馈调整模型策略。最终使模型更加可靠、安全和有用。


五、如何训练企业自己的大语言模型(LLM)

要让大模型学会企业私有领域知识的话有3种形式(1、2适合内容生成,3适合问答聊天)

1、自主训练:从零开始训练,需要准备海量的通用数据集以及企业私有的数据知识,Pre-train阶段就用上领域知识并投入大量的算力资源和时间,最终产出一个拥有完全知识产权的企业私有化大语言模型。成本最高,训练出一个大模型需要数百万美金(GPT3.5使用了1200万美金)

2、模型微调:使用已完成训练且开源的通用大模型,在其基础上增加企业私有数据进行微调,在数据准备、算力和时间上的要求都比完全自主训练更低(非专业领域的企业所提到的训练一般也是指该操作而非自主训练)。如果需要模型有垂直领域推理能力就需要采用微调来实现,该方式需要专业的算法人员介入才能让成本和结果尽量可控

3、外挂式注入:使用LangChain或类似框架,结合其他大语言模型底座,实现知识快速注入的一种方式。工作原理上是先将用户提交的问题和本地知识进行 Embedding,然后通过向量相似度实现召回。最后通过 LLM 对用户问题进行意图识别,并对原始答案加工整合。适合于一些需要增加一定专业知识但是不需要特殊思维(法律、医疗)的领域,成本低且能满足需求,如企业专属AI客服。目前常用的方法有LangChain和LLaMa Index,其中LangChain是用于构建基于LLM应用程序的通用框架,灵活通用,但是复杂;LLaMa lndex是一个搜索和总结文档的框架,可以高效搜索大型文本语料库,但是不如LangChain通用


六、如何评估一个大语言模型

不同模型的能力差异根本原因来自于训练数据。有些模型在数学上表现得很好,有些适合写代码,所以需要按照场景选择合适的LLM。在一些LLM的榜单测评中通常是按照三个不同的维度(3大类,70+子能力)对模型进行能力评价(目前很多大模型宣称超越GPT可能只是在一个小分类的分数上超越了而已,分数上的小规模差异并不能完全说明模型已经实现了超越

· 基础能力:包括了常见的有代表性的模型能力,如语义理解、对话、逻辑推理、角色模拟、代码、生成与创作等10项能力。

· 专业能力:包括了中学、大学与专业考试,涵盖了从数学、物理、地理到社会科学等50多项能力。

· 中文特性能力:针对有中文特点的任务,包括了中文成语、诗歌、文学、字形等10项多种能力。

在目前没有一个统一的评价办法,可以采用对不同模型进行相同提问 --> 对各个模型输入同样的问题,GPT-4当裁判对推理结果进行打分,以ChatGPT的回答作为100分,回答越接近得分越高的办法(虽然评估方法并不科学,但是目前也没有更好的办法)


评论