如何让大高级语言,汇编语言,机器语言的联系模型完全理解的文档并输出想要的内容?

说明: 持续更新GPT在线大模型和开源大模型相关技术!!!!更多详细的技术文档,在这里学习和免费领取哈。学习视频:木羽Cheney的B站视频全文共1.8w余字,预计阅读时间约60分钟
满满干货,建议收藏!1一、介绍在2020年秋季,GPT-3因其在社交媒体上病毒式的传播而引发了广泛关注。这款拥有超过1.75亿参数和每秒运行成本达到100万美元的大型语言模型(Large Language Models,LLMs)开启了自然语言处理(NLP)领域的新纪元。在这个阶段,大规模预训练模型的涌现彻底改变了NLP的研究和应用格局。大规模语言模型充分挖掘了大量未标注数据的潜力,从而赋予模型更强的语言理解和泛化能力。采用预训练和微调策略的大模型在多个NLP任务上都实现了前所未有的成就,无论是在模型准确性、泛化能力还是复杂任务处理方面,都展示了出色的表现。这不仅吸引了大量投资,也催生了NLP领域全新的发展和研究方向。同时,随着大模型应用门槛和使用门槛都逐步降低,大量的大模型产品不断涌现——ChatGPT、跨语言代码编译工具Cursor、Github官方代码编写工具CopilotX、一键生成PPT内容的Gamma AI,office全家桶中配置的Copilot、Photoshop中配置的fill features,广泛生成图像的MidJourney和Stable Diffusion……这些应用不仅改变了商业的运营方式,也极大地影响了人们的生活和工作。二、大语言模型的发展脉络说起大模型,比较有趣的一件事发生在2021年,一名开发者使用GPT-3创建了一款名为"Project December"的文本聊天游戏。这款游戏使用了从一位名为Samantha的已故女性的Facebook和个人短信中收集的文本数据(Samantha在2012年去世)。令人惊讶的是,她的男友通过这款游戏与模仿Samantha的AI进行了短信聊天,竟然聊了几个月都没有察觉出异常。这一事件引发了一系列伦理和道德问题。img这一事件不仅揭示了大模型的强大潜力,也预示了它未来可能的发展方向。在过去,我们印象中的机器人是一种简单、机械式的交互方式,即便有着不断优化的自然语言处理技术作为支撑,这些机器人的回应依然多数是预设的、固定化的,明显缺乏深度和真实感。然而,现代技术已经打破了这些局限。未来的机器人,就如同电影《流浪地球2》中引人注目的550w一样,将展示出近乎人类的情感和思考能力。ChatGPT便是这一变革的先锋,它不仅可以准确地理解和生成复杂的文本,还能与先进的音视频技术配合无间,构造出一个令人惊叹的、近乎具有自我意识的数字生命体,就像电影中的丫丫一样。在这种变革中,应用底层也在不断的实现技术迭代,如下图:img从早期基于任务驱动的智能助手(如Siri和百度智能音响)开始,人工智能已经经历了一系列显著的变革。这些初期产品,虽然基于各自不同的数据和模型构建,并且在功能扩展性方面表现出色,但它们更多地是一种“伪”人工智能,其能力受限于特定的任务和场景。随后,Bert模型的出现标志着一个重要的转折点。与之前的任务驱动模型不同,Bert通过预训练和微调的流程,能够更加深入地理解人类语言。它采用了一种非任务导向的预训练方法,然后可以通过微调应用于各种下游任务。尽管如此,模型微调的复杂性仍然是一个难以逾越的障碍。再发展到现在的GPT模型,其创新之处在于其“基于提示”的设计思路。不仅预训练的规模超过了Bert的500倍,GPT还能够自主生成语言,适应各种不同的未知任务,仅通过改变输入提示即可,无需对模型本身进行任何修改。这种进步符合我们对人工智能最初的期待和憧憬,预示着一个全新、更加智能和灵活的AI时代即将到来。所以我们对人工智能的期待就应该是这样的:imgimg这是我们熟悉的ChatGPT,而如果深究,其背后的推理过程是这样的:img需要明确知道:GPT(Generative Pre-trained Transformer)模型是一种自回归(autoregressive)模型,其核心思想是根据已有的文本序列生成下一个最可能出现的单词。这一切都是基于统计学习和推理,而非像人类那样进行逻辑推理或思考。GPT(Generative Pre-trained Transformer)是基于Transformer架构构建的,这一架构在整个推理流程中占有关键地位。虽然OpenAI并没有完全公开GPT模型的所有训练细节和数据,但其核心机制依然基于Transformer,这一点在多个学术论文和技术文档中都有描述。因此,理解Transformer的基本原理不仅有助于了解GPT模型是如何生成文本的,还对其他自然语言处理任务和开发工作具有极大的价值。换言之,了解基础即可揭示变化,这在开发中是至关重要的。三、GPT系列模型架构详解自然语言处理(NLP)技术的发展历程是一个逐步迭代和优化的过程。在Transformer架构出现之前,该领域经历了从依赖人工规则和知识库到使用统计学和深度学习模型的转变。此后,Transformer的出现标志着一个新纪元,特别是随着BERT和GPT等模型的推出,断崖式的提升了自然语言理解和生成能力。现在,可以说已经进入了大模型时代,基于Transformer架构的应用正在经历一个前所未有的爆发期。我们对ChatGPT这样的聊天模型可能已经习以为常,一问即答似乎很正常。然而,如果深入思考其背后的工作原理,你会发现这实际上是一件令人惊奇的事情。所以,我想让大家明确一个问题:究竟什么是Transformer,以及它是如何获得这种革命性的影响力的。img3.1 Transformer架构详解ChatGPT 的后端是基于 GPT(Generative Pre-trained Transformer)模型的,GPT模型通过在大规模文本数据上进行无监督预训练来学习语言的统计特征和语义表示。它使用自回归的方式,即基于前面已经生成的词来预测下一个词,来学习词之间的语义和语法关系,以及句子和文本的整体上下文信息。GPT 模型本身是构建在 Transformer 结构基础上的,因此,要全面了解生成式大模型为何如此强大,Transformer 架构是不可或缺的关键点。那么,这个架构是如何实现文本生成、语义理解等高级功能的呢? Transformer最经典论文【Attention Is All You Need】,没有之一,地址:https://arxiv.org/abs/1706.03762Transformer由编码器(Encoder)
和解码器(Decoder)组成,其中编码器用于学习输入序列的表示,解码器用于生成输出序列。 GPT主要采用了transformer的解码器部分,用于构建语言模型。其结构是这样的:img如果没有NLP算法基础的话,看着可能有点发懵,不过没关系,你并不需要完全掌握所有细节。只需明确两个核心概念即可:Transformer 中的注意力机制是如何工作的Decoder 部分的生成式输出具体意味着什么对于一条输入的数据,在这个复杂的架构中是如何流动和处理的,我来给大家拆解一下。3.1.1 拆解Transformer架构文本表示在Transformer模型中,首先会对输入文本进行处理以得到合适的表示。 为什么要进行这样的转换呢?考虑这样一个场景:当你输入"AI+编程 扬帆起航"这句话,计算机能直接理解吗?或者说,当你与ChatGPT互动时,它是否真的“听到”了你说的每一个词或字?实际上并非如此。ChatGPT并不直接处理自然语言。它需要将我们的输入转换为它能理解的数据形式。简而言之,它会把每个词或每个字符编码成一个特定的向量形式。这个编码过程具体步骤如下:词嵌入(Word Embedding): 文本中的每个单词都被转换为一个高维向量。这个转换通常是通过预训练的词嵌入模型(如Word2Vec、GloVe等)完成的。位置嵌入(Positional Embedding): 标准的Transformer模型没有内置的序列顺序感知能力,因此需要添加位置信息。这是通过位置嵌入完成的,它与词嵌入具有相同的维度,并且与词嵌入相加。 例如,考虑句子"AI+编程 扬帆起航"。如果没有位置嵌入,该句子可能会被错误地解析为"编AI+程,航帆扬起"等,这会破坏句子原有的顺序和语义。位置嵌入的目的就是确保编码后的词向量能准确地反映句子中词语的顺序,从而保留整个句子的原意。相加(Addition): 词嵌入和位置嵌入相加,得到一个包含了文本信息和位置信息的新的嵌入表示。最终得到输入的Transformer表示x,这样,模型就能知道每个单词不仅是什么,还能知道它在序列中的位置。img举个例子:img通过这样的一个处理过程,模型就可以认识"扬帆起航"这样的一个输入。那对于Transformer的输入处理部分,从架构图上编码器和解码器部分都有输入,这个怎么理解?img这是因为:在Transformer模型中,编码器(Encoder)和解码器(Decoder)各自有独立的输入。通常,在有监督学习的场景下,编码器负责处理输入样本,而解码器处理与之对应的标签。这些标签在进入解码器之前同样需要经过适当的预处理。这样的设置允许模型在特定任务上进行有针对性的训练。 通过一个简单的机器翻译任务来说明这个概念。假设有以下的英语到法语的翻译对:英语(输入样本): "Hello, world"法语(标签): "Bonjour, monde" 在这个示例中,编码器(Encoder)会接收"Hello, world"这个句子作为输入。这个句子首先会被转换成一组词向量或者字符向量,然后进入编码器进行处理。与此同时,解码器(Decoder)会接收"Bonjour, monde"对应的标签作为输入。同样地,这些标签首先会被转换成一种机器可理解的表示(比如词向量或字符向量),然后进入解码器。编码器处理完输入样本后,它的输出会与解码器的输入进行某种形式的结合,以生成最终的翻译输出。通过这个机制,模型可以在有监督的学习环境中进行训练,以完成特定的任务,如机器翻译。Encoder(编码器部分)Transformer中的编码器部分,作用是学习输入序列的表示,位置如下图所示:img在Transformer模型的编码器(红色虚线框)部分,数据处理流程如下:首先,输入数据(比如一段文字)会被送入注意力(Attention)机制进行处理,这里会给数据里的每一个元素(比如每一个字或词)打个分数,以决定哪些更重要,在"注意力机制"(Attention)这个步骤之后,会有一些新的数据生成。接着,一个“Add”操作会被执行,在注意力机制"中产生的新数据会和最开始输入的原始数据合在一起,这个合并其实就是简单的加法。"Add"表示残差连接,这一操作的主要目的是确保数据经过注意力处理后的效果至少不逊于直接输入的原始数据。随后,数据会经过一个简单的数学处理,叫做“层归一化”(Norm),主要是为了让数据更稳定,便于后续处理。之后,数据将进入一个双层的前馈神经网络。这里的目标是将经过注意力处理的数据映射回其原始的维度,以便于后续处理。这是因为编码器会被多次堆叠,所以需要确保数据的维度在进入下一个编码器前是一致的。简单来说:就是把经过前面所有处理的数据变回原来的形状和大小。 注意看图中编码器左侧的Nx标识,意味着会有多个编码器堆叠。最后,为了准备数据进入下一个编码器(如果有的话),数据会再次经过“Add”和“Norm”操作,输出一个经过精细计算和重构的词向量表示。这样的设计确保了模型在多个编码器层之间能够有效地传递和处理信息,同时也为更复杂的计算和解码阶段做好了准备。简单来说,Transformer的编码器就是通过这些步骤来理解和处理输入的数据,然后输出一种新的,更容易理解的数据形式。如图:imgDecoder(解码器部分)Transformer中的解码器部分,作用是用于生成输出序列,位置如下图所示:img在Transformer模型的解码器(紫色虚线框)部分,数据处理流程如下:在Decoder部分,数据首先进入一个带遮罩(masked)的注意力(Attention)机制,这个遮罩的作用是确保解码器只能关注到它之前已经生成的词,而不能看到未来的词。然后,这一层输出的信息会与来自Encoder部分的输出进行融合。具体来说,这两部分的信息会再次经历一个注意力机制的处理,从而综合考虑编码与解码的内容。这个过程之后,解码器的操作与编码器部分大致相同。数据会经过层归一化、前馈神经网络,再次进行层归一化,最终输出一个词向量表示。输出的词向量首先会通过一个线性层(Linear)。这一步的目的是将向量映射到预先定义的词典大小,从而准备进行词预测。最后,使用softmax函数计算每个词的生成概率。最终,选取概率最高的词作为该时刻的输出。 举个例子:现在假设有一个很小的词典,只有3个词:“apple”,“banana”,“cherry”。线性层会将这个3维向量转换成另一个3维向量(对应“词典”大小)。假设转换后的向量是 [2.5, 1.0, -0.5]。通过softmax函数,这个向量会转换为概率分布,比如 [0.8, 0.18, 0.02]。这就意味着模型认为下一个词是“apple”的概率是80%,是“banana”的概率是18%,是“cherry”的概率是2%。这样,就能从解码器的高维输出中预测出一个实际的词语了。这样,Decoder不仅考虑了之前解码生成的词,还综合了Encoder的上下文信息,从而更准确地预测下一个词。与GP有最大关联的,就是采用Decoder这部分架构来构建语言模型的。3.1.2 注意力机制注意力机制,到底在注意什么?对于人类来说,当开始做某一件事时,通常会集中注意力在某些关键信息上,而忽视其它不太相关的信息。 举个例子:当你正在开车并接近一个交叉口时,你可能会特别关注红绿灯、行人以及其他车辆的动向,而忽略了沿路的风景或广告牌等不太相关的信息。这样,你能确保自己作出正确的行动决策,比如停车或继续行驶。那对于计算机来说,它是如何解析上下文信息,理解不同语义之间的关系呢?img这个图通常用来展示如何通过注意力机制确定代词"it"指代的是哪个名词(在这个例子中是"The Animal")。原始句子:"The Animal didn't cross the street because it was too tired"译为:因为动物太累了所以没有过马路。"it"指代的是"The Animal",然而,如果改变句子中的一个词,将"tired"替换为"narrow",得到的新句子是"The Animal didn't cross the street because it was too narrow",译为:由于街道太窄,动物没有过马路。在这个新的句子中,"it"指"the street"。因此,模型需要能够理解当输入的句子改变时,句子中的词义也可能会随之改变。这种灵活性和准确性在Transformer模型中得到了体现,而之前的模型都无法达到这一目标。Attention机制的工作原理可以这样形象化地描述:模型把每个词编码成一个向量,然后把这些向量送入模型中。在这里,每个词都会像发送一条“询问”一样,去问其他词:“咱们之间的关系紧密吗?我们亲近吗?”如果关系紧密,模型就会采取一种行动,反之则会采取另一种行动。不仅每个词都会发出这样的“询问”,而且也会回应其他词的“询问”。通过这样的一问一答互动,模型能够识别出每两个词之间的紧密关系。一旦这种关系被确定,模型就会把与该词关系更紧密的词的信息“吸收”进来,与其进行更多的信息融合。这样,比如在翻译任务中,模型就能准确地识别“it”应该翻译为“animal”,因为它的向量已经融合了与“animal”这个词紧密相关的信息。所以注意力机制的核心就是要做重构词向量这样一件事。这种机制转化成计算机的计算过程,是这样的:对于上面形象化的描述中,可以抽取出注意力机制的三要素:Q:即query,可以理解为某个单词像其它单词发出询问K:即Key,可以理解为某个单词回答其它单词的提问V:即Value,可以理解为某个单词的实际值,表示根据两个词之间的亲密关系,决定提取出多少信息出来融入到自身img在Transformer模型中,Q、K和V是通过输入向量表示Transformer(x)与相应的权重矩阵Wq,Wk,Wv进行矩阵运算得到的。 如果你熟悉深度学习,那么应该知道,数据在模型内部主要是与不同的权重参数进行矩阵乘法。如果之前没基础的,就把它当作模型的一个固有模块,一个制定的计算规则。这些权重矩阵最初是通过数学方法进行初始化的,然后在模型多轮训练的过程中逐渐更新和优化。目标是使得传入的数据与这些权重矩阵相乘后,能够得到最优化的Q、K和V矩阵。以Q为例,其第一个元素是通过输入向量x的第一行与权重矩阵Wq的第一列进行点乘和加和运算得到的。img因此,在Q矩阵中的第一行实际上是这样的意义:它包含了第一个词(与输入X的第一行对应)在查询其他词时所需的关键信息。同样地,K和V矩阵的计算逻辑与此相似。在K矩阵的第一行里,存储的是第一个词在回应其他词的查询时所需的信息。而在V矩阵的第一行,所包含的是第一个词自身携带的信息。在通过Q和K确定了与其他词的关系后,这些存储在V中的信息被用来重构该词的词向量。当得到了Q,K,V之后,Attention做了如下操作:img这个公式就涉及到了一问一答的这个过程,它表现出来的计算过程是这样的:img计算过程同样是矩阵相乘再相加,所以得到的QK^T矩阵就表达了词与词之间关系的紧密程度 为什么这样就能衡量词之间的紧密程度?在计算矩阵乘法的时候,向量对应元素的乘积,这种计算方式在数学上叫向量的内积。向量的内积在向量的几何含义上表达的是:内积越大,两个向量就更趋向于平行的关系,也就表示了两个向量更加相似,当内积为0,两个向量就会呈现垂直的关系,表示两个向量毫不相关。那对于Attention机制中这种Q和K一问一答的形式,问的就是两个词之间的紧密程度,所以也就可以通过内积的方式,来衡量两个词之间的相似性在这个过程中,可能也都注意到了,它对自己也进行了提问,并自己也给出了回答,为什么要这样做呢?以这个示例:"The Animal didn't cross the street because it was too tired"译为:因为动物太累了所以没有过马路。"it"正常来说作为代词,指代的是"它",但在这个句子中,我们希望它指代是"The Animal",所以它不把自己在这个句子中的重要性也表现出来,不对自己的信息进行重构的话,它可能就没有办法改变自己原有的意思,也就无法从原本的意思"它"改为指代"The Animal"。也就是因为这种操作,所以在Transformer中的注意力机制被叫做Self-Attention(自注意力机制)。当衡量句子之间的紧密关系的结果出来之后,那么如何去重构V?转化成计算过程是这样的:img在计算得到QK^T矩阵矩阵后,假设第一行的数据分别为:100,80,20,12,那么接下来的问题就变成了如何量化地决定哪些词应贡献多少信息。为解决这一问题,就会应用Softmax函数来对每一行进行归一化处理,这样做会确保该行中所有元素的和为1。假如经过Softmax处理后,第一行变成了某种分数形式,例如:0.4,0.2,0.2,0.1,那么这意味着将用第一个词的40%的信息、第二个词的20%的信息....来构建目标词的新表示。这样,Softmax操作实质上是在量化地衡量各个词的信息贡献度。 公式中除以\sqrt{d_k}是为了避免在计算向量內积时因为向量矩阵过大,计算出来的数值比较大,而非单纯的因为词之间的紧密程度这一问题。当得到了每个词之间的信息贡献度概率之后,重构V的过程转化成计算过程是这样的:img进一步拆解这个过程是这样的:img也就是说:从第一个词中拿出40%的信息,从第二个词中拿出20%的信息....以此类推,最终得到Z,通过这种计算的形式得到的Z矩阵,每个位置就包含了所有与之有关系的信息。这就是Transformer中Self-Attention机制中的计算过程。3.1.3 Decoder 如何做生成式输出Transformer的Decoder部分与Encoder部分有许多相似之处,但也存在一些关键的差异。Decoder增加了一个额外的注意力层。此外,除了它自身的输入信息,Decoder还会整合Encoder的输出信息。(如果是监督训练任务)imgTransformer模型中的解码器(Decoder),其主要任务是预测下一个输出词,所以称它为生成式模型。为了更好地理解这个过程,可以用一个机器翻译任务作为例子: 假设有一条中英双语训练样本:"我是一名学生" (X) --> "I am a student" (Y)。当解码器开始工作时,它需要一个初始的输入来启动预测过程。但是,为了预测第一个词"I",解码器没有之前的上下文。因此,需要为其引入了一个起始符 <s> 作为初始的输入。所以训练样本的目标序列就被调整为:<s>, I, am, a, student。解码的过程如下:输入起始符<s>到解码器。通过Attention机制,解码器对编码器的输出(也就是"我是一名学生"的表示)进行注意,并进行融合。基于起始符<s>和编码器的融合输出,解码器预测第一个词,即"I"。接下来,"I"和<s>都会被用作已知信息,再次输入到解码器。解码器继续通过Attention机制对编码器的输出进行注意,然后预测下一个词"am"。这个过程不断重复,直到预测出整个句子"I am a student"。看下这个动图尝试理解:关键点1:Decoder中的Attention与Encoder中的Attention有什么不同首先,从名称上,就可以发现它们有所区别。在Decoder中,首先遇到的是“Masked Attention”。为什么需要这种设计?在Transformer模型的解码阶段,每个词都是逐个生成的。 例如,当预测“am”时,模型不应该提前“知道”或“看到”接下来的“a student”。可以将这个过程想象为一个时间线:在预测一个特定的词时,你不能“预知”它之后的词汇,因为在实际情境中,那部分尚未发生。为了确保模型在这一时点上不会受到未来词汇的干扰,解码器采用了掩码操作。通过这种方式,模型在处理某个词时,后续的所有词都会被遮挡,确保模型只基于已知的上下文进行预测。img拆解成Decoder内部的计算过程,是这样的:首先:准备输入数据矩阵(由标签加上起始符组成)和遮挡矩阵(Mask矩阵)。如图:img遮挡矩阵的设计是为了确保在计算时,被遮挡的部分(上半部分)得到的是一个较小的值,使其对结果的影响最小。 具体地说:考虑遮挡矩阵的第一行,它表示预测第一个词时的情况。此时,模型只知道起始符,而对于当前预测的词及其后的词,模型是不知道的。这意味着模型在预测第一个词时,仅能依赖起始符。类似地,当模型在预测第二个词时,即遮挡矩阵的第二行,它仅知道起始符和第一个词。而第二个词及其后的所有词对模型来说都是未知的。这样的设计确保了模型在预测某个词时,仅仅依赖于其之前的词,而不会受到后面词的干扰。然后还是经过和Encoder过程一样的Q,K,V计算过程:imgimg得到的QK^T矩阵后(表明词与词之间关系的紧密程度的矩阵),与之前准备的Mask矩阵做按位相乘,如图:img对于QK^T 矩 与mask矩阵相乘的过程,这个“相乘”是按位相乘,也就是每个对应的元素进行相乘。 为了直观地理解,可以设想mask矩阵的遮挡部分都是0,而未遮挡的部分都是1。那么,在这种按位相乘之后,被遮挡的部分在结果中的对应位置就都是0。例如,对于第一个位置,它只有起始符是“亮”的(也就是为1),而其它部分都是“暗”的(也就是为0)。举个示例,假设得到的QK^T矩阵的前两行Score 是这样的:img这样设计的目的是确保:在预测当前词时,模型只能获取到它之前的词的信息,而对当前词自身及其后面的所有词都是一无所知的。在计算得到QK^T矩阵后,在Mask QK^T 上进行Softmax操作。此时,每一行的元素和都会等于1。然而,对于单词0,其在单词1、2、3和4上的Attention Score都是0。img最后:将经过Softmax的Masked QK^T 与Value矩阵V相乘以获取注意力加权的输出,这个输出Z就是Decoder的Masked Self-Attention部分的结果,如下:img关键点2:理解什么是Cross Attention当输入经过Mask Attention后,要进入第二个Attention,但这个Attention不再是单纯的自注意力机制,而是Cross Attention,如下:img为什么需要Cross Attention?因为编码器持有了输入序列(比如:“我是一个学生”)的信息,而解码器的目标是在给定该输入时产生正确的输出序列。为了实现这一点,解码器需要对编码器输出的所有信息都有所了解,从而知道下一个输出词应该是什么。Cross Attention的操作方式和普通的注意力机制非常相似,但是Q来自于解码器的输出,而K和V来自于编码器的输出。这确保了解码器可以"询问"编码器有关输入序列的信息。这种"一问一答"的描述是形象的,它说明了解码器是如何利用编码器的信息来确定最合适的输出的。例如,在进行“我是一个学生”到“I am a student”的翻译时,解码器可能会询问编码器:“根据你对‘我’的理解,接下来我应该输出什么?”通过这种方式,解码器可以更准确地预测目标序列的下一个词。 你可以这样简单理解:第一步是类似于“自己对话”的方式,这被称作Masked Self-Attention。这确保解码器在“猜”某个词时只参考前面的词。接着是第二步,叫做Cross Attention或“交叉对话”。这里,解码器会“询问”编码器关于原始句子(例如:“我是一个学生”)的信息。这就像解码器问编码器:“你认为我接下来应该说什么?”然后编码器给出建议,例如:“接下来应该是‘I’”。这样,解码器就能更好地完成翻译任务。所以,简单说,第一步是解码器和自己“对话”,确定应该问什么问题。第二步是向编码器“提问”,得到答案,并继续翻译。这就是Decoder的两步注意力机制的工作原理。在Decoder的这种Cross Attention之后,模型将继续进行与Encoder部分相似的处理流程,包括多次的注意力计算和前馈神经网络操作。当Decoder的这些步骤全部完成后,输出会进入一个线性层进行映射。这个映射层的作用是把Decoder的输出转化为与词典大小相同的向量。接着,这个向量会经过Softmax层,转化为概率分布。最后根据这个概率分布选择概率最大的词作为输出。img这样,Transformer的整个工作流程就完成了。3.2 GPT系列模型通常一个模型或者架构的提出都是为了解决领域内存在的某些问题,在GPT-1提出之前,深度学习在自然语言处理领域的主流方法存在着以下两个比较大的局限性。在早期的深度学习应用中,许多方法都基于监督学习,这意味着需要大量的标注数据。但这种方法有一个明显的缺点:它限制了模型的适应性和灵活性。 以机器翻译和实体识别为例:如果使用特定的机器翻译数据来训练模型,那么这个模型主要就只能做机器翻译任务。同样,基于实体识别数据的模型也只能做实体识别。每种任务都需要大量的专用标注数据,但每个模型的应用范围都相当有限。因此,尽管投入了大量的数据,但得到的模型仍然只能在特定的任务中表现出色,无法跨任务灵活应用。这种局限性使得需要在不同的任务中重复劳动,效率低下且成本高昂。即使有了大量的标注数据,仍面临一个核心问题:缺乏一个通用的优化目标来学习有用的文本表示。 比如在NLP领域涵盖了众多任务,包括机器翻译、情感分类等。每一个任务通常都有其专属的目标函数,这意味着需要为每个任务单独设计和调优模型。因此,尽管已经投入了大量的资源和数据,但缺乏一个统一的、跨任务的优化目标导致我们充分地释放数据的潜力,并使得模型训练过程变得复杂和低效。这种现状强烈揭示了深度学习中一个核心的挑战:如何发现或设计一个既能捕捉到文本内在信息,又具有广泛适应性的优化目标,所以OpenAI提出了GPT1,那初代的GPT 1 是怎么做的呢?3.2.1 GPT 1 初露锋芒GPT 1 参考论文:https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdfGPT 1引入了使用Transformer架构的无监督预训练方法,有效地从海量无标签文本中提取有意义的表示。这种方法不仅强化了对各种自然语言任务的性能,还显著减少了对标注数据的依赖。关键点1:无监督的预训练GPT-1采用无监督训练方式,使用用未标记的数据来训练模型。其目的是使模型学习一套初始参数(这个初始参数也就是Transformer中的Wq,Wk,Wv),从而掌握在给定的上下文之后继续续写文本的能力。也就是说:让模型具备给定上文,能够继续续写下文的能力。 续写文本示例:首先,对模型进行了大量的无监督训练,让它阅读了上千万篇文章,从而掌握语言的基本模式。给GPT-1一个简短的提示,例如输入:"在一个寒冷的冬日,"续写1:"玛丽决定待在家里,烤一些曲奇,并与家人围坐在壁炉旁,分享故事和温暖的时光。外面的雪花飘落,每个人都沉浸在这美好的家庭时刻中,感受到冬日的宁静和温馨。"续写2:"孩子们激动地跑到户外,开始制作一个大雪人。他们滚起了雪球,找来石头作为雪人的眼睛和嘴巴,还戴上了一顶旧帽子。整个下午,他们都在雪地里嬉戏,忘记了冬日的寒冷。"思考一下为什么这种模型就能解决之前自然语言处理领域存在的问题?拿机器翻译为例,假如输入“我是一个学生,请帮我翻译成英文”,一个经过预训练的GPT模型,特别是在微调后,可能会生成“I am a student”这样的输出。尽管它不是传统意义上为机器翻译任务而设计的模型,但由于其强大的文本生成能力和对语言结构的深入理解,它可以实现这样的任务。所以自然语言处理的许多任务,可以被视为“生成某种输出”的问题,GPT这种预训练模型为这些任务提供了一种高效、灵活的解决方案。关键点2:如何指导GPT生成目标内容当GPT具备优秀的文本生成能力后,如何让其产生确切需要的内容呢? 例如,当输入“我是一个学生”时,GPT可能会生成“我每天都要按时去上学...”。尽管这句话是通顺的,但如果任务目标是想获得这句话的英文翻译,如何有效地指引模型呢?GPT给出的解决方案就是使用相应的有标签数据进行微调,使得模型能够满足不同任务的要求,这个过程需要的有标签数据就很少了。那对于GPT的架构,具体是什么样的?在GPT的设计中,它专门采用了Transformer的Decoder部分,从而实现文本的生成任务。虽然称其为生成式模型可能稍显简化,但这样的定位确实符合其核心功能。与原始的Transformer结构不同,GPT没有采用双重Attention机制,也不再需要编码的过程。其关键在于一个逐词预测的流程。为了实现这个目标,GPT内部采用了Masked Multi-Head Self-Attention机制,并搭配前馈网络。在某些常见的配置中,这种机制具备768维的向量和12个Attention Head,整体模型则堆叠了12层的Decoder。img这一阶段,本质上就是在大量的文本语料库上学习语言信息。其数学原理大概可以拆解如下:首先定义这样一个无监督语言序列:U = \{u_1, . . . , u_n\} \tag{1}
这里的U,可以把它理解为一段一段的话的集合,包含的元素就是一个一个的词它使用标准的语言建模目标函数来最大化给定上下文的词的似然度 标准语言模型:用于预测自然语言序列中词汇的概率分布,目标是给定上下文,对下一个词进行概率预测目标函数,论文中是这样定义的:img简单来说,这个公式的意思是:对于一个文本序列中的每一个词,我们都看它前面的k个词,然后使用模型(由参数\theta决定)来预测这个词的概率。目标是使这个概率尽可能地高。 以一个简单的例子来说:假设文本是"我喜欢吃苹果",如果现在要预测"吃"这个词,并且考虑前两个词作为上下文,那么就是在问:“给定‘我喜欢’这两个词,下一个词是‘吃’的概率是多少?”公式就是在帮助找到这个概率,并使其最大化。\theta 简单理解就是模型,其具体指的是多层的Transformer Decoder,其计算过程如下:img 理解这个公式:U是输入矩阵,We是单词编码,Wp是位置编码,然后经过Decoder解码器,最后经过Softmax得到输出,这个过程与<Decoder 如何做生成式输出>一节中的过程完全一致通过这个过程,模型已经获得了生成后续文本的能力。但产生的内容可能不总是用户所期望的。那么,GPT是如何确保生成相关内容的呢?GPT给出的有监督模型微调方案是这样的:首先准备有监督数据:x^1,x^2 ...... x^m表示的输入列, y 表示标签,然后将数据输入到已经预训练好的模型中预测y的概率,如下图:img 理解这个公式:x^1,x^2 ...... x^m是输入序列,这是为特定任务准备的有标签数据的输入部分。y是对应的标签或输出。{h_l}^m 表示经过预训练好的模型处理后得到的表示或特征。W_y 是一个权重矩阵,是微调中需要调整的关键参数。 在微调的过程中,模型的大部分结构和参数(预训练得到的知识)保持不变,但是某些特定的层或权重,如这里的 W_y,会根据新任务的有标签数据进行调整。简单地说,你已经有一个大致了解语言的模型,但是为了使它更好地完成特定任务(例如机器翻译、情感分析等),你需要微调某些参数。在这个公式中,你正在调整权重矩阵W_y 以使模型更好地预测输出 y 。同样,微调的有监督数据肯定不止一条样本,会有很多样本,所以微调的任务就变成了最大化这个目标函数:img微调的过程是这样的:img为了理解这个过程,首先我们要明确,微调主要是对模型的线性层进行调整,即图中的“Linear”部分。相对于整个Decoder的参数,这部分的参数较少,使得微调更加高效。那么,如何让模型知道具体执行哪种任务呢?其实,GPT采用了一种标记策略。当输入文本时,它通过特定的符号或标记来指示任务类型。比如,对于分类任务,它可能会用"Start"和"Extract"这样的标记来包裹文本。而对于Entailment任务,则可能使用"Start", "Premise", "Delim", "Hypothesis"以及"Extract"这样的标记来分割和标注信息。确切地说,该模型经历了两个阶段:首先是无监督的预训练阶段,这让模型掌握了基本的语言结构和知识,使其具备了生成语言的能力。但这种初步的“说话”可能不够精确或针对特定任务。因此,接下来是有监督的微调阶段,确保模型在特定任务上可以按照期望生成更精确的内容。也就是这种策略,GPT 1 在12个数据集上进行效果评估,其中9个数据集上都达到了新的SOTA效果:imgimg3.2.2 GPT 2 Zero-shot创新GPT 2 参考论文1:https://insightcivic.s3.us-east-1.amazonaws.com/language-models.pdfGPT 2 参考论文2:https://arxiv.org/pdf/2005.14165.pdf在GPT-1之后,研究人员观察到,随着模型规模的增大,其精确度和泛化能力仍具有显著的提升潜力。因此,GPT-2的主要改进方向已经清晰地呈现出来:利用更为庞大和丰富的数据集,构建更大规模的模型。对模型的结构进行细致的调整和优化。针对当时的研究现状,如果对于某一个特定的任务,需要该任务专门的数据集,GPT 1 使用的无监督预训练+有监督微调也没能避免这个问题,所以GPT 2在设计之初便引入了Zero-Shot学习的思想,意味着一旦模型训练完成,无需进一步调整其参数或结构,就能够直接处理各种任务并实现优秀的性能。Zero-Shot的目标是:在处理下游任务时,不再像GPT-1那样依赖开始符、分隔符和抽取符来告诉模型具体的任务,而是采用更直观的自然语言方式来指定任务。例如,要执行翻译任务时,我们可以直接对模型说:“请将'我是一名学生'翻译成英文。”这样,通过这种自然语言提示(Prompt),模型便知道应该执行的任务。img为了达到这一效果,OpenAI着重提高数据质量,他们从社交平台Reddit上抓取了约40GB的内容,类似如下:img这些文本中可能包含了如"提示"、"描述"、"答案"等关键信息。OpenAI坚信,只要数据量足够大且质量高,模型自然能够达到强大的效果。通过吸收这样的文本,GPT可以在学习人类对话模式的同时,逐渐培养出自我学习的能力。这种基于Zero-Shot的训练策略成功地证实了构建一个高效的通用语言模型是完全可能的。但结果是:GPT 2虽然提出了这种创新,但是论文中展现出来的结果并没有什么惊艳的表现。3.3.3 GPT 3 in-contenxt learningGPT 3 参考论文:https://arxiv.org/pdf/2005.14165.pdf当进入到GPT 3后,它基于GPT 2的Zero-Shot做了进一步的研究,它提出:给模型输入情景的描述,模型就会根据用户提出的情景要求来生成答案,这一过程被称为in-context learning。这一过程就提出了One-Shot及Few-Shot,如图:imgimg除此之外,GPT 3的模型结构中也引入了sparse transformer,且具有更大的1750亿个参数,从实验结论上来看,GPT 3取得了非常亮眼的表现。img3.3.4 GPT 4 涌现能力GPT 4 参考论文:https://arxiv.org/pdf/2303.08774v2.pdf最新的GPT-4模型已经发展为一个高级的多模态系统,能够接受图像和文本输入并输出文本。它在各种学术和专业基准测试中展现出与人类相当甚至更高的性能水平。OpenAI 在为机器学习模型设计的传统基准上评估了 GPT-4。从实验结果来看,GPT-4 大大优于现有的大型语言模型,以及大多数 SOTA 模型。img其实从GPT 1发展到GPT 4,其实大家可以发现GPT系列的内容越写越短,和GPT的越来越大成正比。这也证实了GPT发展的核心思想就是简单粗暴:大力出奇迹。那大语言模型为什么能有这样优异的性能,它的优势在什么地方呢?两个关键点:涌现能力和思维链 ,这两者是大语言模型不断接近人类的关键特征。 涌现能力
(Emergent Abilities)是指模型具有从原始训练数据中自动学习并发现新的、更高层次的特征和模式的能力。就中文释义而言,涌现能力也指大语言模型涌现出来的新能力。涌现能力的另一个重要表现是多模态模型的泛化能力。在没有专门训练过的情况,GPT 4也可以泛化到新的、未知的多模态数据样本上。这种泛化能力主要取决于模型的结构和训练过程,以及数据的数量和多样 性。如果模型具有足够的复杂性和泛化能力,就可以从原始数据中发现新的、未知的特征和模式。多模态大语言模型(Multi-modal Large Language Model,
MLLM)可实现更好的常识推理性能,跨模态迁移更有利于知识获取,产生更多新的能力,加速了能力的涌现。这些独立模态或跨模态新特征、能力或模式通常不是通过目的明确的编程或训练获得的,而是模型在大量多模态数据中自然而然的学习到的。思维链
(Chain of Thought)可视为大语言模型涌现出来的核心能力之一。思维链是ChatGPT和GPT 4能 让大众感觉到语言模型“像人”的关键特性。通过多模态思维链技术,
GPT 4将一个多步骤的问题(例如图表推理)
分解为可以单独解决的中间步骤。 在解决多步骤推理问题时,模型生成的思维链会模仿人类思维过程。虽然GPT 4这些模型并非具备真正的意识或思考能力,但用类似于人的推理方式的思维链来提示语言模型,极大的提高了GPT
4在推理任务上的表现,打破了精调(Fine-tune)的平坦曲线。具备了多模态思维链能力的GPT 4模型具有一定逻辑分析能力,
已经不是传统意义上的词汇概率逼近模型。3.3 ChatGPT的训练阶段不断的将模型扩大规模,虽然使其在各种任务展现出了出色的表现,但是在本质上并不能使模型很好 的遵循用户的意图。例如大语言模型可能会生成不真实的、不符合人类道德标准和社会规范的(有毒的) 以及对用户没有用的答案,总的来说就是没法和人类进行沟通。为什么会出现输出的答案不是人类想要的答案这种现象呢?一种解释是模型训练时目标函数设定的问题,大语言模型在训练时是以让模型生成文本 下一个词为目标的,与我们希望根据指示来生成高质量的优秀答案的目标是有差别的。那么,如何将模型与人类链接起来呢? ChatGPT背后采用了这样一种技术:生物反馈强化学习(reinforcement learning from human feedback,
RLHF)。具体做法是首先通过提交在OpenAI API上 问题标注数据并写出答案对模型进行微调,然后又收集了模型对一个问题的不同答案的排序数据集,并人 工对其答案的好坏进行排序,然后用强化学习模型对其进行学习。ChatGPT的训练过程分为以下三个阶段:第一阶段:训练监督策略模型GPT 3本身很难理解人类不同类型指令中蕴含的不同意图,也很难判断生成内容是否是高质量的结果。为 了让 GPT 3初步具备理解指令的意图,首先会在数据集中随机抽取问题,由人类标注人员,给出高质量答案,然后用这些人工标注好的数据来微调 GPT 3模型(获得SFT模型, Supervised Fine-Tuning)。此时的SFT模型在遵循指令/对话方面已经优于 GPT 3 ,但不一定符合人类偏好。第二阶段:训练奖励模型(Reward Mode,
RM)这个阶段的主要是通过人工标注训练数据(约33K个数据),来训练回报模型。在数据集中随机抽取问题,使用第一阶段生成的模型,对于每个问题,生成多个不同的回答。人类标注者对这些结果综合考虑给出排名顺序。这一过程类似于教练或老师辅导。接下来,使用这个排序结果数据来训练奖励模型。对多个排序结果,两两组合,形成多个训练数据对。 RM模型接受一个输入,给出评价回答质量的分数。这样,对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高。第三阶段:采用PPO
(Proximal Policy Optimization,近端策略优化)强化学习来优化策略。PPO的核心思路在于将Policy Gradient中On-policy的训练过程转化为Off-policy,即将在线学习转化为离线学习,这个转化过程被称之为Importance Sampling。这一阶段利用第二阶段训练好的奖励模型,靠奖励打分来更新预训练模型参数。在数据集中随机抽取问题,使用PPO模型生成回答,
并用上一阶段训练好
的RM模型给出质量分数。把回报分数依次传递,由此产生策略梯度,通过强化学习的方式以更新PPO模型参数。如果不断重复第二和第三阶段,通过迭代,会训练出更高质量的ChatGPT模型。四、大模型的发展方向当前,大模型正引发一场技术热潮,其应用如春花般遍地开放,各行各业都在积极探索并抢占这一先机。尽管我们仍处于大模型落地应用的初级阶段,但正是这一探索期让现在入行的人员占据了显著的优势。事实上,大模型及其相关的岗位如今已经供不应求,显示出这一领域的巨大潜力和前景。对于开发来说,我认为可以从以下三方面来进行考虑:如何化技术为产品,实现大语言模型的商业应用?适用人群:优秀的编程能力和Prompt Engineering能力大语言模型,尤其是像OpenAI的在线大模型这类产品,不仅在技术性能上具备出色的表现,还在商业变现方面展示了显著优势。其首要优点在于强大的NLP能力,能够广泛支持如自动翻译、智能助手、文本和情感分析等多种经典任务。此外,这些模型通过自然语言与用户进行无缝交互,极大地降低了新产品的使用门槛。重要的是,使用OpenAI的在线大模型,甚至不需要深入了解底层的机器学习或NLP原理。它可以作为一个“黑盒子”来快速和敏捷地开发各种应用。只要具备基础的编程能力,懂得如何设定合适的提示词,并了解工业级的提示生成流程,就可以轻松地构建各种功能强大、用户友好的NLP应用。在此基础上,一系列充满创意的应用,如AI算命师、AI心理咨询等纷纷涌现,进一步丰富了大模型在日常生活和工作中的应用场景。如何研发、训练私有化的垂直领域大模型?适用人群:具备扎实的机器学习、深度学习和自然语言处理(NLP)等AI方面的基础知识尽管GPT系列模型的完整细节尚未完全开源,但其成功已经为提升语言模型性能指明了一条路径。受到GPT的启示,全球各大科技公司正积极开发基于BERT、GPT,或是其他Transformer组合的大模型。以国内一流的ChatGLM系列为例,它便是在BERT和GPT的理念基础上开发的中文大模型。同时,与大模型研发和训练相关的技术,如生物反馈式强化学习(RLFH)、近端策略优化(PPO)、奖励权重策略(Reward-based Weighting),以及DeepSpeed训练引擎等,也在迅速发展,并展现出不可阻挡的势头。虽然目前可能不再是NLP理论高峰,但无疑,大模型的算法研发和训练仍然是NLP领域最前沿的研究方向之一如何降低大模型应用门槛与应用成本?适用人群:具备扎实的机器学习、深度学习和自然语言处理(NLP)等方面的基础知识,或者具备优秀的Prompt Engineering能力大模型需要消耗大量的数据和计算资源,这在商业应用中通常意味着高昂的成本。为了降低这些门槛和成本,多种先进的预训练、微调和大规模语料库构建技术正在迅速发展。自2020年以来,已经出现了许多创新的微调和自动语料生成方法,包括有监督微调(SFT)、低阶自适应微调方法(LoRA)、提示词前缀微调(Prefix Tuning)、轻量级提示词微调(Prompt Tuning)、以及百倍效率提升的微调方法P-Tuning V2和自适应预算分配微调方法(AdaLoRA)等。这些技术不仅推动了GPT-4.0等先进模型的发展,而且已经在NLP的研究和应用方面产生了深远影响,大幅度改变了该领域的现状。最后,感谢您阅读这篇文章!如果您觉得有所收获,别忘了点赞、收藏并关注我,这是我持续创作的动力。您有任何问题或建议,都可以在评论区留言,我会尽力回答并接受您的反馈。如果您希望了解某个特定主题,也欢迎告诉我,我会乐于创作与之相关的文章。谢谢您的支持,期待与您共同成长!
提到大语言模型,大家都能够联想到一个突出能力,那就是涌现能力。那么涌现能力是什么?我们该如何理解涌现?本文针对该现象展开分析,为你科普大语言模型的涌现,希望对你有所帮助。
我喜欢简单的快乐,那是复杂最后的避难所。——奥斯卡·怀尔德提到大语言模型,经常会听到其一个突出的能力:涌现能力。那么涌现能力是什么呢?想要深入了解涌现能力的读者,建议仔细阅读此文。我们先来看一下涌现的定义:一个系统所表现出来的特性与它的组成个体简单相加所表现出的特性存在很大不同,这一整体的系统行为被称作“涌现行为”。提取定义中的关键字:系统、个体、特性、简单相加、不同。单看定义,涌现的含义似乎仍如雾里看花,看得不是那么真切。也有人套用“量变引起质变”解释涌现能力。道理上讲没错,但是对于清晰理解涌现似乎帮助也不大。涌现是复杂科学中一个非常重要的概念。根据笔者的了解到的情况,只能非常抱歉地告诉各位:以人类目前的知识和认知水平,还无法定量解释涌现现象。复杂科学本身就太复杂了(不然为什么叫复杂科学呢),而且涌现现象也太常见了,信息科学、神经学、生态学、经济学、社会学等各个研究领域都存在大量的涌现现象。那么该怎么理解涌现呢?既然不能定量分析,那咱们就只能定性分析。演绎法行不通,咱们就尝试归纳法。一、蜂群的涌现行为蜜蜂是一种神经系统非常简单的生物。著名的动物学教授、诺贝尔奖得主弗里施教授发现:蜜蜂可以通过一种叫“八字舞”的舞蹈来相互交流信息。当一只小蜜蜂在外面发现食物,例如一大片开得正盛的花海,它会兴奋地飞回蜂巢,给同伴们表演一段热情洋溢的舞蹈。这段舞蹈的飞行路径就像阿拉伯数字“8”那样,包含一个来回摇摆和一个回头的动作。通过舞蹈的长度和频率,蜜蜂能精确地告诉同伴食物的具体位置和距离。举例来说,它摇起臀部的时间越长,代表食物距离就越远。更神奇的是,其他蜜蜂看到这段舞蹈之后,就能解码出信息,然后按照提供的地址找到那片花海盛宴。这就是大自然的奇妙算法:每只蜜蜂的智力或许不高,但通过这种特定的交流方式,整个蜂群就能发挥出强大的“集体智慧”。蜜蜂不仅会跳舞,还有一手避暑御寒的本事。蜜蜂要繁衍下一代,就必须在狭小的蜂巢里维持一个适宜的温度。当蜂巢太冷的时候,蜜蜂们会紧紧挤在一起,疯狂振翅以增加温度。当蜂巢太热的时候,蜜蜂们则会散开,扇动翅膀给蜂巢降温。有意思的是,每只蜜蜂开始升温或降温翅膀的温度临界点,取决于它们的遗传特征。也就是说,那些基因相近的蜜蜂,会在温度低于某个点时觉得冷,聚集在一起“抱团取暖”。同样,当温度高于这个点时,它们也会因为“热得慌”而散开,扇动翅膀给蜂巢降温。要理解这种现象,我们不能简单地把蜜蜂群看成一群个体。实际上,蜜蜂群是一个复杂的系统,每只蜜蜂都扮演着系统维持稳定的重要角色。虽然每只蜜蜂的行为都有差异,但通过相互协调,它们最终达成了群体目标——维持蜂巢的温度在最适宜的范围内。这种自组织的集体智慧实在太神奇了。“一支蜜蜂哪里抵挡得了寒风”,但当蜜蜂聚集在一起就足以抵挡气温变化带来的威胁。二、蚁群的涌现行为自然界中还有另外一种个体非常简单,但是群体能力非常强大的生物——蚂蚁。蚂蚁,虽然个体行为看起来纯粹反射性地被外界条件所驱动,即几乎完全是被外界环境驱使的。但这并不代表它们就是简单的“行动机器”。实际上,蚂蚁的大部分行为都可以用几条简单规则来描述。例如:用大颚紧紧夹住目标物;
沿着信息素的浓度上升或下降方向行进(信息素是蚂蚁用来编码信息的气味,比如“这条路有食物”或“这条路要打仗”);
死去的蚂蚁会分泌一种激素,蚂蚁会通过气味判断同伴是否活着。
一旦蚂蚁遇到这些规则未涵盖的新环境,它们会处在极大危险中。在规则之外的环境里,大多数蚂蚁,特别是工蚁,很难存活超过几个星期。不过,正是依靠这几条简单的行为规则,蚂蚁群体发挥出惊人的智慧。每只蚂蚁都像是一个微观的决策单元,它们相互协调、相互配合,最终汇聚成一个高效的整体。能完成非常复杂的任务,比如建造庞大的蚁穴、合作捕猎等。一个蚁群中各个成员的行为及其相互作用决定了整个蚁群的行为。然而作为一个群体,蚁群所显示出的灵活性却大大地超过了其个体成员的能力范围。蚁群可以感知并应对在很大地理范围内出现的食物、外敌、水患和很多其他现象。蚁群能够把领地延伸到很远的地方,按照有利于群体的方式来改变周围环境。蚁群的寿命一般要比其个体成员的寿命长几个数量级。这种简单规则带来的集体智慧,让蚂蚁这种体型微小的昆虫,成为了地球上最成功的社会物种之一。它们灵活运用基本规则应对环境的变化,在漫长的演化历程中不断进化,最终在地球上得以广泛的繁衍生息。单看每一个蜜蜂/蚂蚁个体,分析其身体结构和行为,我们绝对无法想象蜂群/蚁群能够具备上述那般复杂的群体行为。即蜂群/蚁群出现了与蜜蜂/蚂蚁个体简单相加无法得到的集体智慧,这种集体智慧就是一种涌现能力。生命游戏的涌现行为:康韦(Conway)的生命游戏:在该游戏中,系统在两维网格中以步调一致的方式运转,其中每个细胞要么是死的要么就是活的。其规则如下:刚好具有三个“活”邻居的“死”细胞将被“复活”,在下一个阶段变成一个有活力的细胞,否则的话,它仍然是死的。
拥有两到三个生动活泼邻居的活细胞能“存活”到下一个阶段;否则,它就会消失(要么出于“孤单”,要么由于“过度拥挤”)。
总体来说,该系统中一个拥有中间数量(邻居生命)的生命将得以延续(一个正向反馈),然而过多或过少的邻居生命将导致死亡(一个负向反馈)。通过上述的简单规则,在不同的初始状态下,能够将产生一系列在时空上都显著的全局模式,这些全局模式由一系列简单的微观规则所涌现。比如:生命游戏中的一个滑翔机是一个贯穿于整个空间的活细胞的布局配置。在每一个连续的时间步长(从左到右),一系列活细胞基于简单的、局部的游戏规则而改变。在四个时间步长以后,重新出现了活细胞的初始配置,仅仅向右下移动了一个细胞的位置。如果左边部分没有受到干扰,该结构就会继续“滑翔”穿越整个空间。还有更多神奇的生命游戏模式,感兴趣的读者不妨自行搜索,感受一下生命游戏“涌现”出的魅力。三、简单的涌现行为探索我们还可以设定一些更简单的规则,方便我们观察涌现行为。8.1表是这样一个映射:将每个可能的输入状态映射到某个输出状态。这个规则表的第一行(状态0)规定,如果一个主体及其两个邻居在上一次采取的行动都是0,那么该主体在下一个时期也将采取行动0。下一行(状态1)表明如果目标主体和它左边的邻居上一次采取的行动是0,右边的邻居采取的行动是1,那么该主体将采取行动1,等等。取20个以环形前后相邻的数字,即将20个数字首尾相连,这样每个数字左右都有一个邻居,可以根据邻居和自己当前的状态决定下一个状态。这个简单规则导致了一些有趣的系统行为。正如可从表8.2看到的,在整个图表中涌现出了“由0组成的向下的三角形”这种一致的宏观结构。这些三角形态的规模远远超出了行为规则的规模。因此,即使个体行为只是基于从三个位置上所观察到的行动而决定,涌现出来的一致的三角形结构所包含的位置却远多于三个(例如,在时间步12开始形成的一个三角形,它的底边跨越了20个位置中的13个)。这不由得让人想到了亚当·斯密的看不见的手,系统中主体的行动就好像正被某种看不见的力量协调着一样,创造出超出任何个体意图的模式。四、语言模型的涌现大型语言模型的发展历程并不完全一帆风顺。回顾深度学习发展的前10年,模型的性能提高主要依赖于网络结构的变革。由于“模型尺寸呈指数增长,性能只会线性增加”的语言模型的缩放定律的现象,研究人员发现,即便是最大的GPT-3模型,在有提示的情况下,其性能也不不如精心调教的小模型。同时超大的网络规模极大增加训练所需数据量、训练和推理成本。所以,当时并没有必要铤而走险,投入大量资源去训练一个“庞然大物”。然而,随着神经网络设计技术的日臻成熟,要仅通过优化网络结构来获得显著性能提高已然困难重重。近年来,着计算机算力的提高和数据集规模的扩大,研究者开始把目光转向模型规模的扩张。实验结果显示。一旦模型大小达到某个“临界质量”,其性能提高将远超比例关系,呈现出量变引发的质变。简而言之,当模型的参数数量超过某个阈值,它会突然展现出远超小模型的强大能力。这就催生了大规模预训练语言模型的蓬勃发展,尤其在自然语言处理领域。大语言模型的参数规模有多快呢?我们不妨来看一下有网友统计的大语言模型的参数量。据说现在功能最强大的大语言模型GPT-4的参数规模已经超过了万亿,短短4、5年的时间就增长了超100倍。大语言模型为什么能力这么强大?本质的原因在于超大规模的参数。每个神经网络单元都有简单、可描述的运算规则,然而大量的神经网络单元连接在一起,就涌现出组成其的神经网络单元、层所不具备的能力。那么为什么是语言模型的规模会出现暴涨,并且受到业内乃至社会的广泛关注呢?笔者认为原因之一如下:语言是人类最基本的符号系统之一。它是人们传递和交流信息的主要方式之一。语言不仅是人们交流的工具,还是人们认知的基础。语言推动认知的发展和变化,影响人们对自身、社会和世界的看法和理解。语言可以使人们意识到自己认知的差异,这种差异又反过来影响了语言本身的使用。有许多研究都表明语言是人类理解世界的基础。 例如,心理语言学家和神经语言学家发现,语言理解和产生的大脑机制涉及到一些基本的认知过程和神经网络。这些过程和网络在与语言无关的认知任务中也会被使用,例如视觉感知和决策制定。此外,发展心理学家和认知科学家也发现,婴幼儿通过语言来理解世界,而不会像成年人那样依赖语言来思考和感知。因此大语言模型是一种对人类认知世界基础方式的一种颠覆性技术,受到广泛关注和具备巨大的应用前景也就不足为奇了。总结涌现无处不在,生物体、社群组织、科技、文化、文明等各领域涌现出的不可思议的特性,构成了我们身边的世界。通过聪明、复杂的方式,根据十分简单的原则,我们可以用电线将几个简单的模块单元(电阻、电容、电感和晶体管)连接起来从而生产出拥有奇迹般强大力量、能够以闪电般速度执行困难任务的复杂产品——电子计算机。在意识知觉的背后却蕴含着涉及数十亿神经元的精致而复杂的大脑活动,当这些活动持续半秒后意识才会涌现出来。意识是涌现系统现象,而不是大脑中的神经通路和神经元的总和所引发的后果。基于信息科学和脑科学的大语言模型,涌现出了类人的智慧。同涌现现象一样,以人类当前的知识水平,难以解释大语言模型的机理,然而仍然不妨碍我们观察、总结、应用大语言模型。就像虽然我们不懂脑子为什么能让我们拥有智慧,我们仍然可以用自己的智慧去解决各种问题。希望本文能对各位读者理解大语言模型有所帮助,感谢阅读!专栏作家一直产品汪,微信公众号:apmdogy,人人都是产品经理专栏作家。逻辑型产品经理,致力于将科学思维与产品经理方法论结合。关注人工智能、教育领域,擅长产品孵化、需求挖掘、项目管理、流程管理等产品技能。本文原创发布于人人都是产品经理,未经许可,禁止转载。题图来自Unsplash,基于CC0协议。该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
2023年07月13日 05:37--浏览 ·
--喜欢 ·
--评论多年来,深度学习界一直倡导开放和透明,这导致了像HuggingFace这样的大型开源项目的出现。深度学习中许多最深刻的思想(如Transformer
[2]、自监督学习等)都可以在互联网上公开获取,无论是通过公共代码仓库还是Arxiv预印本。尽管开源已经成为一种常态已有一段时间,但最近大型语言模型(LLM)的受欢迎程度(以及商业应用价值)对这种趋势提出了挑战。如今,许多最强大的大型语言模型(LLM)只能通过API(例如OpenAI或Anthropic提供的)进行访问,使得研究人员和开发者无法获得其源代码和模型参数。虽然我并不打算引发关于当前LLM领域趋势的道德讨论,但这些信息与本帖子的主题——公开可用的LLM——相关。有趣的是,并非所有强大的语言基础模型都隐藏在付费墙后面。一些模型,例如LLaMA,既是公开可用的,又具有非常高的性能,从而在深度学习研究社区保持了开放性的精神。LLaMA并不是单一的模型,而是一组具有不同参数规模的大型语言模型(LLM)套件,参数规模从70亿到650亿不等。LLaMA的设计灵感源自Chinchilla
[3],这些LLM比它们的同类模型稍小,但经过了广泛的预训练(即较小的模型,更多的标记),并旨在提供一组具有不同性能和推理效率之间不同权衡的模型。LLaMA模型的表现令人惊讶,例如,130亿参数的模型与GPT-3
[4]大致相当,而650亿参数的模型往往超过了PaLM [5]的性能。“GPT-4从各种经过许可、创建和公开可用的数据源中进行了学习,这些数据源可能包括公开可获取的个人信息。”除了令人印象深刻的性能之外,LLaMA仅使用公开可用的数据进行预训练。在LLM领域中,LLaMA在一定程度上迈出了(回归)开源的步伐,LLaMA模型可以完全通过在线资源进行再现。而像GPT-4这样的最新模型已知是通过公开数据和专有/私有数据的组合进行训练的。尽管这可能有助于模型性能的提升,但LLaMA表明我们可以利用在线可获得的数据做很多事情,从而为与LLM相关的开放性研究倡议提供了一种希望的来源。figure 1LLaMA的LLM采用了许多在先前的工作中提出的思想和技术。在本节中,我们将介绍一些有用的背景信息,有助于更深入地理解LLaMA及其组成部分。关于LLM的简要说明。首先,了解LLM的基础知识是有帮助的,包括它们的架构、训练过程和一般方法。我们在先前的概述中对这个主题进行了广泛的探讨。因此,在此处我们不会详细介绍这个主题,下面是提供我们进一步阅读和学习的文章和链接。通常,Transformer架构(包括仅使用解码器的Transformer架构,如LLMs所使用的)使用LayerNorm来对每个层的激活值进行归一化处理。然而,使用不同的归一化技术已被证明可以稳定训练并提高泛化性能。例如,均方根层归一化(RMSNorm)的定义如下所示。formula 1RMSNorm与LayerNorm在某种程度上相似,但在对神经网络的激活值进行归一化时,它去除了均值居中操作(并使用稍微修改的分母)。与LayerNorm相比,RMSNorm在计算效率和简单性上更高,使其能够以相当的性能水平实现10-50%的效率提升。table1LLM的解码器架构中的每个块都包含一个两层的前馈神经网络(即,不使用偏置,并且分别应用于每个标记向量),在两层之间使用非线性激活函数。最初,这个非线性激活函数是修正线性单元(ReLU)。然而,最近的研究[15]揭示了这不是最优的选择。formula 2特别是LLaMA(以及其他类似的LLM,如PaLM)选择使用SwiGLU激活函数,其在上述方程中进行了定义。在这里,我们将Swish激活定义如下。SwiGLU是输入x的两个线性变换的逐元素乘积,其中一个经过了Swish激活函数的处理。虽然这个激活函数需要进行三次矩阵乘法运算,但研究发现,即使使用的计算量保持不变,相对于其他激活函数,SwiGLU在性能上也有所提升。Rematerialization,也被称为重新计算,是在LLM(以及其他大型神经网络)的训练中使用的一种技术,以牺牲额外的计算量来减少内存消耗。通常,在计算神经网络的前向传播时,我们会存储/保留网络在每一层的激活值,以便在反向传播过程中使用(这对于计算权重更新是必要的!)但是,这需要大量的内存!Rematerialization的基本思想是在反向传播过程中重新计算某些中间激活值,而不是在前向传播过程中将它们存储在内存中。这有助于减少训练过程中的峰值内存使用量,使得可以在可用内存限制下训练更大的模型或使用更大的批次大小。对于LLM来说,这一点尤为重要,因为它们很大并且消耗大量内存。现在我们已经掌握了一些有用的概念,让我们更多地了解LLaMA中的LLM集合及其工作方式。由于这些模型在很大程度上受到Chinchilla提出的预训练策略的启发(简而言之,就是对更多数据进行小型LLM的预训练)[3],在深入研究LLaMA之前,我们将简要概述这些想法。总的来说,LLaMA对于庞大的LLM趋势提出了质疑,声称(如果进行了足够的预训练!)更小的LLM可以在显著降低推理预算的情况下实现令人印象深刻的性能。在最近LLM的发展历程中,Chinchilla [3]的提议尤为引人注目。在GPT-3之后,深度学习研究界对足够大的语言模型展现出的令人印象深刻的少样本学习能力感到惊叹。因此,我们开始测试比GPT-3还要庞大的模型。然而,结果并不那么好!Hoffmann等人(2022年)的最新研究表明,在给定的计算预算下,最佳性能并不是由最大的模型实现的,而是由更小的模型在更多数据上进行训练的。要创建比GPT-3更好的LLM,我们不能仅仅使用更大的模型,而是需要更多的预训练数据!具体而言,Chinchilla的分析表明,如果我们对稍小的LLM进行更广泛的预训练,可以实现更高水平的性能。这是完整的情况吗?尽管我们知道如果进行广泛的预训练,较小的LLM可以表现出色,但是即使在[3]中进行的分析也表明,训练相对较大的LLM是达到高性能水平最高效的方式。这个观点是完全正确的,但它只考虑了训练效率。因此,我们必须问自己一个问题:训练效率是我们唯一关心的吗?对于大多数从业者来说,毫无疑问,答案是否定的!“本研究的重点是通过在比通常使用的更多标记上进行训练,训练一系列语言模型,在各种推理预算下实现最佳性能。” 训练成本只是与LLM相关的全部成本中的一小部分。我们还必须考虑托管成本,因此推理预算是一个巨大的考虑因素。LLaMA接受了这个观点,强调在达到目标性能水平的情况下,对较小的LLM进行更长时间的预训练最终在推理过程中更经济,并且随着时间的推移节省了大量成本。尽管在需要性能提升时我们可能会使用较大的模型,但通过广泛的预训练,我们应该尽量减小模型的大小(从而降低托管成本)。数据集。我们知道LLaMA的预训练数据集是基于公开数据的,但这些数据具体来自哪里呢?上面概述了用于LLaMA的预训练数据集的内容。可以看出,预训练数据(尽管完全公开)具有相当多的多样性,来源包括StackExchange和古腾堡计划等。经过标记化处理后,完整数据集大约包含1.4T个标记。这与Chinchilla [3]进行预训练的标记数量相同,请参见下文。考虑到LLaMA对透明度和可重复性的强调,在[1]中提供了大量关于构建预训练数据集的见解。讨论中最有趣的方面之一是我们可以通过它了解在对LLM进行预训练之前如何对数据进行过滤。例如,从CommonCrawl获取的文本数据会进行过滤,排除以下内容:- 重复的文档(使用CCNet管道[7]进行过滤)- 非英语数据(通过训练fastText线性分类器进行过滤)- 低质量内容(使用n-gram语言模型进行过滤)此外,[1]中的作者还训练了一个线性分类器,用于区分在维基百科中用作参考的页面和随机抽样的页面,然后丢弃未被分类为参考的页面。所有这些步骤都是为了对CommonCrawl进行过滤!根据之前的工作,我们知道正确过滤预训练数据集对LLM的性能至关重要。在[1]中,我们可以更深入地了解实施有效过滤管道的具体细节。LLaMA套件采用了很多流行的LLM(如GPT-3 [4]和PaLM [5])中常见的架构技巧。例如,LLaMA在每个层内部执行预归一化,这意味着在变换器中,归一化应用于每个层的输入而不是输出;请参见上文。此外,RMSNorm、SwiGLU激活函数和旋转位置嵌入(RoPE)[10](一种绝对位置嵌入和相对位置嵌入的混合形式)在每个变换器层中都被使用。在[1]中,使用了四种不同规模的模型,参数数量从67亿到652亿不等;请参见上文。这些模型构成了被称为LLaMA的LLM集合,并在性能、模型大小和推理预算之间提供了各种不同的权衡。值得注意的是,LLaMA-13B在性能上与GPT-3相媲美,并且可以在单个V100 GPU上运行。与之前的模型相比,这是一个巨大的成就,使得这些模型对大多数从业者来说更易于使用(例如,PaLM的训练使用了>6K个加速器)。更好的效率。[1]中的作者采用了一些有趣的技巧来提高LLM的训练效率。首先,我们应该回忆一下,基于仅解码器的Transformer模型的现代LLM在每个层中使用因果多头注意力。为了提高这种因果多头注意力操作的效率,LLaMA使用一种高效的实现,不存储注意力权重,也不为被屏蔽的标记计算键/查询分数。通过这样做,我们可以节省大量计算,通常浪费在被因果自注意力忽略的屏蔽标记上。这种方法受到[9]中的思想启发,但我们可以在xformers库中找到一个开源实现。除了高效的因果自注意力实现外,与大多数LLM训练策略相比,LLaMA在重计算方面采用了略有不同的方法。在前向传播过程中保存计算成本最高的激活值(例如线性层的输出),从而减少在反向传播过程中需要重新计算的激活值的数量。这种改变需要手动重新实现LLM的反向传播(而不是使用PyTorch中的自动求导),是一种混合的重计算方法,显著提高了整体训练吞吐量。“当训练一个65B参数的模型时,我们的代码在拥有2048个A100 GPU和80GB内存的环境下,每秒处理约380个标记/秒/GPU。这意味着在包含1.4T个标记的数据集上训练大约需要21天。” — 来自[1]考虑到LLaMA为提高训练效率所采用的修改,我们可能会想知道:这实际上使训练速度加快了多少?嗯,这在很大程度上取决于训练基础设施。然而,当使用2048个A100 GPU时,LLaMA-65B大约需要21天的时间完成对包含1.4T个标记的数据集的预训练。尽管开源和可重复性很重要,但如果模型表现不佳,人们就不会关心LLaMA!以前曾尝试过开源LLM(例如OPT和BLOOM [11, 12]),但这些模型在性能方面无法与现代LLM竞争。在本节中,我们将分析LLaMA模型相对于流行的LLM(如GPT-3和PaLM [4, 5])的性能。我们如何评估呢?如前文所述,LLaMA的评估方式与大多数语言基础模型类似:通过零样本和少样本学习。值得注意的是,LLaMA模型仅作为预训练的基础模型进行评估,这意味着不进行微调(无论是通过SFT还是RLHF)。LLaMA与流行的闭源LLM(如GPT-3、Gopher、Chinchilla和PaLM [3, 4, 5, 13])以及以前的开源LLM(如OPT、GPT-J和GPT-Neo [11, 14])在自由生成和多选题任务上进行比较。测试了各种领域(如常识和数学推理、代码生成、问答等)的性能。在闭卷问答和阅读理解任务中,我们发现LLaMA-65B取得了最先进的零样本和少样本性能,在性能上持续超过了PaLM和Chinchilla等更大的模型。更进一步,LLaMA-13B的表现令人惊讶地出色,甚至在大多数情况下优于GPT-3(后者的规模是其10倍!)。基本结论是,i)较大的LLaMA模型具有与最先进模型相竞争的能力,ii)相对于其规模而言,较小的LLaMA模型表现出色。LLaMA套件还在常识推理和数学推理任务上进行了评估。在常识推理任务中,LLaMA超过了多个强大基线模型的零样本推理性能;请参见上文。然而,需要注意的是,在这里没有采用特殊的提示方法(例如思路链提示)来促进推理能力的提升。先前的研究[5]表明,在没有正确的提示方法的情况下,LLM的“推理”能力可能随着规模的增大而降低。尽管这种分析存在一定的局限性,但与基线模型相比,LLaMA在推理能力上仍然表现相对出色。特别是,在数学推理数据集上,LLaMA模型与多个基线模型具有相当的竞争力(在某些情况下甚至更好)。事实上,LLaMA-65B甚至在数学数据上的表现超过了类似规模的Minerva模型,后者经过明确的微调以提高在此类任务上的性能。“Minerva是一系列在ArXiv和数学网页中提取的38.5B标记上进行微调的PaLM模型...在GSM8k数据集上,我们观察到LLaMA65B优于Minerva-62B,尽管它没有在数学数据上进行过微调。” — 来自[1]代码生成。除了基本的推理能力外,代码生成是LLaMA模型的另一个技能。尽管从未对代码进行微调(即代码在LLaMA的预训练数据中占比不到5%),LLaMA-65B在代码生成任务上表现优于PaLM,并且LLaMA-13B的代码生成性能超过了GPT-3(但是...GPT-3在生成代码方面的表现确实较差)。在MMLU基准测试中,LLaMA模型在大多数情况下的性能落后于Chinchilla和PaLM等LLM模型。这个基准测试是LLaMA性能明显被当前替代方案超越的少数情况之一。[1]中的作者声称,这种性能下降是由于LLaMA的预训练数据集中书籍和学术论文的数量有限(与最先进的LLM相比,这种预训练数据减少了>10倍)所导致的。在整个预训练过程中,当跟踪LLaMA模型的性能时,我们可以观察到性能明显且稳定地改善的趋势;请参见上文。尽管并非所有任务的表现都相似,但我们可以看到LLaMA采用的预训练策略整体上相对稳定。简而言之,LLaMA是一个具有令人震惊的出色性能的开源LLM。自LLaMA的提出以来,研究界已经充分利用了这个令人印象深刻的开放模型。例如,以下研究工作已经在LLaMA的基础上展开:- Vicuna:对LLaMA进行微调,性能(几乎)可与GPT-4相媲美 [链接]- Koala:基于互联网对话数据对LLaMA进行微调 [链接]- ChatLLaMA:使用最少的计算资源在自己的数据上创建个性化的ChatGPT版本 [链接]- ColossalChat:类似于ChatGPT的模型,基于LLaMA构建的RLHF流程 [链接]LLaMA的影响力很可能会显著增加。个人而言,我对开放LLM的研究持续进展感到非常兴奋。我希望使这些模型更易于使用将促使更广泛的研究界进行更深入的调查和开发。以下是一些基本的要点:开源LLM。目前,LLM生态系统正面临一个有趣的冲突,两种不同的方法被用来向公众展示这些强大的基础模型。一方面,像ChatGPT和GPT-4这样的模型仅通过付费API发布,阻止研究界详细访问这些模型。而像LLaMA这样的贡献则反对这种趋势,为研究界提供了完整的模型访问权限。最佳规模是多少?LLaMA不仅仅发布单个模型,而是提供了一系列不同规模的LLM。以往对LLM的研究往往倡导使用更大的模型,因为更大的LLM在训练过程中通常能够以更少的计算成本达到令人印象深刻的性能水平。然而,如果我们对较小的模型进行更全面的预训练,LLaMA表明我们可以在显著减少推理成本的同时达到可比较的性能水平。因此,考虑使用较小的LLM是有意义的,尤其是当我们需要部署它们时。值得注意的是,LLaMA中的某些模型可以在单个GPU上运行,这大大提高了对这些LLM的可访问性。令人印象深刻的性能。在LLaMA提出之前,许多研究团队尝试发布流行LLM的开源版本(例如,OPT基本上是一个开源的GPT-3)。但是,这些模型的性能要远远逊于通过API可访问的付费模型。尽管LLaMA在某些情况下性能不如理想,但它是一个巨大的进步,因为它经常在性能上超过了流行的最先进LLM(具体取决于所使用的模型规模)。

我要回帖

更多关于 高级语言,汇编语言,机器语言的联系 的文章

 

随机推荐