roseonly企业网站优化,网络销售网站外包,企业外包,河南网站网站建设一、Self-attention
[台大李宏毅]
1.1 向量序列的输入
一个序列作为输入#xff1a; 多个向量输入举例#xff1a; 一个句子#xff1a; 声音信号#xff1a; 图#xff1a; 1.2 输出 二、Sequence labeling
输入与输出一样多#xff1a;Sequence labeling 窗口开的…一、Self-attention
[台大李宏毅]
1.1 向量序列的输入
一个序列作为输入 多个向量输入举例 一个句子 声音信号 图 1.2 输出 二、Sequence labeling
输入与输出一样多Sequence labeling 窗口开的太大对于每个FC network的参数量会变的很多计算量很大那怎么办Self-attention 三、self-attention
self-attention可以得到一整个序列作为输入 输出的每个向量是考虑一整个句子的向量然后输入到FC中 self-attention可以叠加 3.1 self-attention运作机制 找到a1和其他输入的相关性 a1和a4的相关性是由谁确定的呢 左边方法最常用 a1分别与其他向量输入做关联性 a1也会与自己进行关联性计算 得到α后需要提取出基于注意力得分的信息
乘以Wv得到新的向量
新的向量乘以α然后相加 b1 ... b4是同时计算出来的 从矩阵乘法角度分析运作机制 [参考] 输入X和三个矩阵相乘分别得到三个矩阵QKV。Q是我们正要查询的信息K是正在被查询的信息V就是被查询到的内容 为什么求权重矩阵时候要开根号[参考]
在我们的两个向量维度非常大的时候点乘结果的方差也会很大也就是结果中的元素差距很大在点乘的值非常大的时候softmax的梯度会趋近于0也就是梯度消失。
在原文中有提到假设q和k的元素是相互独立维度为dk的随机变量它们的平均值是0方差为1那么g和k的点乘的平均值为0方差为dk如果将点乘的结果进行缩放操作也就是除以dk,就可以有效控制方差从dk回到1也就是有效控制梯度消失的问题 3.2 multi-head self-attention Attention机制又为什么需要多头
原文里提到使用多头注意力的原因是让模型从多个子空间中关注到不同方面的信息。比如我们在学一门外语现在有一个外语例句我们去找不同的老师答疑有的老师告诉了我们每个词的意思另一个老师告诉我们哪个指代的是哪个词还有一个老师给我们讲解了一下这句话的语法。我们把几位老师的回答进行一下总结就可以比较全面地理解这个句子。当然,也不是问的人越多得到的信息就越准确。attention也不一定头越多效果越好。 在进入前馈层之前我们还有个额外的小操作
现在的我们看到的示意图中每个子层后面多了一个AddNorm它又是什么呢? 现在我们来看看decoder它和encoder的结构基本一样但是多了一个注意力层
在deceder的第一个注意力后比之前encoder中的注意力层还多了一个masked前缀那么mask操作是什么呢?我们又为什么要使用mask ? 我们需要用到的有两种mask操作。 我们输入的序列长度是不一定相同的对于长度超过我们期望的长度的序列我们就只保留期望长度内的内容对于长度没有达到期望的长度的序列我们就用0来填充它填充的位置是没有任何意义的。我们不希望attention机制给它分配任何注意力所以我们给填充过的位置加上负无穷 因为在计算注意力的时候我们会用到softmax函数加上过负无穷的位置会被softmax处理变成0这个操作叫做padding mask 在翻译一句话的时候我们希望transformer按顺序来翻译它先翻译完前i个单词再去预测第i1 个单词这样的话我们需要阻止它去注意还不该翻译到的单词也就是每个单词只能注意到自己和自己之前的单词。 我们用这个矩阵表示计算出来的QK^T那我们现在要怎么样去遮住每个词后面的单词呢?
如果我们有一个和它大小相同的矩阵灰色的部分代表被遮住的信息. 和卷积操作很像我们把它和QK^T对应的位置相乘再将遮挡的位置加上负无穷. 和之前的padding mask一样得到的结果经过softmax处理之后被遮住的地方就会变成0. 除了在求权重矩阵之前需要和mask矩阵进行对位相乘这个注意力层和其它的注意力层没有其它区别 它的Q来自上一层的masked attention的输出K和V来自于encoder的输出 不知道大家还记不记得上一期视频的时候我强调过在机器翻译任务中词序是很重要的
我咬狗和狗咬我这两句话由相同的三个字组成但是表达的内容完全不一样没有采用RNN的transformer好像没有捕捉序列信息的功能,它分不清到底是我咬了狗还是狗咬了我。啊这怎么办啊transformer不是这块料 要不这样吧学不会就别学了放弃吧 Transformer学不会的话我们可以在transformer外面把问题解决掉嘛 如果我们将输入的文字编码成词向量的时候结合单词的位置信息它就可以学习词序信息了 Transformer 模型是深度学习领域的一个重要突破它在自然语言处理和其他序列建模任务中取得了巨大的成功。以下是 Transformer 模型的一些主要特点 1. **自注意力机制Self-Attention**Transformer 引入了自注意力机制允许模型在处理序列数据时动态地关注输入序列的不同部分而无需使用传统的递归或卷积结构。自注意力机制允许模型计算每个输入位置对每个输出位置的重要性权重从而捕获长距离依赖关系。 2. **并行计算**由于自注意力机制的并行性Transformer 模型可以有效地进行并行计算加速训练过程。 3. **编码器-解码器结构**Transformer 通常采用编码器-解码器结构其中编码器用于将输入序列编码成固定长度的表示而解码器则用于生成输出序列。这种结构在机器翻译等序列到序列任务中非常有用。 4. **多头注意力Multi-Head Attention**Transformer 进一步扩展了自注意力机制引入了多个注意力头允许模型以多个不同的方式关注输入序列。这有助于模型学习更丰富和复杂的序列关系。 5. **位置编码Positional Encoding**由于 Transformer 模型不包含任何序列顺序的信息因此需要引入位置编码来将输入序列的位置信息引入模型。通常使用正弦和余弦函数来实现位置编码。 6. **残差连接和层归一化**Transformer 使用了残差连接和层归一化来组织模型的层以稳定训练、减轻梯度消失问题并加速了训练过程。 7. **注意力掩码Attention Masking**在自然语言处理中Transformer 可以使用注意力掩码来限制模型在生成序列时的注意力范围以确保模型不会看到未来的信息从而保持因果关系。 8. **可扩展性**Transformer 模型可以轻松扩展到处理不同长度的序列并且可以适应各种自然语言处理任务如文本生成、文本分类、问答等。 9. **预训练模型**Transformer 架构启发了一系列预训练模型如BERTBidirectional Encoder Representations from Transformers和GPTGenerative Pretrained Transformer这些模型在自然语言处理领域取得了巨大的成功。 总之Transformer 模型的主要特点包括自注意力机制、并行计算、编码器-解码器结构、多头注意力、位置编码等使其成为自然语言处理和其他序列建模任务中的重要工具。它的成功启发了许多后续架构的发展并对深度学习领域产生了深远的影响。 位置编码的公式 PE的计算结果是一个行数与序列数相等列数和模型维度相等的矩阵 pos代表的是目前的token在序列的位置,dmodel代表模型的维度我们现在先假设它是12吧
i是0到模型维度的二分之一减一之间的所有整数
那么2i和2i1又代表什么呢
2就是0到模型维度减一之间的所有偶数维度
2i1是这个区间内的所有奇数维度
那就不难发现这个公式用正弦函数sin来给偶数维度编码用余弦函数CoS给奇数维度编码
是不是对示任意的相对距离KPEposk可以用PEpos的线性函数表示
所以两命位置向量的点乘能够反映它们的相对距离从而对注意力的计算产生影响