赞
踩
我们在生活中外观所接受的信息是非常庞大的,但我们的大脑只会专注于一件事。比如,你看到一个场景,里面有天空和云,还有飞机,你的注意力就会直接关注到飞机,因为天空和云在你大脑中会被提示为这是非重要的物品,而飞机则作为重点被当作关注对象。
而这种注意力也分为自主的和非自主的。
自主的即就是你想做一件事,你的注意力就在其中。(即由内心而发)
非自主即就是一种天性,比如你在听人说话时听到谁的八卦时就会很上心,注意力集中在这件事上。(即由感官得到的环境信息)
那么怎么才能使用两种方式设计注意力机制的框架呢。
首先还是从只有非自主性提示开始,我们最后所得到的选择偏向于感官的输入,那么就简单的使用参数化的全连接层,甚至是非参数化的最大汇聚(pooling池化)层或平均汇聚层。
即注意力机制主要是将自主性提示查询,和非自主性提示键结合起来输出一个值,这个值就是我们对一件事的选择。
查询和键是输入,而值是我们最终的输出,中间有一个注意力汇聚(池化)的过程。
平均汇聚层可以被视为输入的加权平均值, 其中各输入的权重是一样的。 实际上,注意力汇聚得到的是加权平均的总和值, 其中权重是在给定的查询和不同的键之间计算得出的。
注意力机制与全连接层或者汇聚层的区别源于增加的自主提示。
由于包含了自主性提示,注意力机制与全连接的层或汇聚层不同。
注意力机制通过注意力汇聚使选择偏向于值(感官输入),其中包含查询(自主性提示)和键(非自主性提示)。键和值是成对的。
查询(自主提示)和键(非自主提示)之间的交互形成了注意力汇聚; 注意力汇聚有选择地聚合了值(感官输入)以生成最终的输出。
这种是不带参数的。
带参数的。
从注意力的角度来看,分配给每个值的注意力权重取决于将值所对应的键和查询作为输入的函数。
上面中的alpha函数我们使用的是高斯核表示,最后用softmax表示。
注意力汇聚可以分为非参数型和带参数型。
注意力评分函数:高斯核指数部分可以视为注意力评分函数(attention scoring function), 简称评分函数(scoring function), 然后把这个函数的输出结果输入到softmax函数中进行运算。 通过上述步骤,将得到与键对应的值的概率分布(即注意力权重)。 最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。
softmax操作用于输出一个概率分布作为注意力权重。 在某些情况下,并非所有的值都应该被纳入到注意力汇聚中。
掩码softmax操作,对于被屏蔽的元素用一个非常大的负值替换,使其softmax为0。
加性注意力:
缩放点积注意力:
将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作。
当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数。当它们的长度相同时,使用缩放的“点-积”注意力评分函数的计算效率更高。
自注意力和位置编码:
由于查询、键和值来自同一组输入,因此被称为 自注意力(self-attention), 也被称为内部注意力(intra-attention)。
一般使用正弦函数和余弦函数对固定位置编码。固定位置编码,既可以计算相对位置,也可以计算绝对位置。
在自注意力中,查询、键和值都来自同一组输入。
卷积神经网络和自注意力都拥有并行计算的优势,而且自注意力的最大路径长度最短。但是因为其计算复杂度是关于序列长度的二次方,所以在很长的序列中计算会非常慢。
为了使用序列的顺序信息,可以通过在输入表示中添加位置编码,来注入绝对的或相对的位置信息。
transformer:
Transformer模型完全基于注意力机制,没有任何卷积层或循环神经网络层 (Vaswani et al., 2017)。尽管Transformer最初是应用于在文本数据上的序列到序列学习,但现在已经推广到各种现代的深度学习中,例如语言、视觉、语音和强化学习领域。
Transformer是由编码器和解码器组成的。与 图10.4.1中基于Bahdanau注意力实现的序列到序列的学习相比,Transformer的编码器和解码器是基于自注意力的模块叠加而成的,源(输入)序列和目标(输出)序列的嵌入(embedding)表示将加上位置编码(positional encoding),再分别输入到编码器和解码器中。
从宏观角度来看,Transformer的编码器是由多个相同的层叠加而成的,每个层都有两个子层(子层表示为sublayer)。第一个子层是多头自注意力(multi-head self-attention)汇聚;第二个子层是基于位置的前馈网络(positionwise feed-forward network)。具体来说,在计算编码器的自注意力时,查询、键和值都来自前一个编码器层的输出。受 7.6节中残差网络的启发,每个子层都采用了残差连接(residual connection)。在残差连接的加法计算之后,紧接着应用层规范化(layer normalization),因此,输入序列对应的每个位置,Transformer编码器都将d维表示向量。
Transformer解码器也是由多个相同的层叠加而成的,并且层中使用了残差连接和层规范化。除了编码器中描述的两个子层之外,解码器还在这两个子层之间插入了第三个子层,称为编码器-解码器注意力(encoder-decoder attention)层。在编码器-解码器注意力中,查询来自前一个解码器层的输出,而键和值来自整个编码器的输出。在解码器自注意力中,查询、键和值都来自上一个解码器层的输出。但是,解码器中的每个位置只能考虑该位置之前的所有位置。这种掩蔽(masked)注意力保留了自回归(auto-regressive)属性,确保预测仅依赖于已生成的输出词元。
其中基于位置的前馈网络:
基于位置的前馈网络对序列中的所有位置的表示进行变换时使用的是同一个多层感知机(MLP),这就是称前馈网络是基于位置的(positionwise)的原因。 linear relu linear
残差和层连接规范化:
层规范化和批量规范化的目标相同,但层规范化是基于特征维度进行规范化。尽管批量规范化在计算机视觉中被广泛应用,但在自然语言处理任务中(输入通常是变长序列)批量规范化通常不如层规范化的效果好。LayerNorm,还有BatchNorm
残差连接要求两个输入的形状相同,以便加法操作后输出张量的形状相同。
有了以上组成,就可以搭建transformer网络模型。 编码器(多头自注意力,残差连接加规范化)
Transformer编码器中的任何层都不会改变其输入的形状。
Transformer解码器也是由多个相同的层组成。在DecoderBlock
类中实现的每个层包含了三个子层:解码器自注意力、“编码器-解码器”注意力和基于位置的前馈网络。这些子层也都被残差连接和紧随的层规范化围绕。
以上参考李沐的动手学深读学习。
tranfomer的更深一层理解:
transfomer的工作流程:
例:任务翻译,中文到英文
输入:我是一只猫
第一步:提取单词的特征,并单词位置进行编码,二者相加,得到transformer的输入(向量矩阵)。
第二步:讲上述向量矩阵传入encoder中,经过几个编码块后得到所有单词的编码信息矩阵C,每个编码块的输出矩阵维度与输入完全一致。
第三步:讲编码信息矩阵C传递到到解码器,编码器依次翻译每个单词,这里会采用mask_softmax输出权重矩阵,最后输出翻译结果。
单词的特征提取,采用word2vec,glove等进行编码。
位置的编码使用正弦sin与余弦cos编码。
自注意力机制:
编码时:多头注意力,解码时使用带掩码的多头注意力,与多头注意力机制。
上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
其中自注意力结构:
上图是 Self-Attention 的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。
q,k,v是怎么得到的呢?
使用权重矩阵wq,wk,wv线性变换得到。
输入4X6,wq/wk/wv均为6X3,得到q,k,v为4X3大小,其中输入和输出的每行表示1个单词。
而self-Attention的输出,一般使用上面提到的缩放点积:
使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1,得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z。
多头自注意力机制:
Multi-Head Attention 是由多个 Self-Attention 组合形成的。
从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层,首先将输入X分别传递到 h 个不同的 Self-Attention 中,计算得到 h 个输出矩阵Z。下图是 h=8 时候的情况,此时会得到 8 个输出矩阵Z。
得到 8 个输出矩阵 z1 到 z8 之后,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出Z。
而编码结构由Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm 组成的。
Add指的是残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分
Norm指的是层规范化(常用于RNN结构)Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。
Feed forward,两层全连接层,第一层激活函数为relu,第二层不使用激活函数。
这些组成transformer的encoder。
而decoder结构:与encoder类似
第一层Multi-Head Attention,masked操作可以防止前一个单词知道后面单词翻译的信息,因为翻译是顺序翻译的,翻译完前面的,才能翻译后面的,这里的mask是在softmax之前使用的。
第二层Multi-Head Attention,主要的区别在于其中 Self-Attention 的 K, V矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的编码信息矩阵 C 计算的。
根据 Encoder 的输出 C计算得到 K, V,根据上一个 Decoder block 的输出 Z 计算 Q (如果是第一个 Decoder block 则使用输入矩阵 X 进行计算),后续的计算方法与之前描述的一致。
这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。
transformer总结:
如何训练一个transfomer网络:
比如机器翻译:
训练 Transformer 网络时,输入和输出的格式取决于特定的任务(如机器翻译、文本生成、情感分析等)。下面是一些常见的场景及其对应的输入输出格式:
视觉类的transfomer,VITVision Transformer, ViT
下面是视觉类 Transformer 的基本架构组成:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。