大语模型前世今生

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

       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.rhkb.cn/news/58563.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python如何解方程——一名有10年Python编程经验工程师的解读

Python如何解方程——一名有10年Python编程经验工程师的解读 Python作为一种通用编程语言,具有强大的数学计算功能,因而被广泛应用于科学计算领域。对于一些需要求解方程的问题,Python也提供了简便的解决方法。本篇文章将介绍Python如何解方…

chatgpt赋能python:Python二次方程求解——一场简单的数学游戏

Python二次方程求解 —— 一场简单的数学游戏 作为一门广受欢迎的编程语言,Python 不仅仅在科学计算、数据分析、人工智能等方面被广泛应用,也被用于数学计算。本篇文章将介绍如何使用 Python 解决二次方程。 什么是二次方程? 一般情况下&…

chatgpt赋能Python-python_conjugate

Python Conjugate: 什么是共轭? 在数学中,共轭是指复数的一种操作。对于一个复数 a b i a bi abi,它的共轭为 a − b i a - bi a−bi。这个操作对于许多数学问题十分重要,因为它可以帮助我们解决求根、求导和求复函数值等问题…

chatgpt赋能python:Python中的非运算:理解not运算符的应用

Python中的非运算:理解not运算符的应用 在Python编程中,非运算(not)是一个常用的逻辑运算。它可以对一个表达式或变量进行逻辑反转。非运算符可以将True转换为False,将False转换为True,因此它在编程中十分重要。本文将介绍非运算…

chatgpt赋能python:Python怎么求解方程

Python怎么求解方程 在数学中,求解方程是一种基本的技能。Python作为一种广泛应用于科学计算和数据分析领域的编程语言,可以帮助我们求解各种类型的方程。Python提供了多个库和函数,使得求解方程在Python中变得非常轻松。 一元方程求解 一…

chatgpt赋能python:Python编程计算一元二次方程——最简单的方法实现

Python编程计算一元二次方程——最简单的方法实现 前言 Python编程语言是一种优秀的开源编程语言,具有易于学习、代码简洁明了、易于维护等优点,因此在近年来得到了广泛的应用。 本文将介绍如何使用Python编写一个简单而又实用的计算一元二次方程的程…

chatgpt赋能python:求一元二次方程Python程序--解题利器

求一元二次方程Python 程序 – 解题利器 一元二次方程是中学阶段数学必修内容,学生们需要掌握如何求解一元二次方程。在实际运用中,求解一元二次方程也经常被用到。今天我们将谈到使用 Python 编写一元二次方程程序。 什么是一元二次方程? …

chatgpt赋能python:用Python编程实现一元二次方程求解过程

用Python编程实现一元二次方程求解过程 介绍 一元二次方程是初中数学中常见的一种方程形式,其如下所示: 其中,a、b、c为实数且 a ≠ 0 a\neq0 a0。 在本文中,我们将会使用Python编程语言实现一元二次方程的求根过程&#xff…

chatgpt赋能python:一元二次方程如何用Python编写?

一元二次方程如何用 Python 编写? 一元二次方程是一种高中数学常见的存在。但是,有时候我们需要使用计算机来解决实际的问题,也需要通过代码实现一元二次方程的求解。本文介绍如何用 Python 编写一元二次方程求解代码。 什么是一元二次方程…

chatgpt赋能python:Python编写一元二次方程的求解程序

Python编写一元二次方程的求解程序 一元二次方程是数学中的基本概念之一,在工程、物理、计算机科学以及其他许多领域都有着广泛的应用。在这篇文章中,我们将介绍如何使用Python编写一元二次方程的求解程序。 什么是一元二次方程? 一元二次…

chatgpt赋能python:Python中如何求解一元二次方程的根

Python中如何求解一元二次方程的根 介绍 一元二次方程是数学中经典的问题之一,在实际应用中也有广泛的应用,例如物理学、经济学和工程学等领域。Python作为一种高级编程语言,非常适合用来解决数学问题,包括一元二次方程。 在Py…

chatgpt赋能python:Python如何求解一元二次方程?

Python如何求解一元二次方程? 在数学中,一元二次方程是形如ax bx c 0的方程。其中,a、b和c都是已知常数,x是未知数。求解一元二次方程是数学中的一项基本技能。而在Python中,求解一元二次方程更是易如反掌。 如何…

chatgpt赋能python:一元二次方程求解Python代码实现

一元二次方程求解Python代码实现 一元二次方程在数学中是一个基本的概念,它是指形如 axbxc0 的二次方程。解决这种方程求根问题一直是数学家和科学家的热点问题,并且在各种实际应用中都有着广泛的应用。在本文中,我们将会介绍如何使用Python…

chatgpt赋能python:Python编程求解一元二次方程

Python编程求解一元二次方程 一元二次方程是数学中非常基础的概念,其形式为: a x 2 b x c 0. ax^2bxc0. ax2bxc0. 解一元二次方程的方法有很多,而Python则可以帮助我们更加便捷的求解一元二次方程。本文将介绍如何使用Python来编程求解一…

chatgpt赋能python:一元二次方程求解程序

一元二次方程求解程序 介绍 Python是一种高级编程语言,其语法清晰简单,开发效率高,不仅适合快速开发,也适合大型项目开发。在数学领域,Python有着广泛的应用,其中一元二次方程求解程序是最常用的之一。 …

chatgpt赋能python:一元二次方程Python程序的介绍与应用

一元二次方程Python程序的介绍与应用 一元二次方程是初中数学中的重要知识点,也在高中数学和大学数学中有着广泛的应用。在日常生活中,我们也可以利用一元二次方程来解决实际问题,比如计算投掷物体的轨迹和计算成本、收益等问题。今天&#…

1981年长城一元硬币值钱吗?

1981年年号的长城一元流通硬币值钱吗?个人的看法是:装帧在1981年年度《中国硬币》里的精制币很值钱,公开发行并投放市场流通使用的普制币就说不上值钱了。 长城一元硬币属于人民币第二套流通硬币——长城麦穗币,于1980年开始正式发…

slurm作业调度系统与天河二号的基本命令(新手入门, 以gs和vasp为例)

本文地址            👍如果大家觉得本文有用的话,希望能点个赞鼓励一下,十分感谢各位的支持 文章目录 1 前言  1.1 slurm系统的简介  1.2 slurm系统的资源申请过程的简要说明 2 Slurm系统的基础命令  2.1 shell脚本文件与批处理文件的提…

天河二号超级计算机

天河二号超级计算机 概况: “天河二号”是由国防科学技术大学研制的超级计算机系统,以峰值计算速度每秒5.49亿亿次、持续计算速度每秒3.39亿亿次双精度浮点运算的优异性能位居榜首,成为全球最快超级计算机。[1] 2014年11月17日公布的全球超…

天河一号属于微型计算机,勇闯天河 探秘“天河一号”超级计算机

“天河一号A”架构介绍 “天河一号”改进型“天河一号A”将理论运算能力提升至每秒4701万亿次,实测运算能力提升至每秒2507万亿次的高度,荣登世界超级计算机排行榜榜首。它是一套开放式访问系统,可用来执行大规模科学计算。 “天河一号A”机柜…