transformer——学习笔记

目录

标记器和独热编码

​编辑

矩阵相乘可以理解成对原向量进行空间变换的操作

词嵌入

word2vec(将语言中的token投射到潜空间的方法)

注意力机制

理解Q和V

交叉注意力机制

​编辑​编辑

位置编码

​编辑

多头注意力机制

掩码(masks)、残差、layernorm

掩码

残差

layernorm


标记器和独热编码

        为什么要编解码? 以翻译举例:计算机无法理解人类语言,所以要将纯文本转化成数字关系,再由数字关系转换成另一种对应文本。

于是,标记器和独热编码就出现了,其作为一种工具,对基础的语义单元(token)进行数字化。

标记器和独热编码代表了语义单元数字化的两个极端,前者把token均投射再了一维数轴上,token之间的关系仅由数值决定,而后者为每个token均分配一个维度,有多少token就有多少维,但这样每个token之间都是正交的,无法表示token之间复杂的语义联系。

明显,上述两种方法均无法实现对复杂语义的准确表达,所以就需要对维度和数值进行平衡。实现方法是对独热编码进行降维。得到一个语义空间——“潜空间”

矩阵相乘可以理解成对原向量进行空间变换的操作

如上图所示,原矩阵与中间矩阵相乘后,维度(列数)由M变成了N,而得到的矩阵的向量数量(矩阵的行数)不变,也就是经过矩阵乘法后改变了向量的空间位置(维度变换可以看作向量与坐标轴之间相对位置发生了改变),而且向量的数量不变。

因此,我们就可以使用矩阵相乘进行,降维操作。

另外,在神经网络中,神经元之间的计算也可以看成矩阵运算也就是对数据进行升维和降维操作,具体升维还是降维取决于前后层相对神经元个数。

词嵌入

了解升维降维操作后,就可以理解编码解码的操作了。

编码:将token编码成独热编码,再对其进行降维(embeding),也就是把文本等数据投射到潜空间中。

解码:将潜空间里的向量还原成文本等数据形式。

潜空间:经过上述编解码的操作,得到的是一个表示语义的向量空间也就是潜空间。而潜空间里的每个向量的每个维度可以看作这个token对应的不同语义。而这个token的具体语义取决于这个向量每个维度对应的具体的值。

word2vec(将语言中的token投射到潜空间的方法)

目的:得到一个可以将具体语言token投射到潜空间的嵌入矩阵。

CBOW:

CBOW方法:即用上下文去推断某个词向量。如上图,具体计算方式就是将上下四个向量相加,再令其通过嵌入矩阵,将得到的结果与中间词对应的向量进行比较,用两者的偏差进行反向传播。最终得到一个嵌入矩阵,它可以让上下文向量的和经过嵌入矩阵后可以与中间的词向量的结果相等。

这个方法表现的思想,表现了语言中一个词的具体语义能且只能由其上下文决定。

skip_gram:

skip_gram的方法与CBOW原理是相通的,只是将计算反了过来,将词向量通过嵌入矩阵,再将其与上下文比较。

注意力机制

如图,在输入时原始数据要经过嵌入矩阵(图中粉色方框部分)。但嵌入矩阵得到的只是词在潜空间的向量投影,潜空间只是相当于一个词典。而要理解词和词之间组合后的语义,是需要注意力机制来实现的。也就是图中橙色方框部分,transformer的核心。          

上图表示的既是注意力的计算方式:

输入一组词向量,令其分别与对应W矩阵相乘,得到Q,K,V三个矩阵,再将Q与K的转置矩阵相乘,得到的结果除以,然后经过softmax计算后与矩阵V相乘。

其中,的作用是调整矩阵的概率分布,假设V的概率分布方差为1,那么得到的概率分布方差为,所以这里对里的每一项除以一个,令和V矩阵的概率分布相等。

那么如何理解上述一系列计算的意义呢?

如图的计算,实际上是将输入的一组词向量矩阵中的每一个词向量单独拿出来,再令其与其他词向量(包括自己)相乘,得到矩阵A。举个例子:矩阵A中的第一行,表示的便是Q矩阵中的第一行(即第一个词向量)与其他词向量的关系。而列数表示的该词向量与那个词向量的关系,如A矩阵第一行第一列代表的是第一个词向量与自己的关系。

然后softmax计算,将其转化成概率关系。然后乘以矩阵V。如果将关系看作权重的话,V矩阵每个词向量的每个维度都受到其那一列中的每个数据的影响,而影响大小,就由得到的权重决定。

理解Q和V

在数学上,Q和V矩阵实际上是可以统一的,V矩阵可已经过Q矩阵转置等数学计算得到,那么为什么需要将其分成两个矩阵分别计算呢?

一,引入非线性。

如上图,两个X矩阵的不同形式的相乘可以看作引入了二次性。添加了非线性可以使得模型表达能力更强。

二,表达语义和设定语义

还有一种理解方式,人类语言是很复杂的,很多时候甚至存在矛盾,而Q和V两个矩阵可以将语言分成两种形式,即表达语义和设定语义。让两种矛盾的语义并行不悖。

交叉注意力机制

如上图,自注意力机制只有一个输入,所有的经验都从原有材料中学习和提取出来。

而交叉注意力机制有两个输入,在学习时相当于有一个校准和参考材料。但是这样做的缺点是模型只能学到比较浅的知识。

交叉注意力机制因此更适合语言翻译的工作:

需要注意的是语言的翻译不是一个词一个词的映射,大多数情况下两种表达相同意思的语言的词的数量是不同的。

如上图,在语言翻译过程中是一个一个词冒出来的。例如:编码器接收中文后,将其映射到潜空间,再由解码器接收一个开始的特殊符号,然后根据中文的词向量,得到一个概率最大的结果,输出英文词向量,当然要将其转化成文本输出,然后根据已经输出的词向量再次输入解码器,得到新的英文单词,如此循环,直到输出结束的特殊符号。

交叉注意力在翻译中的优势就是多了这样一个参照和对比的过程。

位置编码

如上图,位置编码为上述图中红框内的部分。

要实现位置编码对原来词向量的调整,这里有两种方法,一种是加法,另一种是乘法。这里·使用加法,因为加对原矩阵修改幅度较小。相当于在原矩阵上添加一个偏置系数b。 

transformer中位置编码的函数为

要理解上述位置编码函数,可以借助傅里叶级数。

从上图可以看出,位置编码可以看作傅里叶级数转换成矩阵向量的形式。位置编码投射到一维上,就可以看作一个周期函数,而且其最大值为以,其中每一项都可以被最小项整除。

位置编码组成矩阵后,其中每一列可以看作一个频域,每一行可以看作一个时域。

这样可以分析出位置编码的特性,或者说优点。

在频域上:P的维度之间互相正交;使得在更大范围内有更小的“原子”频率

在时域上:令f(x)周期更大,可以同时输入更多token;相对关系由距离变成了旋转角度。

上述位置编码为绝对位置编码,在transformer中还有相对位置编码。

根据上图,我们从绝对位置编码出发,将绝对位置编码与原矩阵相加,展开之后我们得到了四个部分的内容,观察这四个部分内容,可以发现,第一个部分是关于原词向量的,后面三部分均含有P,也就是决定词向量绝对位置的。

要想得到相对位置,就要将原来的P替换成表示相对位置的(q-k)。

以最后一部分的出发,将其替换成q和q-k之间的函数。也就是,但这样仍然含有绝对位置关系,也就是g_{1}(q),这个函数实际上表达的是注意力得分矩阵中行的绝对位置关系,因为我们要求的是相对位置关系,也就可以将其转变为,这样位置编码就只和同一行的q和k之间的相对位置关系有关了。

经过以上的推导过程,就可以得到相对位置编码的函数展开式:

除此之外还有旋转位置编码,它依靠的是在原注意力矩阵上乘以一个关于q-k的矩阵进行位置的表示。

多头注意力机制

根据上图,多头注意力机制就是对X进行多次注意力机制的操作,然后将多次操作得到的大矩阵拼接起来,在对其乘以一个W矩阵,最终得到一个与X矩阵大小相同的矩阵。

可以看出多头注意力矩阵的方法与CNN是有些相似的。

具体与CNN的关系是什么呢?

如上图,上图展现的是多头注意力机制最简单的一种情况,A_{q,k}方程的计算结果转换成A图,可以看出,随着token的移动,\delta即受影响的位置也在移动。而受哪个位置的数据影响,影响多大,则分别由决定。

将视角看向而为,就可以发现与CNN对比,transformer的滑动过程,周围数据对目标数据的影响机制都是极为相似的。但相较于CNN,transformer的联系范围不局限于周围一圈或几圈的数据(像素点),而是可以移动到无限远的地方,而且单个token(像素点)的受影响范围也随着的增大而变得极大。

掩码(masks)、残差、layernorm

掩码

这里举个例子,在进行翻译工作时,因为token是一个一个地生成地,在生成当前词的时候,不应该被其之后的词影响,而是只受其之前的词的影响。所以就要为后面的词加上一个掩码。

实现方式是下面的矩阵,在灰色部分分别加上一个无穷小,令其在进行softmax计算时为零

残差

这里残差的作用和其它模型的残差做用是差不多的。

layernorm

transformer里面使用的是layernorm,相当于对输入的每一个词组(句子)进行归一操作。

以上所述仅提供思路,没有严谨的数学证明。

本文的内容总结自:【从编解码和词嵌入开始,一步一步理解Transformer,注意力机制(Attention)的本质是卷积神经网络(CNN)-哔哩哔哩】 https://b23.tv/uUyXfKC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值