大语模型前世今生

news/2024/11/15 1:58:24/

引言:席卷世界的大语言模型浪潮

       2022年11月30日,OpenAI公司发布了ChatGPT。这迅速成为了社会各界关注的焦点,ChatGPT能够如此快速,准确的完成文本生成,信息抽取,机器翻译,甚至代码生成等复杂任务,甚至具有长期记忆。只需要给出合适的Prompt,ChatGPT就能完成我们的需求。

        

       从本质上来讲,ChatGPT属于一类基于GPT技术的大语言模型(Large Language Model,LLM)。大语言模型极大地改变了自然语言处理领域的研究范式,越来越多的科技公司为了赶上ChatGPT引发的时代浪潮,也纷纷给出了自己的大语言模型,包括Google、Microsoft、NVIDA等一系列顶尖科技公司。

                        

        总的来说,以ChatGP为代表的大语言模型在许多方面有着长足的进步,主要是在通用任务的处理上胜过了大多数微调小模型,并且出现了在小规模预训练模型中不存在的“涌现”能力,进一步强化了大语言模型的智能程度。因此,大语言模型被视为通往通用人工智能(Artificial Generative Intelligence,AGI)的可能途径,为机器智能的实现给出一条可能的探索路线。

那么大语言模型究竟是什么?它是如何发展起来的?又凭什么成为颠覆性的研究范式?在具体的研究领域,又有着哪些实际应用?这篇报告参考了大语言模型发展历史上的关键技术,以及最新的综述文献,将介绍如下内容:

 1.语言模型的介绍:梳理半个世纪以来自然语言处理研究范式的转变,介绍大语言模型出现的时代背景。

 2.大语言模型的背景知识:介绍有关大语言模型的具体概念、涌现能力、关键技术,和常用的训练资源。

 3.大语言模型的训练技术:包括数据收集、基础训练、参数精调和类人对齐,并介绍如何评估大语言模型以及评估市面上的对话型人工智能,并介绍通过开源项目训练本地大语言模型的可能技术路径。

 4.总结与思考。

1. 什么是语言模型?

1.1 自然语言处理的研究范式

        从历史上来看,自然语言处理的研究范式变化是从规则到统计,从统计机器学习到基于神经网络的深度学习,这同时也是语言模型发展的历史。

    要了解语言模型的发展历史,首先我们需要认识什么是语言模型。

1.2 语言模型

        复旦大学的《自然语言处理导论》对语言模型的发展做出了详细梳理,其给了语言模型一个定义:语言模型(Language Model,LM)目标是建模自然语言的概率分布,具体目标是构建词序列w1w2...wm的概率分布,即计算给定的词序列作为一个句子出现可能的大小。

        即语言模型的目标就是计算词序列的概率:

P(w1w2...wm)

        问题在于,联合概率P的参数量十分巨大,如m代表句子的长度,N代表单词的数量,那么词序列w1w2...wm将具有以下的可能:

Nm

        而这会带来巨大的模型参数量,以以《牛津高阶英汉双解词典》为例子,其中收录了185000个单词,以每句平均长度15个单词,模型参数量将有:

18500015=1.018x1079

        与之相比,宇宙中的原子数量大概在这个量级,这实在是一个不可想象的天文数字。因此,如何减少模型的参数量,成为一个迫切需要解决的问题。其中的一种简化思路是,利用句子序列从左至右的生成过程来分解联合概率:

也就是说,将词序列w1w2...wm的生成过程看成单词的逐个生成,假设第i个单词的概率取决于前i-1个单词。需要指出的是,这种分解本身并未降低模型所需的参数量,但是这种转换为接下来的简化提供了一种途径。

1.3 统计语言模型

    1975年,Frederick Jelinek等人在论文《Continuous Speech Recognition by Statistical Methods》中提出并应用N-gram模型于语音识别任务,也即所谓的元文法模型。根据上述假设,词的概率受前面i-1个词的影响,称为历史影响,而估算这种概率最简单的方法是根据语料库,计算词序列在语料库中出现的频次。

        问题在于,随着历史单词数量的增加,这种建模方式所需的数据量会指数增长,这就是维度灾难。此外,当历史单词序列越来越长,绝大多数的历史并不会在训练数据中出现,造成概率估计丢失。

为了解决上述问题,进一步假设任意单词的出现概率只和过去n-1个词相关,即:

        当n越大,历史信息也越完整,但是参数量也会增大。实际应用中,n通常不大于3

         n=1时,每个词的概率独立于历史,称为一元语法(Unigram)

         n=2时,词的概率只依赖前一个词,称为二元语法(Bigram)或一阶马尔可夫链

         n=3时候,称为三元语法(Trigram)或者二阶马尔科夫链。

        实际运用中,由于语言具备无穷多可能性,再庞大的训练语料也无法覆盖所有的n元语法,而语料中的零频次并不等于零概率,因此还需要使用平滑技术来解决这一问题,产生更合理的概率,对所有可能出现的字符串都分配一个非零概率值,从而避免零概率问题。

        不过,高阶n元语言模型面临严重的数据稀疏问题,单词的离散也忽略了单词之间的相似性。因此,自神经网络发展以来,神经语言模型逐渐成为新的研究热点,所采用的技术包括前馈神经网络、循环神经网络、长短期记忆循环神经网络语言模型等等。

1.4 神经语言模型

        随着神经网络的发展,神经语言模型(Neural Network Language Models,NNLM)展现出了比统计语言模型更强的学习能力,克服了n元语言模型的维度灾难,并且大大提升了传统语言模型的性能。

        神经网络先进的结构使其能有效的建模长距离上下文依赖,以词向量(Word Embedding)为代表的分布式表示的语言模型,深刻地影响了自然语言处理领域的其他模型与应用。

1.4.1 前馈神经语言模型

        前馈神经网络语言模型沿用了马尔可夫假设,即下一时刻的词只与过去n-1个词相关,通过将词映射到低维向量,从而解决了维度灾难问题。其主要由输入层、隐藏层和输出层构成。在输入层中,由文本组成的词序列转化为模型可接受的低维稠密向量。

        但是,在语言的应用场景中,固定长度的历史并不总能提供有效信息,有时候需要依赖长期历史才能有效完成任务,这时就需要新的神经网络模型来处理长序列问题了。

1.4.2 循环神经语言模型

        举例来说,对于一下这个长序列:

        采用较短的固定长度的历史就无法判断后面的“他”是指“小李”,而循环神经网络在处理序列信息时具有优势,其上一时刻的模型隐藏层状态会作为当前时刻模型的输入,因此每一时刻的隐藏层状态都会维护所有过去词的信息。因此循环神经网络语言模型不再基于马尔可夫假设,每个时刻的单词都会考虑到过去所有时刻的单词,词之间的依赖通过隐藏层状态来获取。

        不过尽管如此,循环神经网络在处理长序列时可能会遇到梯度消失或梯度爆炸的问题导致训练失效。对于梯度爆炸可以采用算法来控制梯度上线,也就是所谓的“梯度裁剪”。而对于梯度消失,则需要采用一些使用了特殊门控组件的循环神经网络,也就是所谓的Gated RNN。

1.4.3 长短期记忆循环神经网络语言模型

        长短期记忆神经网络(Long Short-Term Memory,LSTM)是一种Gated RNN,适合被用于处理和预测时间序列中间隔和延迟非常长的重要事件。

        标准的RNN中只包含着单个tanh层的重复模块,而LSTM存在着更多以特殊方式进行交互的神经网络。这些特殊模块可以决定信息的遗忘和记忆,实现对重要信息的长期记忆。

        相比于原始的RNN的隐层(hidden state), LSTM增加了一个细胞状态Ct(cell state),这是信息记忆的地方,从每个单元中流过时,通过控制门来决定信息的增删。LSTM的门结构主要有3个,为“遗忘门”,“输入门”和“输出门”。通过门控组件来决定什么信息需要被长期记忆,而哪些信息则是不重要的可以遗忘的,以此保持长期记忆的能力。

        打一个比较通俗的比方,RNN就像只依靠记忆,对最近发生的事情印象深刻,但很容易遗忘过去比较久的事情。LSTM就像借助一个日记本来辅助记忆,可以把想要记住的信息写在日记里(输入门),但是由于本子的大小是有限的,因此需要擦除一些不必要的记忆(遗忘门),这样来维持长期的记忆。

1.5 预训练语言模型

        受到计算机视觉领域采用 ImageNet 对模型进行一次预选训练,使得模型可以通过海量图像充分学习如何提取特征,然后再根据任务目标进行模型精调的范式影响,自然语言处理领域基于预训练语言模型(Pre-trained Model,PLM)的方法也逐渐成为主流。

        谈到ImageNet,这里多说两句,ImageNet是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库,这个项目始于CVPR2009。有趣的是,ImageNet的层级结构,是从上世纪90年代末开始的WordNet项目中派生而来的,其实NLP和CV两个领域一直在不断互相影响,互相促进。

1.5.1 ELMo

        针对单词在文章中根据上下文有着不同语义的实际问题,研究人员提出了“动态词向量”,也就是上下文相关词向量。2018年ELMo(Embeddings from Language Models)提出通过首先预训练双向LSTM网络,而不是学习固定的单词表示,并进行参数微调来捕获上下文信息。

        双向语言模型是从两个方向进行语言模型建模:从左到右前向建模和从右到左后向建模。双向建模带来了更好的上下文表示,文本中的每个词能同时利用其左右两侧文本的信息

         ELMo也主要由三层结构组成,输入层、隐藏层和输出层。其中,输入层为了减少整词不在词表中的情况,对输入文本进行了字符级别的编码。之后通过卷积神经网络对字符级的表示进行语义组合,在每个位置的卷积输出上使用池化层,再通过Highway网络进行进一步转化,得到输入层的.

        ELMo使用了两个独立的编码器分别对前向和后向进行语言模型建模。通常认为,模型低层能捕捉语法等基础特征,高层能捕捉语义语境等更深层次的语言特征,双向的 LSTM 能保证在编码过程中每个位置都能获得该位置过去和未来位置的词信息.

1.5.2 Transformer

        2017年12月6日,Google发布了论文《Attention is all you need》,提出了Attention机制和基于此机制的Transformer架构。这种架构的价值在于其是一种完全基于注意力机制的序列转换模型,而不依赖RNN、CNN或者LSTM。

         Transformer架构中包括编码器Encoder和解码器Decoder,整个网络结构完全以Attention机制以及前馈神经网络组成。Attention机制从人类视觉注意力中获得灵感,目标在于将注意力集中与所处理部分对应的语境信息,实际实现中则是计算每一个词与其他词的注意力权重系数。

    基于Transformer架构以及Attention机制,一系列预训练语言模型被不断提出。

1.5.3 BERT

        2018年10月,Google AI研究院的Jacob Devlin等人提出了BERT(Bidirectional Encoder Representation from Transformers)。具体的研究论文发布在arXiv上,标题是《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。

 BERT 利用掩码机制构造了基于上下文预测中间词的预训练任务,相较于传统的语言模型建模方法,BERT 能进一步挖掘上下文所带来的丰富语义,这在很大程度上提高了自然语言处理任务的任务性能。

        BERT 所采用的神经结构由多层 Transformer 编码器组成,这意味着在编码过程中,每个位置都能获得所有位置的信息,而不仅仅是历史位置的信息。BERT 同样由输入层,编码层和输出层三部分组成。

        在预训练时,模型的最后有两个输出层 MLM 和 NSP,分别对应了两个不同的预训练任务:掩码语言模型(Masked Language Modeling,MLM)和下一句预测(Next Sentence Prediction,NSP)。

         BERT的出现具有重要意义,不仅在于其出色的表现,更启发了的大量的后续工作,尤其是“预训练+参数微调”的研究范式。根据这一范式,此后出现了更多的预训练语言模型。

1.5.4 GPT

        同样是2018年,在BERT风靡NLP领域的时候,OpenAI公司同样发布了自己的模型GPT( Generative Pre-Training ),发表在论文《Improving Language Understanding by Generative Pre-Training》中,这是一个典型的生成式预训练模型。

        有趣的是,这篇文章的标题叫“使用通用的预训练来提升语言的理解能力”。OpenAI并没有给自己的语言模型起名字,因此所谓的“GPT”的名字其实是后人给他起的。后来OpenAI不断改进模型的时候也采取了这个名字,推出了GPT-2、GPT-3乃至ChatGPT和最新的GPT-4。

        2019年2月,OpenAI随后发布了GPT-2,它也是基于Transformer架构的语言模型,它不仅继承了初代GPT运用大规模无标注文本数据训练模型的能力,并且能通过FineTune优化模型表现,并将知识迁移到下游任务。

        除此之外,GPT-2还更侧重于0-shot设定下语言模型的能力。也就是说,是指模型在下游任务中不进行任何训练或微调,即模型不再根据下游任务的数据进行参数上的优化,而是根据给定的指令自行理解并完成任务。

        GPT-2是由多层 Transformer 组成的单向语言模型,主要也由输入层,编码层和输出层三部分组成,采用生成式预训练方法,单向意味着模型只能从左到右或从右到左对文本序列建模,所采用的 Transformer 结构保证了输入文本每个位置只能依赖过去时刻的信息。

        GPT的训练主要包括无监督预训练和下游的有监督参数微调。在无监督预训练中,GPT 模型具备了一定的通用语义表示能力。通过参数微调,在通用语义表示基础上,根据下游任务的特性进行适配。

1.5.5 局限性

        重新回顾刚才介绍的BERT和GPT,我们发现它们虽然都是基于Transformer的语言模型,但是其结构完全不一样。

        BERT通过选用掩码语言建模任务,即掩盖住句子中一定比例的单词,要求模型根据上下文预测被遮掩的单词。这类模型在预训练中只利用Encoder,因为在Encoder中能看到全部信息,因此被称为编码预训练语言模型(Encoder-only Pre-trained Models)。

        基于编码器的架构得益于双向编码的全局可见性,在语言理解的相关任务上性能卓越,但是因为无法进行可变长度的生成,不能应用于生成任务。

         GPT所使用的方式是将Decoder中输入与输出之间差出一个位置,主要目的是使模型能够通过上文预测下文,这种方式被称为Autoregressive(自回归)。此类模型只利用Decoder,主要用来做序列生成,被称为解码预训练语言模型(Decoder-only Pre-trained Models)。

        基于解码器的架构采用单向自回归模式,可以完成生成任务,但是信息只能从左到右单向流动,模型只知“上文”而不知“下文”,缺乏双向交互。

1.5.6 BART

        2019年10月,Facebook提出了BART,发表在论文《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》中,该模型是一种Seq2Seq模型。具体结构为一个双向的编码器拼接一个单向的自回归解码器,采用的预训练方式为输入含有各种噪声的文本,再由模型进行去噪重构。

         BART融合两种结构,使用编码器提取出输入中有用的表示,来辅助并约束解码器的生成,因此这类模型被称为基于编解码架构的预训练语言模型(Encoder-decoder Pre-trained Models)。

1.6 大语言模型

        在对预训练模型的研究中,研究者很早就关注到了模型参数量对模型性能的影响。在2020年1月23日,OpenAI发表了论文《Scaling Laws for Neural Language Models》,研究了基于交叉熵损失的语言模型性能的经验尺度法则,并且发现:大模型使用样本的效率显著更高,因此最优的高效训练方式是在中等数据集上训练超大模型,并在显著收敛前提前停止。

        在一系列研究与实证基础上,研究者开始探索语言模型参数规模的上限,以挖掘预训练语言模型的潜力。这种大规模语言模型(Large Language Model,LLM),也就是目前科技公司们都在相继追逐的目标。

需要指出的是,此论文属于试验分析论文,大部分结论都是经验性的,缺乏理论推导。但是OpenAI公司依然在这一基础上投入了大量精力研究大语言模型,并在同年五月发布了具有1750亿参数规模的大语言模型GPT-3。

        2020年5月28日,OpenAI发布了GPT-3,在arXiv上的论文名称为《Language Models are Few-Shot Learners》,并在发表论文之后数天内,在Github上开源了GPT-3的部分样本和数据集。

        在当时,即使只是这篇长达72页的论文本体就已经属于语言模型领域的巨无霸了,其他研究者仅仅只是解读这一论文就需要花费很大的精力。更不用说文中的超级巨无霸——拥有1750亿个参数的GPT-3。即便OpenAI对GPT-3的技术代码全面开源,普通研究者也根本不可能复现GPT-3。

        GPT-3的发布是一件跨时代的事情,这意味着自然语言处理领域的大语言模型真正意义上出现了,从此也就正式开启了大语言模型的时代。

2. 大语言模型的背景知识

2.1 大语言模型的发展历程

        尽管按照目前通用的大语言模型的定义,2019年Google发布的T5要比GPT-3发布地更早,但GPT-3凭借在那个年代一骑绝尘的参数规模和模型性能,成为了最早备受瞩目的大语言模型。

        这张图展示了大语言模型发展的时间线,以及模型参数量的变化。可以看出,仅仅从模型参数规模上比较,GPT-3和ChatGPT并不是最大的,但是却远比其他大语言模型成功。

        其实对于LLM一直存在一个误区,就是认为“模型参数越多,模型规模越大,模型性能就一定越好”。但事实上并非如此,研究表明,许多LLM的性能并不如经过细致微调的PLM。ChatGPT的成功也不仅仅是因为模型规模的巨大,而是还经过了一系列指令微调和人类反馈的模型优化,这些方法对于ChatGPT的成功起着至关重要的表现。

        知识在计算机内的表示是人工智能的核心问题。从数据库、互联网到大模型时代,知识的储存方式也发生了变化。在数据库中,知识以结构化的数据形式储存在数据库中,需要机器语言(如SQL)才能调用这些信息。互联网时代,人们调用搜索引擎获取互联网上的非结构化的知识。而对于大语言模型而言,知识以参数的形式储存在模型中,通过自然语言的Prompt问答的方式就可以直接调用这些知识。

2.2 大语言模型的特点

        大语言模型主要在三个方面区别于之前的预训练语言模型:

        1.大语言模型具有“涌现”能力(Emergent Ability),通俗来说就是“量变引起质变”,表现为模型参数规模的增大突破某一阈值时,某些能力突然巨大提升。

        2.大语言模型彻底改变了人类开发和使用人工智能的方式,访问大语言模型(如ChatGPT)的主要方式是通过Prompt,来引导大语言模型完成任务。

        3.大语言模型的发展不再明确区分研究工作与工程实现,因为大语言模型的训练必须进行大规模数据处理和分布式计算,这不再是个人工作者能承担的任务。

        不过,尽管大语言模型取得了长足发展,但仍存在一些重要的问题:

        1.为什么大语言模型拥有“涌现”能力,尽管对此已有很多的研究和猜想,但对于具体的原因而言,一切仍然是个谜。这也成为了人们恐惧大语言模型的一个原因——未知。

        2023年3月30日,马斯克联名科技界上千人士签署公开联名信,呼吁暂停先进AI的开发,理由正是“先进AI的研发中存在未知的不可控的风险”

        2.大语言模型有可能产生有害内容,而如何控制这些内容,使大语言模型的价值观与人类一致是十分困难的。但是将大语言模型设置为完全不会越雷池半步的道德傀儡,对人类的思想发展无疑是一种桎梏。如何平衡这种设置,是一个很大的问题。

        同济大学哲学系科技哲学研究学者余明锋在访谈中表示,道德问题并不是一个简单的是非问题,在这背后是千百年来人类思想进步革新的源泉,一切现代性的形成都不应当被视作理所应当

        3.由于大语言模型的训练往往需要及其巨大的成本,因此研究界往往很难复现大语言模型,导致这些模型总是牢牢掌握在科技公司手中,进一步加剧了科技和资本的双重垄断。

        从GPT-3以来,OpenAI就在逐渐减少先进技术细节的披露,不再像一代和二代GPT那样公布技术代码和参数库,对于最近发布的GPT-4更是仅仅发布了一篇“技术报告”,对于技术细节只字未提,人们戏称OpenAI应该改名叫做“CloseAI”。

        接下来我们将详细谈一谈大语言模型的能力和关键技术。

2.3 大语言模型的涌现能力

        2022年6月15日,Google联合斯坦福大学在arXiv上发表了论文《Emergent Abilities of Large Language Models》,文中正式提出了“涌现能力”,定义如下——“如果一种能力不存在于较小的模型中,而存在于较大的模型中,那么这种能力就是涌现出来的。”

        如图展示了涌现能力的三个例子:运算能力、参加大学水平的考试(多任务 NLU),以及识别一个词的语境含义的能力。在每种情况下,语言模型最初表现很差,并且与模型大小基本无关,但当模型规模达到一个阈值时,语言模型的表现能力突然提高。

        另一类能力则是推理能力,也就是所谓的思维链(Chain of Thinking,COT)。研究表明,在一个小学数学的基准上,一般的语言模型通过思维链提示的方式生成出来的最终答案,要比直接生成的答案结果要差。但是当模型大小达到的一个临界之后,模型的COT能力表现会好得多。

        通过这篇研究,我们发现大语言模型的“涌现”能力是一种普遍现象而非特例。这种“普遍”不仅指对于大语言模型,多数能力都得到了提升,也指对于大多数大语言模型均有“涌现”能力的出现。文中总结了GPT-3拥有的137项“涌现”能力,其能力表现均有较大提升。

        如果“涌现”能力是没有尽头的,那么随着模型的增大,AI能力会越来越强。但目前来看,语言模型的能力和模型大小的关系并没有明显的线性关系。

        此外,在不同类型的任务中,具有涌现特征的比例相差巨大,也不存在明确的趋势表明哪些类型的任务是最具涌现特征的。然而语言模型在逻辑推理和因果推断中,具有涌现特征的比例最低,可能反映了语言模型并没有真正把握因果关系。

        事实上,“涌现”现象并不是大语言模型独有的。事实上在许多领域都可以看到,例如物理学、进化生物学、经济学和动力系统。虽然没有跨领域的单一的涌现定义,但所有定义都归结为相同的基本现象——即系统的定量参数发生微小变化,从而导致其定性行为发生巨大变化。

        我们以水的凝固为例,水的系统的行为受流体动力学控制。随着水温的稳定下降,系统行为的细节可能会发生变化,例如粘度增加,但总体定性行为是相似的,并由流体力学描述。

        但是,如果温度继续稳步下降,最终会达到临界温度,系统的行为会在该温度下发生急剧变化。水将进入固相(冰),突然间,系统不再服从流体力学,而是服从固体力学,进入了一个新的状态。在这个状态下,支配系统行为的规律发生了质的变化。

        尽管我们已经了解了“涌现”的概念,目睹了“涌现”在大预言模型中的能力,但对于其真正的成因,以及关于据扩大模型规模后,“涌现”能力的上限在何处,我们目前仍然知之甚少,这也是未来大语言模型乃至人工智能发展中的一个重要问题。

2.4 大语言模型的关键技术

        2023年3月31日,中国人民大学的二十几位研究者通过背景知识、关键发现和主流技术等三方面回顾了大语言模型的最新进展,其中对现行的大语言模型的关键技术和公开资源做了详细调研,形成了一篇综述。文章认为,大语言模型得以成功的关键技术包括以下几点:

        1)模型缩放(Scaling)

        这里专门指涉模型规模的扩大,正如一开始GPT-3的尝试那样,模型规模的扩大带来了独特的“涌现”能力,继GPT-3之后,PaLM更是把参数规模提高到5400亿的高度。不过,模型的能力确实不仅仅与模型规模有关,相关研究表明,训练数据的质量对实现良好性能起着关键作用。

        2)模型训练(Training)

        大语言模型参数规模巨大,训练成本大大提高。目前主流的计算卡,显存都无法装下完整的参数数据,因此需要采用分布式训练算法,并使用各种优化框架来部署并行算法,比如DeepSpeed和Megatron-LM。此外,GPT-4倡议发展一些特殊的结构和优化方法,能够在小得多的模型上准确预测大模型的能力。

        3)能力诱导(Ability Eliciting)

        大语言模型有解决通用任务的潜力,但对于某些特定任务,这种能力可能不能明显表现。因此需要采用合适的任务步骤和Prompt来引导大语言模型解决复杂任务。此外还可以利用这种方法对大语言模型进行指令调优。

        4)对齐调优(Alignment Tuning)

        大语言模型进行了大量数据量的训练,因此有可能因为低质量数据产生错误甚至有害的内容。GPT采取了人类反馈强化学习(RLHF)的策略,通过精心设计的标签将人类融入训练循环中,来避免这种问题的出现。

        5)工具利用(Tools Manipulation)

        大语言模型本质上只是文本生成器,如果文本不是表现的最佳形式或不是表达的任务(例如,数值计算),大语言模型的表现就会受到限制。此外,上执行得不太好。此外,它们也无法获取最新的信息。因此通过外置工具如插件,可以拓展大语言模型的能力。

2.5 大语言模型的公开资源

鉴于大语言模型训练的巨大成本,公开资源对于研究大语言模型至关重要,在这方面我们可以使用开源的模型检查点或者API接口。

2.5.1 公开的模型检查点与API接口

        1)百亿参数级别的模型

        包括mT5,T0 ,GPT-NeoX-20B,CodeGen,UL2 , Flan-T5 , mT0 , 以及PanGu-α 。通常这种规模的语言模型需要数百数千的GPU/TPU。例如GPT-NeoX-20B使用12台Supermicro服务器,每台配备8个NVIDIA A100-SXM4-40GB GPU。

         2)千亿参数级别的模型

        此类模型公开发布的没有几个,已公开的比如有OPT ,OPT-IML,BLOOM(和GPT-3的参数量基本相同) ,GLM(130B),Galactica(120B)。此类语言模型的训练资源更是难以想象,比如OPT(175B版本)需要992个A100-80GB GPU来训练。

        3)公共API接口

        使用API结构,用户可以不必在本地运行大语言模型。如今,GPT模型的API接口已被广泛使用(在中国有被封号的风险),为普通用户提供了一种更方便的方式。此外,这些接口也可以借助OpenAI的主服务器进行模型微调,适应不同场景的需求。

2.5.2 公开的语料库资源

        大语言模型需要更多的训练数据,这些数据需要尽可能覆盖尽可能多的领域。因此,一些公开的大型语料库是投喂大语言模型最好的饲料。广泛用于训练大语言模型的语料库主要包括以下几种类型:

        图书:包括BookCorpus,Project Gutenberg,其中包含上万本书籍,涵盖了不同领域。

         CommonCraw:是最大的开源网络爬虫数据库之一,包含了PB级的数据量

         Reddit:这是一个社交媒体平台,高点赞率的帖子可以用来创建高质量的数据集

        维基百科:是一个在线百科全书

        代码:从开源平台上抓取代码,比如公共代码库Github和代码问答平台StackOverflow

        图中展示了目前的大语言模型中各种训练资源所占的比率,可以发现采信了不同数据源的大语言模型,在能力侧重上也会有差别。

3. 大语言模型的训练技术

        根据目前公开的信息来看,大语言模型的训练流程一般包括如下四个步骤:

3.1 数据收集

        前面的报告提到了可以获取公开资源的公共库,从这些地方可以获得预训练数据源。预训练语料的来源大致可以分为两类:通用语料和专业语料。

        通用语料:如网页、书籍和会话文本等,其庞大、多样化和可访问的特性,可以增强大语言模型的语言建模和泛化能力。

        专业语料:鉴于大语言模型出色的泛化能力,也有研究将预训练语料库扩展到更专业的数据集,如多语言数据、科学数据和代码,赋予大语言模型特定的任务解决能力。

        关于专业语料,由于大语言模型在科学专业领域的表现是我们所关心的,比如在桥梁工程领域,存在许多文本数据以外的知识比如结构图、数学公式、物理模型、有限元命令行等。目前研究者正在合并模型预训练的科学语料库,比如arXiv论文、科学教科书和数学网页等,将其中非文本数据转化成特定的标记来实现语言模型统一处理的形式。

        之后,数据收集完后需要对这些数据进行预处理,包括去噪、去冗余、去除不相关和潜在有毒的数据。数据的预处理对模型的性能至关重要,如果在低质量的语料库上训练模型,很大可能会损耗大语言模型的性能,并且导致模型生成各种有害信息。

3.2 基础大模型训练

        通过基础大模型训练,模型有了语言生成的能力,有研究认为,语言模型建模过程中也隐含的构建了包括事实性知识(Factual Knowledge)和常识知识(Commonsense)在内的世界知识(World Knowledge)。

        但是,由于模型参数量和所使用的数据量都非常巨大,训练大模型实属不易。普通的服务器单机无法完成训练过程,因此通常采用分布式架构完成训练。相关文献指出,OPT 使用了 992 块 NVIDIA A100 80G GPU,采用全分片数据并行(Fully Shared Data Parallel)以及Megatron-LM 张量并行(Tensor Parallelism),整体训练时间将近 2 个月。

3.3 指令微调

        以 BERT 为代表的预训练语言模型需要根据任务数据进行微调(Fine-tuning),这种范式可以应用于参数量在几百万到几亿规模的预训练模型。但是针对数十亿甚至是数百亿规模的大模型,针对每个任务都进行微调的计算开销和时间成本几乎都是不可接受的。

        因此,指令微调(Instruction Finetuning)方法被创造出来,将大量各类型任务,统一为生成式自然语言理解框架,并构造训练语料进行微调。

        通过指令微调,大模型学习到了如何响应人类指令,可以根据指令直接能够生成合理的答案。由于指令微调阶段训练了非常多的任务,大模型任务能力可以泛化到之前没有见过的任务上,这使得模型初步具备了回答人们提出的任何指令的可能。这种能力对于大模型来说至关重要,使其可以在开放领域有很好的表现。

3.4 类人对齐

        尽管指令微调后的模型,在开放领域任务能力表现优异,但是模型输出的结果通常与人类的回答相差很大,简而言之就是“没有人性”。因此需要进一步优化模型,使得模型的输出与人类的习惯对齐。其中最具有代表性且已取得巨大成功的方法,就是OpenAI开发的、塑造了ChatGPT的人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF)。这项研究工作最早发布于人工智能顶会NeurIPS2021上,论文标题为《Training language models to follow instructions with human feedback》

        Open AI团队针对初始数据收集,制定了严格的标准和规范,雇佣了40人的团队完成该项工作。再结合通过线上 API 所收集到的高质量数据,一共构造了约 11.28 万标注集合。

3.5 本地大语言模型的训练

        调用API接口虽然方便,但是效果和自定义程度往往不尽如人意。不过好在目前有许多的开源项目,提供了完成基础大模型训练的开源大模型。可以在此基础上通过自己的语料库进行参数微调,来实现深度自定义。对于一些比较专业的领域,或许可以在这方面有所尝试。

4. 总结与思考

        要理解大语言模型潜在的工作机制,最大的谜团之一便是大语言模型的“涌现”能力。当语言模型的参数尺度增加到临界尺寸(例如,10B)时,一些能力将以意想不到的方式(突然的性能飞跃)发生。这令人着迷又令人困惑,甚至令人恐惧。大语言模型究竟是如何获得涌现能力的?涌现能力是否有上限?由此,大语言模型是否是通向通用人工智能的一条真切途径?在未来,这将是一个十分值得深入探究的课题。

        此外,我们已经充分理解了大语言模型相比微调预训练模型的优势,增强现有大语言模型的工具利用能力,或者以fineTune为切入点,利用开源项目训练本地大语言模型,或许可以在桥梁健康检测领域实现模型专业化。

        在大语言模型的学习过程中,也进行了一些思考:
        1.自然语言前沿发展极快,业内论文基本上都是以预印本的形式发布在arXiv此类网站上,而且都是英文文献,其中一些太前沿的专业名词甚至还没有统一的官方翻译。自从上次ChatGPT汇报以来的一个月内,大语言模型领域又产生了许多新发展。跟进自然语言处理需要极广的信息渠道、极高的信息敏感、极强的专业水平。

         2.从历史来看,NLP从来都不是孤立的研究领域,在历史研究中,许多CV的技术给予了NLP研究者灵感,推动了NLP的发展。反过来NLP也在不断影响着CV领域乃至其他人工智能领域。

         3.大语言模型的许多前沿技术并不开源,而且就算开源也难以复现。因此更好的学习方法是不断跟进技术发展,从中吸取有用的研究思路,利用开源项目锻炼经验,最后更好地应用在自己的工程领域当中。


http://www.ppmy.cn/news/570513.html

相关文章

2022 RoboCom 世界机器人开发者大赛-本科组(国赛)-- 第三题 RC-u3 战利品分配

在某个战争游戏中,多个玩家组成一个大型军团,攻下若干城池,并获得战利品。 具体而言,游戏中有 N 个城市,并以 M 条长度为 1 的无向道路连接,玩家们组成的军团从 S 号城市开始进攻,目的地是 T 号…

【Linux】《CSAPP》(第三版) U2-U3学习笔记(含实验)

在一个学期对于《CSAPP》这本书的学习过程中,我了解到许多关于计算机软硬件交界面的知识,也了解到如何更好地编写一个更好、更安全、更少bug的程序。我希望能在下面的篇幅中,为与我一样的初学者介绍、总结我的学习感想与学习笔记。也许涵盖范…

leetcode123. 买卖股票的最佳时机 III(java)

买卖股票的最佳时机 leetcode123. 买卖股票的最佳时机 III题目描述动态规划代码演示 动态规划专题 leetcode123. 买卖股票的最佳时机 III 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-sto…

Collections工具类学习

1.二分查找 public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) {// List<比较器> list &#xff0c; 元素if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)return Collections.…

【C/C++】使用类和对象 封装链表

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

C++ 标准库 — 正则表达式 std::regex

C 标准库 — 正则表达式 std::regex 文章目录 C 标准库 — 正则表达式 std::regexI - 正则表达式概述II - 内容2.1 - 匹配字符2.2 - 匹配数量/次数2.3 - 特殊字符的用途 III - 使用3.1 - 正则表达式有不止一种写法3.2 - 内置通用字符簇特殊用法3.3 - 元字符使用3.4 - 零宽断言3…

web的get请求中一个key有多个value值的情况如何处理,qs的工具的使用

利用qs库 qs是一个流行的查询参数序列化和解析库。 可以将一个普通的object序列化成一个查询字符串&#xff0c;或者反过来将一个查询字符串解析成一个object&#xff0c;而且支持复杂的嵌套。 并且天然支持urlcode的编码和解码。非常的实用 至于http为什么需要这个URLcode的编…

伺服生产方案埃斯顿伺服

伺服生产方案埃斯顿伺服 id570658019967&