【原创】实现GPT中Transformer模型之框架概念

免费获取chatGPT 3.5 账户,或购买GPT 4.0plus 会员账户,扫描文章内微信公众号二维码,或加微信:yuke36

时间:2023年7月

GPT是哪些意思

GPT的全称是Pre-(生成型预训练变换模型),它是基于大量语料数据上训练,以生成类似于人类自然语言的文本。其名称中的“预训练”指的是在小型文本语料库上进行的初始训练过程,其中模型学习预测文章中下一个词组,它可以完成各类自然语言处理任务,诸如文本生成、代码生成、视频生成、文本问答、图像生成、论文写作、影视创作、科学实验设计等等。

下边我们用你们容易理解的方法简单介绍一下GPT模型的整个工作原理。

前面讲了我们GPT的词组是:Pre-,简单这三个成语拆解出来就是:

-生成下一个词

Pre–文本预训练(互联网各类文字材料)

-基于构架(无监督学习)

GPT用中概括描述就是:通过构架进行文本预训练后才能根据给定的文本,生成合理文本延续的模型。(文本接龙)

图片[1]-【原创】实现GPT中Transformer模型之框架概念-云上资源整合网

其中无监督训练中,核心依赖的就是模型,这是一个优秀的模型,假若说到框架比较优秀,就须要大约了解一下神经网路在这个过得的迭代发展过程,了解为何它是一个在AI问答()中优秀的模型框架。

对于能否取得这么好的一个互动交流的疗效,最核心的是GPT机制,GPT机制上面不仅预训练(Pre-)和人工反馈加强学习(RLHF-fromHuman),最基础的就是这个T()机制了。

整个可以简单理解为一个“无监督学习”的“文字接龙”游戏,之后完成整个核心基础大模型的训练,之后通过RLHF加强训练让这个LLM(大模型)看上去越来越智能。

介绍

是在2017年提出的一种革命性的神经网路结构,最早考虑用于机器翻译任务。它通过注意力机制来建模序列中的常年依赖关系,实现并行估算,解决了循环神经网路中的梯度消失问题,成为序列建模领域的一大突破。

通过注意力机制建模输入序列的依赖关系,实现高效的并行估算。与循环神经网路(RNN/LSTM)相比,它的训练过程愈发稳定,参数目也更少。这使在各类序列建模任务上表现优异,它推动了机器学习的好多前沿方向,在NLP和其他序列建模任务中都有广泛的应用,成为目前最为流行的神经网路结构之一。

由于的出现,也诞生了包括GPT、LLaMa、Bert等优秀的预训练

模型的主要优势包括:

1.并行估算。可以并行估算所有时间步,估算速率很快,这是其相比RNN和LSTM的最大优势。

2.学习常年依赖。通过机制可以直接建模任意两个时间步之间的依赖关系,可以挺好地学习常年依赖,不容易出现梯度消失问题。

3.训练更稳定。的非循环结构使其训练过程愈发稳定,不容易出现梯度爆燃问题,参数选择也愈发灵活。

4.参数更少。相比RNN和LSTM,须要的参数更少,尤其在更长序列的任务中参数目的差别愈加显著。

5.无需标定的输入输出。无需在序列两端添加特殊的开始和结束标记。

通过注意力机制和非循环网路结构,实现了并行估算和常年依赖学习,训练过程愈发稳定,参数目也更少,这使其在好多序列建模任务中凸显出强悍的性能。

核心“自注意力机制”:

自注意力机制解决的主要问题是序列建模中的常年依赖学习问题,它是中间的核心之一。

在序列建模任务中,模型须要建模序列中任意两个元素之间的依赖关系,这须要获得整个序列的上下文信息。并且,当序列越长,两个元素之间的距离越远时,这些依赖关系会越难建模,这就是常年依赖学习问题。

循环神经网路中的梯度会随着序列宽度的降低而消失或爆燃,未能完善较远元素之间的联系,未能有效学习常年依赖。

自注意力机制解决了这个问题。它容许模型直接完善序列中任意两个元素之间的联系,获得整个序列的上下文信息。通过加权求和的方法,它可以关注相关元素,忽视无关信息,灵活地建模输入序列中的依赖关系。

具体来说,自注意力机制为输入序列的每位元素赋于一个查询向量、键向量和值向量。之后它估算每位元素的键向量与其他所有元素的查询向量的内积,得到注意力权重。最后用注意力权重加权求和所有值向量,得到该元素的上下文向量。

这个过程为每位元素提供了整个序列的上下文信息,构建起输入序列中任意两个位置之间的联系,有效地建模常年依赖关系。

所以,自注意力机制的主要优点是:

1.可以并行估算序列中的依赖关系,获得整个序列的上下文信息。

2.灵活地建模序列中的常年依赖,不易出现梯度消失问题。

3.实现稳定高效的序列学习。

自注意力机制通过并行结构和灵活的依赖建模,挺好地解决了常年依赖学习这个序列学习中仍然存在的困局,致使等注意力模型在各个序列建模任务上对比传统RNN/LSTM对比取得了挺好的疗效。

(具体对内部构成更详尽内容可以参考之前文章《理解之工作原理》)

分层逻辑

须要理解整个代码,先大约了解一下的核心构架图(以论文图片范本进行英文翻译)

图片[2]-【原创】实现GPT中Transformer模型之框架概念-云上资源整合网

在这个构架体系下边,主要分为三层:

通过学习输入序列的表征,根据今生成输出,实现了端到端的序列学习。

模型的核心主要包含Input、、等三部份,之后构成包含以下几部份:

层:

Block-(编码器):

可以学习输入序列的表征,这种表征包含输入序列的特点和依赖关系信息。用于处理输入序列,编码器可以学习输入序列的表示,包含多个相同的层,每位层包含:

Block-(解码器):

可以依据的表征和上下文生成输出序列,包含多个解码层,每位解码层包含多头注意力层、多头注意力层和卷积神经网路。解码器可以依据输入和上下文生成输出序列,虽然跟很像,不仅mask处理部份,每层包含:

我们下边根据这三大层来进行使用的大约描述原理和具体代码实现。

注意,一下代码只是为了便捷理解整个技术机制,不意味着跟OpenAI等GPT实现代码一致,更多只是给一个学习参考。

一些基本概念介绍

为了便捷理解后续的技术理解,有一些基本的概念等先简单同步一下,便捷对更多复杂内容的理解。

神经网路及层数(Layer)

深度学习主要是采用神经网路的形式来进行机器学习实现。

神经网路是一种模拟人脑神经元之间互相联接的物理模型。它由多层神经元组成,每一层都包含多个神经元,每位神经元都与上一层和下一层的神经元相连。

神经网路的层数指的是神经元根据一定的次序排列后的层数,一般包括输入层、隐藏层和输出层。其中输入层接收外部输入信息,输出层输出最终的结果,隐藏层则在输入层和输出层之间进行信息处理和传递。

不同的神经网路模型具有不同的层数和结构,比如深度神经网路(Deep,DNN)一般包含多个隐藏层,而频域神经网路(,CNN)则包含频域层和池化层等特殊的层级结构。

再举例说,例如从LSTM发展过来的框架,其中LSTM(LongShort-Term)是一种常用于序列建模的神经网路模型,一般会包含多层LSTM单元。多层LSTM模型的每一层都包含多个LSTM单元,每位LSTM单元都包含输入门、遗忘门和输出门等组件,可以对序列中的常年依赖关系进行建模。多层LSTM模型可以通过降低网路深度来提升模型的表示能力和泛化能力,但也会降低模型的训练难度和估算复杂度。在实际应用中,多层LSTM模型的层数一般在2~4层之间,可以按照具体任务和数据集的特征进行调整。

向量()

深度学习中,向量又称为或,通常是采用int或float表示的一组数字。深度学习中的是指由技术从离散变量(如图片、视频、音频、自然语言等各类非结构化数据、结构化文字)转变而至的连续向量。通常会采用的格式来进行储存,在物理表示上,是一个由浮点数或则二值型数据组成的n维(例如表示字符的768维)。

神经网路中常提及的向量主要包括:

1.权重向量():联接两层神经元的权重参数,它决定上一层的输出怎么映射到下一层的输入。

2.偏置向量(Bias):神经元节点的偏置参数,它决定神经元的基准活跃值。

3.输入向量(Input):输入到神经网路的数据,它表示一个样本中的特点。

4.输出向量():神经网路的预测或推理结果,用于分类或回归任务。

5.隐状态向量(State):神经网路蕴涵层的输出,在循环神经网路中会不断更新。

所有的这种向量都表示为一个数字列表或链表,如[1,2,3]。它们在神经网路的推理和学习过程中流通,并依据模型的参数进行变换和映射。

通过现代的向量转化技术,例如各类人工智能(AI)和机器学习(ML)模型,可以将非结构化数据具象为n维特点向量空间的向量。这样就可以采用近来邻算法(ANN)估算非结构化数据之间的相像度。

向量相像度检索,是指将目标对象与数据库中数据进行比对,并召回最相像的结果。同理,向量相像度检索返回的是最相像的向量数据。近似近来邻搜索(ANN)算法才能估算向量之间的距离,进而提高向量相像度检索的速率。若果两条向量非常相像,这就意味着她们所代表的源数据也非常相像。

和Word(嵌入/词嵌入)

是一种将高维稀疏数据映射到低维密集数据的技术。它的目的是形成愈发平滑和相关的数据表示,以便模型的处理。

可以作用于各类数据,如:

-词向量(Word):针对文本数据,将词组映射到向量。

-项向量(Item):针对推荐系统中的商品等进行映射。

图片[3]-【原创】实现GPT中Transformer模型之框架概念-云上资源整合网

-用户向量(User):针对用户进行特点映射。

-知识图谱向量(KG):将知识图谱中的实体和关系映射到向量。

是一种广义的高维到低维映射技术,可以形成愈发平滑和相关的数据表示,因而提升模型的训练疗效。

Word是技术的一种具体应用,它是指词向量的学习方法。通过Word,我们可以将词汇表中的每位词组映射到一个低维空间中的语义向量中。

这种语义向量可以捕捉词组之间的语义关系,实现例如“语义接近的词组也接近”的特点。这促使模型愈发轻易地处理和理解文本数据。所以,简而言之:

:广义的高维到低维映射技术,可以作用于各类数据。

Word:技术的一种应用,指的是学习词向量的方法,可以为每位词组学习一个语义向量。

Word是在自然语言处理的一种应用,而是愈发广义和基础的概念。Word须要依赖于大量文本进行训练,而可以作用于任意类型的数据。

为了更好的理解Word,举个反例,我们有两个词组:“猫”和“狗”。假如我们要抒发它们之间的相像性,可以将它们映射到二维空间中:

猫->(0.8,0.2)

狗->(0.7,0.4)

可以看见,这两个词组的向量很接近,这表示它们在语义上相像。

而对于“猫”和“车”:

猫->(0.8,0.2)

车->(0.2,0.8)

两个向量遥遥相反,表示这两个词组在语义上不太相像。

所以,Word容许我们以低维的向量表示高维的one-hot向量。这可以将向量空间的维度从几万维降到几百维,但是保留了词组之间的语义关系。

Word的作用主要有:

1.聚类:one-hot编码数据稀疏,未能有效训练模型。Word可以将高维的one-hot向量压缩为低维的密集向量。

2.语义抒发:语义相仿的词组对应的嵌入向量也愈加接近,这反映了词组之间的语义关系。

3.平滑数据:one-hot编码的词组之间完全无关,Word可以将数据显得愈发平滑,词组之间存在一定的关联。

4.提升模型疗效:Word可以作为神经网路的输入,这一般可以带来更好的训练疗效。

所以,Word是一种用于的方法,它可以从大量文本小学习到词组的语义抒发,并以低维嵌入向量的方式表示。这促使神经网路更适于处理文本数据,并可以形成更好的疗效。

(函数/原始数据归一化)

在深度学习中,是一种激活函数,用于对网路的输出结果进行归一化处理。的功能是将网路的输出转换为机率分布。它可以将一个列表的数值压缩到0到1之间,并使它们的总和为1。的公式为:(x)=exp(x)/Σexp(x)

这儿x代表网路的原始输出,exp(x)对每位值进行指数运算,然后减去所有值的和,得到归一化的几率。

举个事例,倘若网路有3个输出,原始值为[1,2,3],则:

exp(1)=2.718

exp(2)=7.389

exp(3)=20.085

sum=2.718+7.389+20.085=30.192

=[2.718/30.192,7.389/30.192,20.085/30.192]

=[0.09,0.25,0.66]

我们可以看见,将原始输出压缩到0-1范围内,但是促使它们的总和为1,代表机率。主要用于神经网路的分类输出。由于它可以将原始预测值转换为各个分类的机率,这愈发符合分类的要求。而且,具有归一化的疗效,可以抑制网路输出中的极值,致使最终的机率值愈发均衡,这有助于模型的稳定性。所以,简单地说,是一种激活函数,它通过对神经网路的输出进行指数运算和归一化,将其转换为各分类的机率分布。这在分类问题中起到很重要的作用。

Loss(损失函数)

在深度学习中,Loss(损失)一般指的是模型预测值与实际值之间的差别,用于测度模型的性能。Loss函数则是拿来估算Loss的函数,一般称作为目标函数、代价函数或偏差函数。损失函数是用于评估神经网路预测结果与真实标签的差别程度的函数。它评判着模型的拟合能力和精度。

神经网路的训练目标就是最小化损失函数的值。由于损失函数值越小,表示模型预测与真实结果的差别越小,模型质量越高。

在训练深度学习模型时,我们通过将输入数据输入到模型中,得到模型的预测值,之后将预测值与实际值进行比较,估算出Loss。之后,我们使用反向传播算法来调整模型的参数,致使Loss最小化,进而提升模型的性能。

常用的Loss函数包括均方偏差(MeanError,MSE)、交叉熵(Cross)、对数损失(LogLoss)等。不同的任务和模型一般须要选择不同的Loss函数,以最大程度地反映模型的性能。

梯度增长和梯度爆燃(/)

梯度是神经网路中一个很重要的概念。它指的是网路中某个参数对损失函数的影响程度。

浅显地说,梯度表示网路中的参数微小变化,会造成损失函数值的变化量。它评判参数变化对损失函数的影响力。

举个简单的反例。假定我们有一个神经网路,其中一个参数w=0.5。此时,损失函数L的值是0.3。假如我们将w降低0.1,也就是弄成w=0.6,此时损失函数L变为0.32。这么这个参数w对损失函数的梯度就是(0.32-0.3)/0.1=0.2。它表示,当w降低0.1时,损失函数L降低了0.2。这个0.2就是w对损失函数的梯度。

梯度增长的意思是在神经网路训练的目的是找到一组参数,使损失函数最小。因此,我们会不断调整参数,并估算损失函数的梯度(变化率),来判定应当怎样调整参数。

梯度增长法就是根据梯度的方向,逐步调整参数,使损失函数增长,系统最小。这如同一颗小球渐渐滚落到山谷,找到最高点。

然而,倘若学习率设置过大,这么每次参数调整的幅度都会很大。这会造成损失函数的值出现极大的波动,甚至出现远离最优解的情况。这如同小球按一定方向突然滚下山坡,很难找到山谷。当损失函数值因参数调整而出现极大变化,甚至开始不收敛时,就称为梯度爆燃。这会使训练失败,未能找到最优解。

为了防止梯度爆燃的问题,一般可以采用一些方法,如减少学习率、权重衰减、梯度剪裁()等。梯度剪裁是一种常用的方法,它通过限制梯度的范数,致使梯度的大小不会超过一个预定的阀值,因而防止梯度爆燃的问题。

归一化(Norm/)

归一化是深度学习中一个十分重要的概念。它指的是对数据或参数进行处理,使其分布愈发均匀地落在一个范围内。

归一化的目标主要有两个:

1.防止数据过大或过小,影响模型训练。假如数据范围太大,模型的参数更新会很小,收敛慢。假如数据范围太小,参数更新幅度太大,造成训练不稳定。

2.防止个别特点因为数据范围太大,过分主导模型训练。倘若不同特点的数据范围差别过大,这么范围更大的特点将愈加影响训练结果。这促使模型无法捕捉到其他特点的信息。

所以,归一化的目的是数据,使其分布在一个合适范围内,一般是0-1或-1-1之间。这可以解决上述两个问题,形成愈发理想的训练疗效。

具体而言,归一化可以作用在:

1.输入数据:对输入特点进行归一化,使其均值为0,标准差为1。这样可以解决特点范围差别过大的问题。

2.权重参数:对模型权重参数进行归一化,使其绝对值不会过大。这可以形成愈发平稳的训练,防止梯度爆燃。

3.梯度:在反向传播过程中,对梯度进行归一化,防止其变化过大。这也有助于稳定训练过程。

4.Batch:对批量数据在步入下一层神经网之前进行归一化。这可以加速训练,使模型愈发粗壮。

归一化方法在深度学习中广泛使用,它促使模型愈发稳定高效。简单来说,归一化的目的就是控制数据在合适的范围内,防止极值出现,形成愈发理想的训练疗效。

和归一化都是深度学习中常用的方法,和归一化相同的地方:

1.都可以将数据映射到0-1范围内。通过指数运算和乘法实现,归一化通过乘以均值和乘以标准差实现。

2.都具有归一化的疗效。可以抑制数据中的极值,使结果愈发均衡。

和归一化不同同的地方:

1.目标不同,用于形成机率分布,常用于分类问题的输出层。归一化愈发广义,可以作用于输入、参数、梯度等,目的是形成愈发稳定的训练。

2.依赖于数据本身,并不改变数据的分布。它只在输出时按照数据估算机率。而归一化则在数据上进行运算,直接改变了数据的均值和残差。

3.只能用于分类任务,不能形成连续的值。归一化的结果可以是一个连续范围内的值。

4.通过rivalsum促使输出总和为1。归一化没有这个约束,输出的总和不一定为1。

举例描述两者的不同:

输入:[1,2,3]

输出:[0.09,0.24,0.67]

归一化输入:[1,2,3]

输出:[-1,0,1](假定归一化到-1到1区间)

我们可以看见,形成的输出是机率,总和为1。而归一化的输出是一个连续范围的值,总和不为1。

代替你的不是AI,而是比你更了解AI和更会使用AI的人!

##End##

免费获取chatGPT 3.5 账户,或购买GPT 4.0plus 会员账户,扫描文章内微信公众号二维码,或加微信:yuke36

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容