GPT架构及推理原理
导读。
本篇是作者从开发人员的视角,环绕着大模型正向推理进程,对大模型的原理的体系性总结,期望对初学者有所协助。
导言。
什么是。人工智能。?
清华大学出书社出书的《人工。智能。概论》中提出,人工智能是对人的认识、思维的。信息。进程的。仿照。。人工智能不是人的智能,但它能像人那样考虑,也或许超过人的智能。
依据这个想象,人工智能应当能够履行一般需求人类智能的使命,如视觉感知、。语音辨认。、决议计划和言语翻译等作业。就像人相同,能够看见、听见、了解和表达。这触及了许多人工智能的分支学科,如。核算机视觉。(CV)、自然言语处理(NLP)、语音辨认(VC)、常识图谱(KG)等。
NLP言语模型的开展,引自《A Survey of Large Language Models》。
NLP作为其间之一,其开展历经了多个阶段。在核算言语模型阶段,模型运用马尔科夫假定学会了怎么进行猜测。在神经言语模型的阶段,咱们经过词嵌入的向量表明让模型开端了解词的语义,并经过。神经网络。模型给人工智能装上了神经元,让模型开端“考虑”。在预练习言语模型阶段,咱们经过预练习奉告言语模型,要先学习走路再去跑。而在现在的大言语模型阶段,咱们依据扩展规律认识到了了力大砖飞的重要性,并收成了各种出现才能的惊喜,为AGI的开展立下了一个新的里程碑。
现在大模型现已带领NLP 范畴走向了全新的阶段,并逐渐向其他。AI。范畴扩展。LangChain的2024年Agent调研陈述显现,51.1%的企业现已在生产中运用Agent,78.1%的企业有计划将Agent投入生产,AI的浪潮现已席卷而来。而且AI开展的脚步还在加速。模型方面,OpenAI在2024年12月的发布会上,推出了o1专业版,凭仗其在后练习阶段的深度推理,使得模型在数学、。编程。、博士级问题上到达了人类专家的水平,比较于此前的大模型到达了断层抢先,近期国内Qwen推出了QwQ模型,月之暗面的KIMI推出了KIMI探究版,也都具有深度推理才能,国内外AI上的间隔正在逐渐缩短。运用方面,各家都在大力开展多模态AI,S。or。a、可灵等,让。视频。构思。的落地本钱从数十万元下降到了几十元,VLM的加持下的端到端。主动驾驶。也在大放异彩。
总而言之,咱们依然处在第四次。科技。革新的起点,业界猜测在2025年咱们或许会见证AGI(通用人工智能)的落地,而且还提出了ASI(超级人工智能)的概念,以为人类或许发明出在各个方面都逾越人类智能的AI,AI很有或许带领人类进入新的年代。
目光放回到大模型自身,关于开发人员而言,大模型的重要性,不亚于。JAVA。编程言语。大模型的推理原理,就像JVM虚拟机原理相同,假如不了解,那么在运用大模型时不免依照工程化的思维去考虑,这样常常会遇到困难,用不了解大模型。比方为什么模型不依照提示词的要求输出,为什么咱们都在用思维链。
而本篇是作者从开发人员的视角,环绕着大模型的正向推理进程,对大模型的原理的体系性总结,期望对像我相同的初学者有所协助。文中会引进部分论文原文、核算公式和核算进程,一起会添加许多比方和解说阐明,防止内容不流畅难明。篇幅较长不免有所疏忽,欢迎各位纠正。
大言语模型架构。
Transformer。
What is At。te。n。ti。on。
镇楼图,来自万物的来历《Attention is All You Need》。
Transformer架构由Google在2017年宣布的论文《Attention is All You Need》初次提出,它运用自留意力(Self-Attention)机制代替了之前在 NLP 使命中常用的RNN(循环神经网络),使其成为预练习言语模型阶段的代表架构。
要弄清一点,留意力机制并不是由Transformer提出。留意力机制最早来历于核算机视觉范畴,其思维在上世纪九十年代就现已被提出。在2014年的论文《Neural Machine Translation by Jointly Learning to Align and Translate》中留意力机制初次运用于NLP范畴,结合了RNN和留意力机制,提出了序列到序列(Seq2Seq)模型,来改进机器翻译的功用。Transformer的奉献在于,它提出留意力机制不必定要和RNN绑定,咱们能够将留意力机制独自拿出来,构成一套全新的架构,这也便是论文标题《Attention Is All You Need》的来历。
在正式开端前,首要需求阐明,什么是留意力机制?
在NLP范畴,有三个根底概念:
分词(Tokenization):首要大模型会将输入内容进行分词,分割成一系列的词元(Token),构成一个词元序列。
词元(Token):指将输入的文本分割成的最小单位,词元能够是一个单词、一个词组、一个标点符号、一个字符等。
词嵌入(Embedding):分词后的词元将被转化为高维空间中的向量表明,向量中包含了词元的语义信息。
举个比方,当咱们输入“我能够具有一杯咖啡吗?”时,首要经过分词构成“我”、“能够”、“具有”、“一杯”、“咖啡”、“吗?”这几个词元,然后经过词嵌入转变成高维空间中的向量。
在向量空间中,每一个点代表一个实体或许概念,咱们称之为“数据点”。这些数据点能够代表着详细的单词、短语、语句,他们能够被详细地、明晰地辨认出来,咱们称之为“实体”;也能够不直接对应于一个详细的实体,而是表达一种对事物的笼统了解,咱们称之为“概念”。这些数据点在向量空间中的方位和散布反映了实体或概念之间的相似性和联系,相似的实体或概念在空间中会更挨近,而不同的则相距较远。其地点空间的每一个方向(维度)都代表了数据点的某种特色或特征。这些特色和特征是经过模型练习取得的,或许包含了“情感”、“语法”、“词性”等方面,现实上因为这些特色和特征是模型经过练习进行内部学习的成果,他们的详细意义往往难以直观解说清楚。
当词元被嵌入到向量空间中,每个词元都会构成一个实体的数据点,此刻这些数据点所对应的向量,就代表了词自身的语义。可是在不同的上下文语境中,相同的词也会有不同的语义。比方在“科技巨子苹果”、“甘旨的苹果”这两句话中,“苹果”这个词,别离代表着苹果。公司。和生果。因而模型需求对原始向量“苹果”,依据上下文中“科技巨子”、“甘旨的”等信息,来进行数据点方位的调整,丰厚其语义。换句话说,词元与上下文中各个词元(包含其自己)之间具有必定程度的“依托联系”,这种联系会影响其自身的语义。
为了进一步解说上述内容,我画了一张图协助咱们了解。如下图是一个向量空间,咱们假定其只要两个维度,别离是“经济价值”和“食用价值”。“科技巨子”、“甘旨的”、“苹果”在词嵌入后,会在空间中别离构成自己的数据点,明显“科技巨子”相关于“甘旨的”的经济价值特色更明显而食用价值的特色更含糊。当咱们输入“科技巨子苹果”时,“苹果”的意义会受“科技巨子”的影响,其数据点的方位会向“科技巨子”挨近,在空间中会构成一个新的概念。
向量空间中的“科技巨子苹果”。
每个词元都需求捕捉自身与序列中其他词元的依托联系,来丰厚其语义。在“我配具有一杯咖啡吗?”中,关于“配”而言,它依托“我”作为其主语,这是一条依托联系。关于“咖啡”而言,“一杯”是其量词,这也是一条依托联系。
这种联系不只会在相邻的词元之间发生,在论文中有个词叫长间隔依托联系(long-range dependencies ),它指在词元序列中,相隔较远的方位的词元之间的互相依托或相关。比方,在“我殷切地感觉到,在这段绵长而繁忙的日子里,坚持清醒和会集精力十分有用,莫非此刻不配具有一杯咖啡吗?”中,“我”和“配”之间相隔很远,但他们依然具有语法层面的依托联系。这种依托联系或许十分长,从文章的最初,一直到文章的结束。比方,在一篇谈论文中,作者或许在文章最初提出一个观点,然后经过一系列的论据和剖析来支撑这个观点,直到文章结束或许再次着重或总结这个观点。在这个进程中,文章最初的观点和结束的总结之间就存在着长间隔依托联系,它们在语义上是严密相连的。
不过尽管词元与各个词元之间都或许存在依托联系,可是其依托程度不同,为了表现词元之间的依托程度,NLP挑选引进“留意力机制”。“留意力机制”能够动态地捕捉序列中不同方位元素之间的依托联系,剖析其强弱程度,并依据这些依托联系生成新的序列表明。其间心思维是仿照人类的留意力,即在处理许多信息时,能够聚集于输入数据的特定部分,疏忽掉那些不太重要的信息,然后更好地了解输入内容。
持续以“我配具有一杯咖啡吗?”为例,读到“具有”这个词元时,咱们会发现“我”是“具有”的主语,“配”是对“具有”的着重,他们都与“具有”发生了依托联系。这句话的中心思维,是或人以为自己有资历具有某物,所以或许“配”相对“我”而言,对“具有”来说更重要,那么咱们在剖析“具有”这个词的语义时,会给“配”分配更多的留意力,这一般表现为分配更高的“留意力权重”。
实际上,咱们在日常作业中现已运用了留意力机制。比方,咱们都知道思维链(COT,常用。<输入, 思考, 输出>来描绘)对大模型处理杂乱问题时很有协助,其实质便是将杂乱的问题拆分红相对简略的小问题并分进程处理,使模型能够聚集于问题的特定部分,来进步输出质量和精确性。“聚集”的这一进程,便是依托模型的留意力机制完结。一般模型会依托输出内容或内部推理(如o1具有内部推理进程,即慢考虑)来构建考虑进程,但哪怕没有这些内容,只是依托留意力自身,COT也能让模型进步部分功用。
Why Transformer。
自留意力机制是Transformer的中心。在论文中,Transformer阐明晰三点原因,来阐明为何放弃RNN和CNN,只保存留意力机制。
Transformer论文:《Attention is All You Need》。
原文:In this section we compare various aspects of self-attention laye。rs。to the recurrent and convolutional layers commonly used for map。pi。ng one variable-length sequence of symbol representations (x1, ..., xn) to another sequence of equal length (z1, ..., zn), with xi, zi ∈ Rd, such as a hidden layer in a typ。ic。al sequence tran。sd。uction encoder or decoder. Motivating our use of self-attention we consider three desiderata.- One is the total computational complexity per layer.。
- Another is the amount of computation that。 can。be parallelized, as measured by the minimum number of sequential operations required.。
- The third is the path length between long-range dependencies in the network. Learning long-range dependencies is a key challenge in many sequence transduction tasks. One key f。ac。tor affecting the ability to learn such dependencies is the length of the paths forward and backward signals have to traverse in the network. The shorter these paths between any combination of positions in the input and output sequences, the easier it is to learn long-range dependencies [12].。
译文:在这一部分中,咱们比较了自留意力层与一般用于将一个可变长序列的符号表明(x1, ..., xn)映射到另一个等长序列(z1, ..., zn)的循环层和卷积层的不同方面,其间xi, zi ∈ Rd。咱们考虑了三个首要要素来鼓励咱们运用自留意力:
- 每层的总核算杂乱性。
- 能够并行化的核算量,经过所需的最小次序操作数来衡量。
-。 网络。中长间隔依托之间的途径长度。学习长间隔依托性是许多序列转化使命中的一个要害应战。影响学习这些依托性才能的一个要害要素是前向和后向。信号。在网络中有必要穿越的途径长度。输入和输出序列中恣意两个方位之间的途径越短,学习长间隔依托性就越简略。
其间后两点特别值得留意:
并行化核算:在处理序列数据时,能够一起处理序列中的一切元素,这很重要,是模型练习时运用。GPU。的并行核算才能的根底。
长间隔依托捕捉:在留意力机制上不依托于序列中元素的特定次序,能够有用处理序列中元素之间相隔较远但仍互相影响的联系。
或许有些难以了解,让咱们输入“我配具有一杯咖啡?”来进行文本猜测,别离看一下RNN和Transformer的处理办法。
依托捕捉上的差异,是Transformer能够进行并行处理的条件,而并行处理是Transformer的中心优势之一。在预练习言语模型阶段,预练习(Pretrain)+微调(Finetune)是模型练习的首要范式。Transformer的并行化核算才能大大进步了模型练习的速度,长间隔依托捕捉才能为模型打开了上下文窗口,再结合方位编码等才能,使得Transformer相关于RNN取得了明显优势。而预练习又为Transformer带来了特征学习才能(从数据中主动学习和提取特征的才能)和搬迁学习才能(将在一个使命上学习到的常识运用到另一个相关使命上的才能)的进步,明显进步了模型的功用和泛化才能。
这些优势,也正是GPT挑选Transformer的原因。
GPT-1的论文《Improving Language Understanding by Generative Pre-Training》。
原文:For our model architecture, we use the Transformer, which has been shown to pe。rf。orm strongly on various tasks such as machine translation, document generation, and syntactic parsing. This model choice provides us with a more structured memory for handling long-term dependencies in text, compared to alternatives like recurrent networks, resulting in robust transfer performance ac。ros。s diverse tasks.。
翻译:关于咱们的模型架构,咱们运用了Transformer,它在机器翻译、文档生成和句法解析等各种使命上都表现出色。与循环网络等代替计划比较,这种模型挑选为咱们供给了更结构化的回忆来处理文本中的长时刻依托联系,然后在多样化使命中完结了稳健的搬迁功用。
Transformer。
Transformer架构图,引自《A Survey of Large Language Models》。
了解了Transformer的优势后,让咱们先忘掉RNN,回到Transformer自身。从架构图中可知,Transformer架构分为两部分:
编码器。:用于了解输入序列的内容。它读取输入数据,并将其转化成一个接连的表明,这个表明捕捉了输入数据的要害信息和上下文。
解码器:用于生成输出序列,运用编码器的输出和之前生成的输出来猜测序列中的下一个元素。
以文本翻译为例,输入“我爱喝咖啡”,并要求模型将其翻译成英文。编码器首要作业,经过了解每个词元自身的意义,以及其上下文的依托联系,构成一种向量办法的中心表明,并传递给解码器,这儿面包含了整个序列的语义,即“我爱喝咖啡”这句话的完好意义。解码器结合该信息,从零开端,不断地猜测下一个最或许的英文词元并生成词元,直至完结翻译。
值得留意的是,在解码器的多头留意力层(也叫穿插留意力层,或编码器-解码器自留意力层),编码器所供给的输出中,“我爱喝咖啡”这句话的意义现已明示。这关于文本翻译这种序列到序列的使命而言,能够保证生成内容的精确性,但关于猜测类的使命而言,无疑是提早发布了答案,会下降猜测的价值。
Transformer to GPT。
跟着技能的演进,依据Transformer现已构成了三种常见架构。
编码器-解码器架构(Encoder-Decoder Architecture),参阅模型:T5。
编码器架构(Encoder-Only Architecture),参阅模型:BERT。
解码器架构(Decoder-Only Architecture),参阅模型:GPT(来自OpenAI)、Qwen(来自通义千问)、GLM(来自清华大学)。
其间编码器-解码器架构,适宜进行序列到序列的使命,比方文本翻译、内容摘要。编码器架构,适宜需求对输入内容剖析但不需求生成新序列的使命,比方情感剖析、文本分类。解码器架构,适宜依据已有信息生成新序列的使命,比方文本生成、对话体系。
解码器架构下,又有两个分支:
因果解码器(Causal Decoder),参阅模型:GPT、Qwen。
前缀解码器(Prefix Decoder),参阅模型:GLM。
二者之间的首要差异在于留意力的办法。因果解码器的特色,是在生成每个词元时,只能看到它之前的词元,而不能看到它之后的词元,这种机制经过掩码完结,保证了模型在生成当时词元时,不会运用到未来的信息,咱们称之为“单向留意力”。前缀解码器关于输入(前缀)部分运用“双向留意力”进行编码,这意味着前缀中的每个词元都能够拜访前缀中的一切其他词元,但这仅限于前缀部分,生成输出时,前缀解码器依然选用单向的掩码留意力,即每个输出词元只能依托于它之前的一切输出词元。
不同架构的留意力办法比较,引自《A Survey of Large Language Models》。
或许有些不流畅,让咱们参阅《大言语模型概述》的比方来阐明一下。该比方中,现已存在了“咱们一起尽力”这六个词元,模型正在考虑怎么发生下一个新的词元。此刻,“咱们共”是输入(前缀),“同尽力”是模型解码现已发生的输出,蓝色代表能够前缀词元之间能够互相树立依托联系,灰色代表掩码,无法树立依托联系。
因果解码器和前缀解码器的差异在“咱们共”(前缀)所对应的3*3的方格中,两种解码器都会去剖析前缀词元之间的依托联系。关于因果解码器而言,哪怕词元是前缀的一部分,也无法看到其之后的词元,所以关于前缀中的“家”(对应第二行第二列),它只能树立与“大”(第二行榜首列)的依托联系,无法看到“共”(第二行第三列)。而在前缀解码器中,“家”能够一起树立与“大”和“共”的依托联系。
终究贴一张图咱们感受一下不同架构之间留意力办法上的差异。
单向留意力和双向留意力,有各自的优势,例如,关于文本生成使命,或许会优先考虑单向留意力以坚持生成的连贯性。而关于需求全面了解文本的使命,或许会挑选双向留意力以获取更丰厚的上下文信息。如上图别离是编码器架构(BERT)、编码器-解码器架构(T5)、因果解码器架构(GPT)、前缀解码器架构(T5、GLM)的留意力办法。
这些架构在当今的大言语模型阶段都有运用,其间因果解码器架构是现在的干流架构,包含Qwen-2.5在内的许多模型选用的都是这种架构。详细能够参阅下面的大言语模型架构装备图,其间类别代表架构,L 表明躲藏层层数,N 表明留意力头数,H 表明躲藏状况的巨细。
大言语模型架构装备表,引自《A Survey of Large Language Models》。
从2018年GPT-1开端,模型的根本原理的确阅历了一些改动和改进,可是评论其根本架构依然有价值。
GPT。
时刻来到2018年,OpenAI团队的论文《Improving Language Understanding by Generative Pre-Training》横空出世,它提出能够在大规划未标示数据集上预练习一个通用的言语模型,再在特定NLP子使命上进行微调,然后将大模型的言语表征才能搬迁至特定子使命中。其立异之处在于,提出了一种新的预练习-微调结构,而且特别着重了生成式预练习在言语模型中的运用。生成式,指的是经过仿照练习数据的核算特性来发明原始数据会集不存在的新样本,这使得GPT在文本生成方面具有明显的优势。
GPT模型架构,引自GPT-1的论文《Improving Language Understanding by Generative Pre-Training》。
上图来自于GPT-1的论文,图片左边是GPT触及到的中心组件,这是本文的要点内容。图片右侧是针对不同NLP使命的输入格局,这些格局是为了将各种使命的输入数据转化为Transformer模型能够处理的序列办法,用于模型与练习的进程。
GPT运用了Transformer的解码器部分,一起放弃了编码器中的穿插留意力机制层,保存了其余部分。全体上模型结构分为三部分:
输入层(Input Layer):将文本转化为模型能够处理的格局,触及分词、词嵌入、方位编码等。
躲藏层(Hidden Layer):由多个Transformer的解码器堆叠而成,是GPT的中心,担任模型的了解、考虑的进程。
输出层(Output Layer):依据躲藏层的终究输出生成为模型的终究猜测,在GPT中,该进程一般是生成下一个词元的概率散布。
在躲藏层中,最中心的两个结构别离是。
掩码多头自留意力层(Masked Multi Self Attention Layers,对应Transformer的Masked Multi-He。ad。Attention Layers,简称MHA,也叫MSA)。
前置反应网络层(Feed Forward Networks Layers,简称FFN,与MLP相似)。
MHA的功用是了解输入内容,它使模型能够在处理序列时捕捉到输入数据之间的依托联系和上下文信息,相似于咱们的大脑在接收到新的信息后进行了解的进程。FFN层会对MHA的输出进行进一步的非线性改换,以提取更高等级的特征,相似于咱们的大脑在考虑怎么回应,然后依据经过练习取得的信息和常识,发生新的内容。
举个比方,当咱们输入“美国2024年总统大选胜出的是”时,MHA会了解每个词元的意义及其在序列中的方位,读懂问题的意义,并给出一种中心表明,FFN层则会对这些表明进行进一步的改换,然后从更高等级的特征中得到最附近的信息——“川普”。
MHA和FFN的多层结构,引自3Blue1Brown的视频《GPT是什么?直观解说Transformer》。
躲藏层不只要一层,而是一种多层嵌套的结构。如上图,Attention是MHA,Multilayer Perceptron(MLP)是FFN,它们就像奥利奥饼干相同互相交织。这是为了经过树立更深的网络结构,协助模型在不同的笼统层次上捕捉序列内部的依托联系,终究将整段文字的一切要害意义,以某种办法充沛交融到终究的输出中。躲藏层的层数并不是越多越好,这取决于模型的规划,能够参阅前文贴过的模型。参数。表,其间的L就代表该模型的躲藏层的层数。较新的Qwen2-72B有80层,GPT-4有120层。
现在干流的大模型,在这两层都进行了不同程度的优化。比方Qwen2运用分组查询留意力(Grouped Multi-Query Attention,简称GQA)代替MHA来进步吞吐量,并在部分模型上测验运用混合专家模型(Mixture-of-Experts,简称MoE)来代替传统FFN。GPT-4则运用了多查询留意力(Multi-Query Attention)来削减留意力层的KV缓存的内存容量,并运用了具有16个专家的混合专家模型。关于这儿说到的较新的技能,在后文中会详细论述。
编码器-解码器架构与解码器架构,引自Llama的论文。
此外,模型还保存了Transformer的其他部分,包含了(参阅上图右半部分,该图片的细节更多一些)。
词嵌入 (Embedding,对应GPT论文中的Text & Position Embed)。
方位编码(Positional Encodings,简称PE,对应GPT论文中的Text & Position Embed,Rotary Positional Encodings是方位编码的一种技能)。
层归一化(Layer Norm,上图中表明为。RMS。Norm,一般与残差衔接一重用,Layer Norm和RMS Norm是归一化的两种不同技能)。
线性层(。Linear。,担任将FFN层的输出经过线性改换,一般用于将模型的输出映射到所需的维度)。
Softmax(Softmax层,担任生成概率散布,以便进行终究的猜测)。
这些部分独自拿出来看会有些笼统,让咱们测验将一段文本输入给大模型,看一看大模型的全体处理流程。
1.分词(Tokenization):首要大模型会进行分词,将文本内容分割成一系列的词元(token)。
2.词嵌入(Embedding):分词后的词元将被转化为高维空间中的向量表明,向量中包含了词元的语义信息。
3.方位编码(PE):将词元的在序列中的方位信息,添加到词嵌入中,以奉告模型每个单词在序列中的方位。
4.掩码多头自留意力层(MHA):经过自留意力机制捕捉序列内部词元间的依托联系,构成对输入内容的了解。
5.前馈反应网络(FFN):依据MHA的输出,在更高维度的空间中,从预练习进程中学习到的特征中提取新的特征。
6.线性层(Linear):将FFN层的输出映射到词汇表的巨细,来将特征与详细的词元相关起来,线性层的输出被称作logits。
7.Softmax:依据logits构成候选词元的概率散布,并依据解码战略挑选详细的输出词元。
在该流程中,我成心省掉了层归一化,层归一化首要是在模型练习进程中改进练习进程,经过规范化每一层的输出,协助模型更安稳地学习。而在运用模型时,输入数据会依照练习阶段学到的层归一化参数进行处理,但这个参数是固定的,不会动态调整,从这个意义上说,层归一化不会直接影响模型的运用进程。
分词、词嵌入、方位编码,归于输入层,MHA、FFN归于躲藏层,线性层、Softmax归于输出层。或许读到这儿,关于输入层的了解会相对明晰,对其他层的了解还有些含糊。没联系,它们的效果有简略的几句话很难描绘清楚,请持续往下读,在读完本文的一切内容后,再回头来看会比较清楚。本文中,咱们会环绕着躲藏层和输出层来详细介绍,特别是其间GPT的中心——躲藏层。
自留意力机制(Attention)。
MHA(多头留意力)。
MHA,全拼Multi-Head Attention(多头留意力),在GPT等因果解码器架构下模型中,指掩码多头自留意力,全拼Masked Multi Self Attention。“掩码”赋予了GPT单向留意力的特性,这契合因果解码器的架构,“多头”使GPT能够从不同视点发现特征,自留意力中的“自”指的是模型重视的是单一词元序列,而不是不同序列之间的特征,比方RNN的循环留意力环绕的是同一序列的不一起间步。
多头留意力机制的概念,来自于上古时期Google的论文《Attention Is All You Need》 。
缩放点积留意力(左)和多头留意力(右),来自《Attention Is All You Need》。
从上图能够看到,多头留意力是由多个并行运转的缩放点积留意力组成,其间缩放点积留意力的意图,是协助模型在许多数据中快速找到并专心于那些对当时使命最有价值的信息,让咱们由此讲起。
单头留意力(缩放点积留意力)。
了解模型核算留意力的进程是很重要的,Transformer团队运用了上图中十分简练的公式来表达缩放点积留意力的核算进程。首要要再次明晰一下,留意力的核算是词元维度的,它核算的是当时词元与上下文中其他词元的依托联系,并在此根底上调整词元自身的语义。比方在“我配具有一杯咖啡吗?”中,会别离核算“我”、“配”、“具有”、“一杯”、“咖啡”、“吗?”各自的留意力,并别离调整每个词元的语义。 整个公式能够看作两部分,首要是含softmax在内的留意力权重核算进程,其效果是核算“当时词元”与“其他词元”(包含当时词元自身)之间的留意力权重,来表现他们之间的依托程度,其成果是一个总和为1的份额散布。比方输入“我喜欢你”时,“你”会别离核算与“我”、“爱”、“你”三个词元的留意力权重,并取得一个份额散布比方[0.2,0.3,0.5]。 然后,这些留意力权重会别离与“其他词元”各自的相乘取得“当时词元”的数据点在向量空间中偏移的方向和间隔。比方,咱们设本来“你”的数据点的坐标是,那么在留意力核算后的值会变成,其核算的办法便是。假如说便是在前文What is Attention末节中举例的“科技巨子苹果”中“苹果(实体)”地点的方位,那么此刻便是“苹果公司(概念)”地点的方位。 上述描绘或许还不行透彻,请跟着我进一步逐渐拆解其核算进程。 首要,X为输入的词元序列的嵌入矩阵,包含了词元的语义信息和方位信息,矩阵中的每一列便是一个词元的向量,列的长度便是躲藏层的参数量,比方GPT-3的躲藏层参数量是12288,那么在输入100个词元的情况下,矩阵的巨细便是100 * 12288。 是经过练习得到的三个权重矩阵,在模型练习进程中这三个参数矩阵能够选用随机战略生成,然后经过练习不断调整其参数。输入矩阵X经过与相乘,能够别离得到Q、K、V三个矩阵。
QKV核算公式,引自《A Survey of Large Language Models》 那么Q、K、V别离是什么?
原文:An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key. 翻译:留意力函数能够被描绘为将一个查询(query)和一组键值对(key-value pairs)映射到一个输出(output)的进程,其间查询、键、值和输出都是向量。输出是经过值的加权和核算得到的,每个值所分配的权重是经过查询与相应键的兼容性函数(compatibility function)核算得出的。
咱们能够以为。
Q:查询,一般能够以为模型代表当时的“问题”或“需求”,其意图是探寻其他词元与当时词元的相关性。
K:键,即要害信息,这些信息用于判别词元的相关性,或许包含语义信息、语法人物或其他与使命相关的信息。
V:值,即关于键所标识的要害信息的详细“回应”或“扩展”,能够以为它是键背面的详细信息。
Q归于当时词元,而K、V都归于其他词元,每个词元的K、V之间都是互相绑定的。就像是一本书,V便是这本书的摘要、作者、详细内容,K便是这本书的。标签。和分类。 每个词元,都会用自身的Q和其它词元的K,来衡量与之间的相关性。衡量的办法便是核算QK之间的点积,在公式中表现为。点积运算是归纳衡量两个向量在各个维度上的相关性的一种办法,比方,其点积的成果便是,即对应重量的乘积之和。相关性的巨细,便是经过点积运算取得的成果的巨细表现的。 举个比方,以“有一天,一位英勇的探险家”作为输入序列给大模型。
Q:假定Q代表着“查找最相关的信息点”这个概念,那么在“探险家”这个词元上,Q所对应的这一列,或许代表“和探险家最相关的信息点是什么?”,那它寻觅的或许便是“冒险”、“勇气”、“活跃”等特征。
K:在“英勇的”这个词元上,K或许在语义上与“冒险”、“勇气”相相关,在语法上与“修饰语”相相关,在情感上与“活跃”相相关。这些都归于要害信息。
V:在“探险家”这个token上,假如Q是“和探险家最相关的信息点是什么”,那么V向量将供给与“探险家”直接相关的上下文信息,比方探险家的行为、特征或相关事情。
关于“探险家”所对应的Q的向量,会别离与序列中的其他词元对应的K向量核算点积,取得与“有一天”、“一位”、“英勇的”、“探险家”这些词元点积的值,这代表着二者之间的语义相似度。有或许,“探险家”因为其也具有“冒险”、“勇气”等要害特征,其与“英勇的”的点积相对更大,那么其在归一化后的占比也会更高,在GPT的了解中,“英勇的”关于“探险家”而言,就更重要。 关于为何要运用点积进行运算,论文中也进行了剖析,文中剖析了加性留意力和点积留意力的这两种兼容性函数之间的差异,发现点积留意力能够捕捉序列中元素间的长间隔依托联系的一起,在核算上高效且能安稳梯度。
原文:The two most commonly used attention functions are additive attention [ 2], and dot-product (multi-plicative) attention. Dot-product attention is identical to our algorithm, except for the scaling factor. Additive attention computes the compatibility function using a feed-forward network with a single hidden layer. While the two are。 sim。ilar in theoretical complexity, dot-product attention is much faster and more space-efficient in practice, since it can be implemented using highly optimized matrix multiplication code. 翻译:两种最常用的留意力函数是加性留意力[2]和点积(乘法)留意力。点积留意力与咱们的。算法。相同,除了有一个缩放因子。加性留意力运用具有单个躲藏层的前馈网络来核算兼容性函数。尽管两者有理论上的杂乱度相似,但在实践中,点积留意力要快得多,也更节约空间,因为它能够运用高度优化的矩阵乘法代码来完结。
点积的成果会除以的平方根,来对点积的成果进行缩放,保证数值安稳,这一段在原文中也有表述。经过将“探险家”与每一个词元都进行一次核算,就能够得到一个向量,向量中的每一个元素代表着“探险家”与对应词元的点积的值。之后进行掩码(Mask),在前文中说到,在因果解码器中,当时词元是无法看到自身之后的词元的,所以需求将当时词元之后的一切点积置为负无量,以便使其在归一化后的占比为零。 终究对点积softmax进行归一化,就能够得到一个总和为1的一个份额散布,这个散布就叫“留意力散布”。下面表格中“探险家”所对应的那一列,便是“探险家”的留意力散布,代表着从“探险家”的视角动身,每一个词元关于自身内容了解的重要程度。
KeyQuery。 | Q 有一天。 | Q 一位。 | 英勇的。 | 探险家。 |
K 有一天。 | 1。 | 0.13。 | 0.03。 | 0.02。 |
K 一位。 | 0 | 0.87。 | 0.1。 | 0.05。 |
K 英勇的。 | 0 | 0 | 0.87。 | 0.08。 |
K 探险家。 | 0 | 0 | 0 | 0.85。 |
一个或许的Softmax后的概率散布(每一列的和都为1,灰色代表掩码)。
终究,将Softmax后取得的留意力散布,别离与每一个K对应的V相乘,经过留意力权重加权求和,就能够得到一个向量,称为上下文向量。它便是求解出来的值,其间包含了序列中与当时元素最相关的信息,能够以为是模型在结合了上下文的信息后,对序列内容的了解的一种表明办法。
多头留意力。
关于什么是多头留意力,为何运用多头留意力,论文中有这样一段描绘,各位一看便知。
原文:Instead of performing a single attention function with dmodel-dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values h times with different, learned linear projections to dk, dk and dv dimensions, respectively. On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding dv-dimensional output values. These are concatenated and once again projected, resulting in the final values, as depicted in Figure 2. Multi-head attention allows the model to jointly attend to information from different representation。 sub。spaces at different positions. With a single attention head, averaging inhibits this. 翻译:咱们发现,与其履行一个具有dmodel维键、值和查询的单一留意力函数,不如将查询、键和值线性投影h次,运用不同的、学习得到的线性投影到dk、dk和dv维度。然后咱们并行地在这些投影版别的查询、键和值上履行留意力函数,得到dv维的输出值。这些输出值被衔接起来,再次被投影,得到终究的值,如图2所示。多头留意力答应模型一起重视不同表明子空间中的信息,以及不同方位的信息。而单一留意力头经过均匀操作按捺了这一点。
多头留意力的“多头”,指的是点积留意力函数实例有多种。不同的头,他们的都或许不同,这或许意味着词元会从不同视点去提问,一起表达出不同视点的特征,比方一个头或许专心于捕捉语法信息,另一个头或许更重视语义信息,还有一个头或许更重视情感剖析。这关于充沛捕获上下文信息,特别是在处理杂乱的序列数据时,变得愈加强大和灵敏。 这种优化并没有使核算的杂乱度升高,论文中特别说到。
原文:In this work we employ h = 8 parallel attention layers, or heads. For each of these we use dk = dv = dmodel/h = 64. Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality.。
翻译:在这项作业中,咱们运用了 h=8 个并行的留意力层,或许说是“头”(heads)。关于每一个头,咱们设置 dk=dv=dm/h=64 。这儿的dk和dv别离代表键(keys)和值(values)的维度,而是模型的总维度。
进一步举个比方来解说一下这段内容。下面是节选的GPT-3模型装备,N代表留意力头数,H代表躲藏状况的巨细(参数量)。在单头留意力的情况下,每个头都是12288维,而在多头留意力的情况下,头与头之间会均分参数量,每个头的参数量只要12288/96 =128维,而且不同头的留意力核算都是并行的。
GPT-3模型装备,引自《A Survey of Large Language Models》 现在,这种规划跟着技能的开展有所演进,Q的头数在规范的MHA下,一般与KV的头数相同,然后现在干流的大模型都进行KV缓存的优化,Q和KV的头数或许并不相同。比方咱们常用的Qwen2-72B,其躲藏层有8192个参数,有64个Q和8个KV头,每个头的参数量是128。数据来自于Qwen2的技能陈述(如下图),详细技能细节在后续GQA部分会有详细阐明。
Qwen2系列模型参数,引自《QWEN2 TECHNICAL REPORT》 回到核算进程中,多头留意力,会在每个头都依照缩放点积留意力的办法进行运算后,将他们发生的上下文向量进行衔接,依据输出投影矩阵进行改换。这个进程是为了归纳不同留意力头所供给的信息,就像是归纳考虑96个人的不同定见,并构成终究的定论。 这种归纳的进程并不是简略地求均匀值,而是经过进行的衔接操作。
详细来说,首要多头留意力会获取每个单头留意力所供给的上下文向量,并在特征维度上进行衔接,构成一个更长的向量,对应公式中的,其间h是留意力头数。拼接后的矩阵的维度是躲藏层的维度,比方GPT-3有96个头,每个头有128*12288维,那么拼接后构成的便是一个12288*12288维的矩阵。是模型在练习进程中学习到的要害组成部分,将拼接后的矩阵向量依据该矩阵做一次线性改换,有助于模型在多头留意力的根底上进一步优化特征表明,进步模型的全体功用。 至此,标示的MHA的相关内容就结束了。接下来MHA层的输出,会传递到下一层,或许是FFN,也或许是MoE,取决于详细的模型。在此之前,先来看一下大模型对留意力层的优化。 。
KV Cache。
前文说到,因果解码器的特色,是在生成每个词元时,只能看到它之前的词元,而不能看到它之后的词元。也便是说,不管模型在自回归进程中生成多少词元,此前现已生成的词元对上下文内容的了解,都不会发生任何改动。因而咱们在自回归进程中,不需求在生成后续词元时从头核算现已生成的词元的留意力。
我是真的爱喝咖啡 可是,新生成的词元的留意力需求核算,这会触及新生成的词元的Q与其它词元的K核算点积,并运用其它词元的V生成上下文向量。而此前生成的词元K、V,实际上一直不会改动,因而咱们能够将他们缓存起来,在新生成的词元核算留意力的时分直接运用,防止重复核算,这便是KV缓存。如上图,现已生成的词元“我”、“爱”、“喝”都不会从头核算留意力,可是新生成的“咖啡”需求核算留意力,期间咱们需求用到的是“咖啡”的 Q,和“我”、“爱”、“喝”的K、V。 KV缓存的中心思维是:
缓存不变性:在自回归生成进程中,现已生成的词元的键(Key,K)和值(Value,V)不会改动。
防止重复核算:因为K和V不变,模型在生成新词元时,不需求从头核算这些已生成词元的K和V。
动态更新:当新词元生成时,它的查询(Query,Q)会与缓存的K进行点积核算,以确认其与之前一切词元的相关。一起,新词元的K和V会被核算并添加到缓存中,以便用于下一个词元的生成。
在运用KV Cache的情况下,大模型的推理进程常被分为两个阶段。
预填充阶段(Prefill):模型处理输入序列,核算它们的留意力,并存储K和V矩阵到KV Cache中,为后续的自回归进程做准备。
解码阶段(Decode):模型运用KV缓存中的信息,逐一生成输出新词元,核算其留意力,并将其K、V添加到KV Cache中。
其间预填充阶段是核算密集型的,因为其触及到了矩阵乘法的核算,而解码阶段是内存密集型的,因为它触及到了许多对缓存的拜访。缓存运用的是GPU的显存,因而咱们下一个面对的问题是,怎么削减KV Cache的显存占用。。
MQA。
2019年,Google团队发布了论文《Fast Transformer Decoding: One Write-Head is All You Need》,并提出了多查询留意力的这一MHA的架构变种,其全拼是Multi-Query Attention,简称MQA,GPT-4模型便是选用的MQA来完结其留意力层。 Google为何要提出,论文中说到。
原文1:Transformer relies on attention layers to communicate information between and across sequences. One major challenge with Transformer is the speed of incremental inference. As we will discuss, the speed of incremental Transformer inference on modern computing hardware is limited by the memory bandwidth necessary to reload the large "keys" and "values" tensors which encode the state of the attention layers. 原文2:We propose a variant cal。led。multi-query attention, where the keys and values are shared across all of the different attention "heads", greatly reducing the size of these tensors and hence the memory bandwidth requirements of incremental decoding. 翻译1:Transformer依托于留意力层来在序列之间和内部传递信息。Transformer面对的一个首要应战是增量推理的速度。正如咱们即将评论的,现代核算硬件上增量Transformer推理的速度遭到从头加载留意力层状况所需的大型“键”和“值”张量内存带宽的约束。 翻译2:咱们提出了一种变体,称为多查询留意力(Multi-Query Attention),其间键(keys)和值(values)在一切不同的留意力“头”(heads)之间同享,大大削减了这些张量的巨细,然后下降了增量解码的内存带宽需求。
增量推理(Incremental Inference)是指在处理序列数据时,模型逐渐生成输出成果的进程。张量其实便是多维数组,在留意力层首要指的是各个与留意力有关的权重矩阵。不难看出,Google团队留意到了K、V所带来的巨大内存带宽占用,经过MQA将K、V在不同留意力头之间同享,进步了模型的功用。
MHA、GQA、MQA的比较,引自《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》 咱们用GPT-3举例,它有96个自留意力头。那么在传统MHA中,生成一个新的词元,都需求从头核算96个Q、K、V矩阵。而在MQA中,只需求核算96个Q矩阵,再核算1次K、V矩阵,再将其由96个头同享。每次Q、K、V的核算都需求耗费内存带宽,经过下降K、V的核算次数,能够有用优化模型的解码速度。
在WMT14英德(English to German)翻译使命上的功用比较,来自《Fast Transformer Decoding: One Write-Head is All You Need》 BLEU是一种评价机器翻译质量的主动化目标,分数越高表明翻译质量越好。依据论文中对功用比较的成果,MQA的确相关于MHA,在翻译效果上的功用有所下降,可是相关于其他削减留意力头数量等代替计划而言,效果依然很好。 实际上因为KV缓存的运用,MQA下降的首要资源耗费,并不是内存带宽,而是内存占用,也便是KV缓存的巨细。。
GQA。
GQA,来自于Google团队的2023年的论文《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》,GQA的全拼是Grouped Query Attention(分组查询留意力),被包含Llama3、Qwen2在内的许多干流模型广泛选用。 论文中说到。
原文:However, multi-query attention (MQA) can lead to quality degradation and training instability, and it may not be feasible to train separate models optimized for quality and inference. Moreover, while some language models already use multiquery attention, such as PaLM (Chowdhery et al., 2022), many do not, including publ。icl。y available language models such as T5 (Raffel et al., 2020) and LLaMA (Tou。vr。on et al., 2023). 翻译:可是,多查询留意力(MQA)或许导致质量下降和练习不安稳性,而且或许不切实际去练习别离针对质量和推理优化的独立模型。此外,尽管一些言语模型现已选用了多查询留意力,例如PaLM(Chowdhery等人,2022年),但许多模型并没有选用,包含揭露可用的言语模型,如T5(Raffel等人,2020年)和LLaMA(Touvron等人,2023年)。
MHA、MQA、GQA的功用比较,引自《GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints》 它的实质其实是对MHA、MQA的一种折中,在显存占用和推理功用上的一种平衡。上图是对MQA、GQA、MHA三种留意力办法下模型功用的比较。(XXL代表Extra Extra Large,超大型模型,具有最多的参数量,Large代表大型模型,其参数量在规范模型和XXL之间)。
前馈神经网络。
FFN,全拼Feed-Forward Network,前馈神经网络。FFN层,经过对自留意力层供给的充沛结合了上下文信息的输出进行处理,在高维空间中进行结合练习取得的特征和常识,取得新的特征。FFN因其简略性,在。深度学习。范畴备受欢迎,其原理也相对更简略解说。
FFN层的处理进程,引自3Blue1Brown的视频《直观解说大言语模型怎么贮存现实》 在Transformer中,FFN层由两个线性改换和一个激活函数构成,它的处理进程是词元维度的,每个词元都会并行地进行核算,如上图,因而在学习FFN层的处理进程时,咱们只需求剖析单个词元的处理进程。
这个进程相同能够用一个简练的公式来表明,如上图,让咱们来逐渐解读一下。 首要,X是输入向量,代表了现已充沛结合上下文信息的单个词元,它由自留意力层供给,其维度便是躲藏层的维度,比方GPT-3中是12288。咱们将接收到的词元,首要与经过模型练习取得的矩阵相乘,进行一次线性改换,然后将输入向量映射到一个更高维度的空间,这个空间一般被称为FFN的“躲藏层”。这个进程能够以为是对输入的“扩展”,意图是使FFN的躲藏层能够表达更多的特征,这一层的维度一般比自留意力层供给的输出维度大得多,比方GPT-3中它的维度是49152,刚好是自留意力层输出维度的四倍。 举个比方,假定在自留意力层发生的输入中,模型只能了解到词元的语法特征、语义特征,比方“英勇的”,模型能感知到它是“描述词”、代表“英勇”。那么在经过这次线性改换后,模型经过扩大维度,就能感知到其“情感特征”,比方“正向”、“活跃”。 b代表bias,中文意思是偏置、成见、倾向性,它也是经过模型练习取得的,在模型的正向推理进程中能够视为一个常数。神经网络中的神经元能够经过公式来表明,b在其间能够操控函数到原点的间隔,也叫函数的截距。经过引进bias,能够防止模型练习进程中的过拟合,增强其泛化性,以更好地习惯不同的数据散布,然后进步猜测的精确性。 ,西格玛,代表激活函数。激活函数的效果,是为模型引进非线性的要素,作为一个“开关”或许“调节器”,来操控信息在神经网络中的传递办法,即某些特征是否应当被传递到下一层。这种非线性的要素,使得模型能够学习和仿照杂乱的函数映射联系。并经过让模型专心于那些对当时使命更有协助的正向特征,来让模型能够更好的挑选和组合特征。 举个比方,咱们经过线性改换,取得了关于输入内容的许多特征信息,但其间一部分信息相对没那么重要或毫不相关,咱们需求将他们去掉,防止对后续的推理发生影响。比方“我”这个词,自身的语法特征很明晰,咱们要保存,可是其并没有什么情感特征,因而咱们要将与“我”的情感特征相关的信息去除。
不同函数的曲线比照,引自《A Survey of Large Language Models》 当然,“去除”这个词其实并不精确,应当叫做“按捺”。ReLU作为一种激活函数,会将一切相乘后成果为零的部分去除,只保存一切成果为正的信息,咱们能够以为是“去除”。不过ReLU在现在干流的大模型中并不常用,比方Qwen、Llama等模型挑选运用SwiGLU,GPT挑选GeLU,他们的曲线相对愈加滑润,如上图。不同激活函数的挑选,是一种关于模型的非线性特性和模型功用之间的权衡,相似于ReLU这种函数或许会导致封闭的神经元过多,导致模型能够感知到的特征过少,变得稀少。
FFN层的处理进程,引自3Blue1Brown的视频《直观解说大言语模型怎么贮存现实》 在经过激活函数进行非线性改换处理后的向量,会再次经过矩阵进行第2次线性改换,将高维空间中的向量,从头映射回原始维度,并追加第二个偏置,来构成模型的输出。这种降维操作,一方面使得FFN层的输出能够与下一层(自留意力层或输出层)的输入维度相匹配,坚持模型的深度不变,削减后续层的核算量,另一方面模型能够对升维后学习到的特征进行挑选和聚集,只保存最重要的信息,这有助于进步模型的泛化才能。到此单次FFN层的履行进程就叙述结束了,全体进程能够参阅上图。 总结一下,向上的线性改换,使得词元能够表达出更多的特征,激活函数经过非线性要素,来增强模型对特征的表达才能,向下的线性改换,会将这些特征进行组合,这便是FFN层中模型的“考虑”进程。 别的要阐明,向量的特征,并不会像咱们前面举例的那样简略地能够归纳为“语义”、“语法”、“情感”特征。比方在模型练习进程中,模型或许学习到“美国总统”和“川普”之间具有相关性,“哈利”与“波特”之间具有相关性,“唱”、“跳”、“Rap”与“篮球”之间具有相关性,这些相关性很难用简略的言语来表达清楚,但它们也实实在在地构成了“川普”、“波特”、“篮球”的某些特征。 有人会说“练习大模型的进程就像炼丹”,这其实是在描绘模型内部的黑盒性。而咱们运用大模型时,也要防止工程化的思维,以为大模型必定会依照预设的规矩去履行,这其实并不尊重模型自身的特性。因为模型的推理进程,不只是遭到输入(包含提示词以及模型自回归进程中不断发生的输出)的影响,还会遭到练习数据、模型架构、以及练习进程中的超参数的影响。但咱们能够在了解了留意力机制后经过规划杰出的提示词,在了解了模型的考虑进程后经过进行模型的微调或增强学习,来驯化大模型。
FFN层的神经网络结构图 终究,我想讲一个概念。在各种技能陈述中,咱们常会看到一个词——“稠密模型”,它指的是模型在处理使命时,模型的每个神经元都互相相连,一切参数都一起参加核算的模型。如上图,FFN层不管是在向上的线性改换仍是向下的线性改换的进程中,每一个神经元都互相相连,因而这两层线性改换其实便是FFN层的两层稠密层,FFN层也就能够视为稠密模型的一种办法。 稠密模型因为其参数量很大,能够捕捉更丰厚的特征和杂乱的办法,但这也导致其较高的练习和推理本钱,且在数据集规划较少时,测验去拟合那些不具有普遍性的噪声,导致模型的过拟合,下降模型的泛化性。 与“稠密模型”相对应的是“稀少模型”,其间心思维是运用数据的稀少性,即数据中只要少部分特征是重要的,大部分特征都是冗余或许噪声。MoE便是一种典型的稀少模型,现在在GPT-4,以及Qwen2的部分模型等许多大言语模型上,被用于代替FFN层。
输出层。
在终究的终究,模型在经过多轮的躲藏层的核算后,取得了终究的躲藏状况。输出层,则担任将这个躲藏状况,转化为下一个词元的概率散布。
X是躲藏层的终究输出,其维度是,是输入序列的长度,是躲藏层的维度。而是经过练习取得的权重矩阵,其维度是,是词汇表的巨细,比方Qwen2-72B的词汇表巨细是151646。经过矩阵相乘,再与偏置bias相加,就能够将躲藏状况转化为输出词元的分数,也便是,它代表了模型经过“考虑”后的特征,用哪个“词元”来描述更适宜。
然后将经过归一化操作(Softmax),转化为词元的概率,在此根底上结合解码战略,就能够挑选详细的下一个词元进行输出。这个公式十分简略,其间便是某一个词元的分数。经过将指数函数运用于构成,不只能够保证词元分数的数值为正(便于转化为概率),还能添加不同分数之间的差异性。终究将单个词元的分数,与一切词元的分数之和相除,就能得到单个词元的概率,如此就能取得词汇表中每个词元的概率散布。
此刻,你或许会猎奇,那个是什么?指的是temperature,没错便是咱们在神机平台上常常见到的那个大模型节点的参数,它经过影响softmax后的概率,来影响终究输出概率散布的滑润程度。相似效果的还有top_p参数,这也是在模型的输出层起效果。这些参数很重要,而且咱们在开发进程中会常常遇到。 至此,模型的推理进程中心内容就都叙述清楚了,当然还有许多内容,比方分词、词嵌入、方位编码、残差衔接、层归一化、以及FFN之后又鼓起的MoE架构等内容,篇幅所限,此处不再打开。
写在终究。
提示工程。
Prompt Engineering(提示工程),则是指针对特定使命规划适宜的使命提示(Prompt)的进程。 在大模型的开发和功用优化的进程中,OpenAI主张将提示工程作为大模型运用的起点,从上下文优化、大模型优化两个视点考虑,这两种视点对应了两个方向:提示工程、微调。
提示工程:经过精心规划的输入提示(Prompt)来引导预练习模型生成期望的输出,而无需对模型的权重进行调整。
微调:微调是在预练习模型的根底上,运用特定使命的数据进一步练习模型,以调整模型权重,使其更好地习惯特定使命。
提示工程偏重于优化输入数据的办法和内容,以激起模型的潜在才能,来进步输出的精确性和相关性。它能够快速习惯新使命。而微调能够使模型更深化地了解特定范畴的常识和言语办法,然后明显进步模型在特定使命上的功用,但其在灵敏性上相对较弱,练习依托于核算资源和高质量的标示数据。关于高德的事务团队而言,会相对更偏重灵敏性来习惯快速改动的事务需求,因而依据提示工程进行优化的办法现已成为咱们运用大言语模型处理下流使命的首要途径。 实际上不只是关于事务团队,关于任何团队,在运用大模型时,都应从提示工程开端。OpenAI针对需求供给给大模型额定常识的场景供给了一份合理的优化路线图(如下图):从根底Prompt开端,经过提示工程优化Prompt,接入简略RAG,进行模型微调,接入高档ARG,终究带着RAG样本进行模型微调。
OpenAI: How to。 maxim。ize LLM performance(https://humanloop.com/blog/optimizing-llms) 经过提示工程咱们能够应对大部分的事务场景,假如功用不行,榜首件事是要考虑提示工程,再考虑其他手法。RAG的功用是上下文增强,其输出成果是提示词的一部分,因而RAG也能够视为提示工程的一部分。而关于有垂类场景模型需求的场景,也需求经过提示工程来获取高质量的用例数据,来进行模型微调,再依据微调后模型产出的更高质量用例,正向迭代来进一步优化功用。 关于开发人员而言,假如期望进步驯化大模型的才能,我主张从提示工程开端。这包含了提示词结构化(LangGPT等)、提示规划办法(如OpenAI提出的六大准则)、提示结构(ReACT等)、提示技能(COT、Few-Shot、RAG等)、Agent的概念和架构。。
内容来源:https://hoangkimngan.com/app-1/kết quả xổ số kon tum,https://chatbotjud-hml.saude.mg.gov.br/app-1/horario-pagantes-tigre
本文地址:http://w.21nx.com/new/48168782-53b21199735.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。