一文彻底讲透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,Sora、可灵等,让视频创意的落地本钱从数十万元低落到了几十元,VLM的加持下的端到端主动驾驶也在大放异彩。
总而言之,我们仍旧处在第四次科技反动的出发点,业内猜测在2025年我们约莫拜候证AGI(通用人工智能)的落地,并且还提出了ASI(超等人工智能)的看法,以为人类约莫创造出在各个方面都跨越人类智能的AI,AI很有约莫带领人类进入新的年代。?
目光放回到大模子本身,关于开发职员而言,大模子的紧张性,不亚于JAVA编程言语。大模子的推理原理,就像JVM假造机原理一样,假如不了解,那么在使用大模子时不免依照工程化的头脑去思索,如此常常会碰到困难,用不明白大模子。好比为什么模子不依照提示词的要求输入,为什么各位都在用头脑链。
而本篇是作者从开发职员的视角,围绕着大模子的正向推理历程,对大模子的原理的体系性总结,渴望对像我一样的初学者有所协助。文中会引入局部论文原文、盘算公式和盘算历程,同时会添加多量例子息争释分析,以免内容难懂难懂。篇幅较长不免有所马虎,接待列位指正。
大言语模子架构
Transformer
What is Attention
镇楼图,来自万物的劈头《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 layers to the recurrent and convolutional layers commonly used for mapping 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 typical sequence transduction 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 factor 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 perform 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 across 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-Head 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 similar 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的一个比例分布,这个分布就叫“注意力分布”。底下表格中“探险家”所对应的那一列,就是“探险家”的注意力分布,代表着从“探险家”的视角动身,每一个词元关于本身内容了解的紧张水平。
|
Key\Query |
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 subspaces 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 called 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 publicly available language models such as T5 (Raffel et al., 2020) and LLaMA (Touvron 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的视频《直观表明大言语模子怎样储存内幕》?
在颠末激活函数举行非线性变动处理后的向量,会再次经过矩阵
举行第二次线性变动,将高维空间中的向量,重新映射回原始维度,并追加第二个偏置
,来构成模子的输入。这种降维利用,一方面使得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 maximize LLM performance(https://humanloop.com/blog/optimizing-llms)
经过提示工程我们可以应对大局部的业务场景,假如功能不够,第一件事是要思索提示工程,再思索其他伎俩。RAG的功效是上下文加强,其输入后果是提示词的一局部,因此RAG也可以视为提示工程的一局部。而关于有垂类场景模子需求的场景,也必要经过提示工程来获取高质量的用例数据,来举行模子微调,再基于微调后模子产出的更高质量用例,正向迭代来进一步优化功能。
关于开发职员而言,假如渴望提升驯化大模子的才能,我发起从提示工程开头。这包含了提示词布局化(LangGPT等)、提示计划办法(如OpenAI提出的六大准则)、提示框架(ReACT等)、提示武艺(COT、Few-Shot、RAG等)、Agent的看法和架构。?
保举阅读
起首保举各位观看网上的教程,包含吴恩达的深度学习、台湾传授李宏毅的课程,以及3Blue1Brown的视频(可视化做得十分棒),列位可以在B站找到相应的无偿学习资源。
然后保举一本书,《大言语模子综述》,该书来自中国人民大学,该书是文章《A Survey of Large Language Models》整理成册出书的中文版本,体系性地梳理了大型言语模子的研讨历程与中心武艺,并讨论了多量的干系事情,关于体系性地学习大言语模子有很强的引导意义。
直接阅读各种论文也很有协助,这包含经典论文以及各种模子的武艺报告等。
最初,AI是学习的好副手,在学习时期请经常的、经常的、经常的针对性对它发问,乃至直接将截图大概论文抛已往让它帮你分析,关于学习十分有协助。同时这些Agent都市举行联网搜刮,并且给出搜刮历程中找到的原文链接,可以便利我们快速找到学习内容。
















