做网站公司名字,网站存在风险怎么解决,邮件更新wordpress,市通建设工程质量监督局网站背景介绍 在自然语言处理#xff08;NLP#xff09;领域#xff0c;序列到序列#xff08;seq2seq#xff09;模型和Transformer架构的出现#xff0c;极大地推动了机器翻译、文本生成和其他语言任务的进展。传统的seq2seq模型通常依赖于循环神经网络#xff08;RNNNLP领域序列到序列seq2seq模型和Transformer架构的出现极大地推动了机器翻译、文本生成和其他语言任务的进展。传统的seq2seq模型通常依赖于循环神经网络RNN来处理输入序列并通过编码器-解码器结构进行信息传递。然而这种方法在处理长序列时存在一定的局限性主要体现在信息的丢失和长距离依赖的建模能力不足。 为了解决这些问题Transformer模型于2017年被提出。它引入了自注意力机制Self-Attention使得模型能够在处理每个单词时考虑到句子中所有其他单词的上下文信息。这种机制不仅提高了模型对长距离依赖的捕捉能力还显著提升了并行计算的效率从而加快了训练速度。 自注意力机制的核心在于通过计算查询Query、键Key和值Value向量之间的相关性来动态调整每个单词在上下文中的重要性。这种方法使得模型能够灵活地关注句子中不同位置的词从而更好地理解和生成语言。 此外Transformer模型的多头注意力机制进一步增强了模型的表达能力。通过将注意力机制分成多个头模型能够在不同的子空间中学习到多种不同的表示从而捕捉到更丰富的语义信息。 近年来基于Transformer的模型如BERT、GPT和CLIP等已经在多个NLP任务中取得了显著的成果。这些模型不仅在文本处理上表现出色还扩展到了图像处理和多模态学习等领域展示了Transformer架构的广泛适用性和强大能力。 综上所述seq2seq模型和Transformer架构的演变标志着自然语言处理技术的重大进步为实现更智能的语言理解和生成奠定了基础。
seq2seq原理
参考https://blog.csdn.net/zhuge2017302307/article/details/119979892对比作用
Transformer原理 Self-Attention 过程
如上一节所讲Self Attention 在处理某个词之前通过对句子片段中每个词的相关性进行打分并将这些词的表示向量加权求和。
Self-Attention 沿着句子中每个 token 的路径进行处理主要组成部分包括 3 个向量
QueryQuery 向量是当前单词的表示用于对其他所有单词使用这些单词的 key 向量进行评分。我们只关注当前正在处理的 token 的 query 向量。KeyKey 向量就像句子中所有单词的标签。它们就是我们在搜索单词时所要匹配的。ValueValue 向量是实际的单词表示一旦我们对每个词的相关性进行了评分我们需要对这些向量进行加权求和从而表示当前的词。
以下是计算it时的评分 这些加权的 Value 向量会得到一个向量它将 50% 的注意力放到单词robot 上将 30% 的注意力放到单词 a将 19% 的注意力放到单词 it。最终一个具有高分数的 Value 向量会占据结果向量的很大一部分上面都是展示大量的单个向量是想把重点放在词汇层面上。而实际的代码实现是通过巨大的矩阵相乘来完成的
MultiheadAttention 多头注意力模型中head数是一个超参数语料大电脑性能好就可以设置的高一点
torch实现
torch.nn.MultiheadAttention(embed_dim, num_heads, dropout0.0, biasTrue, add_bias_kvFalse, add_zero_attnFalse, kdimNone, vdimNone) 1.embed_dim最终输出的 K、Q、V 矩阵的维度这个维度需要和词向量的维度一样 2.num_heads设置多头注意力的数量。要求embed_dim%num_heads0即要能被embed_dim整除。这是为了把词的隐向量长度平分到每一组这样多组注意力也能够放到一个矩阵里从而并行计算多头注意力。 3.dropout这个 dropout 加在 attention score 后面 例如我们前面说到8 组注意力可以得到 8 组 Z 矩阵然后把这些矩阵拼接起来得到最终的输出。 如果最终输出的每个词的向量维度是 512那么每组注意力的向量维度应该是512/864 如果不能够整除那么这些向量的长度就无法平均分配。
Self-Attention 和经典的seq2seq模型的区别
一个注意力模型不同于经典的seq2seq模型主要体现在 3 个方面
编码器把所有时间步的 hidden state隐藏层状态传递给解码器而非只传递最后一个 hidden state。即编码器会把更多的数据传递给解码器。对于 Self Attention 机制会把其他单词的理解融入处理当前的单词。使得模型不仅能够关注这个位置的词而且能够关注句子中其他位置的词作为辅助线索进而可以更好地编码当前位置的词。解码器输出之前计算了注意力。让模型找到此时刻最该注意的词。
对于第二点举例如下
机器人第二定律
机器人必须服从人给予它的命令当该命令与第一定律冲突时例外。
句子中高亮的 3 个部分用于指代其他的词。如果不结合它们所指的上下文就无法理解或者处理这些词。当一个模型要处理好这个句子它必须能够知道
它 指的是机器人该命令 指的是这个定律的前面部分也就是人给予它的命令第一定律 指的是机器人第一定律
Self Attention 能做到这一点。它在处理某个词之前将模型中这个词的相关词和关联词的理解融合起来并输入到一个神经网络。它通过对句子片段中每个词的相关性打分attention score并将这些词向量加权求和。
下图顶部模块中的 Self Attention 层在处理单词 it 的时候关注到 a robot。它最终传递给神经网络的向量是这 3 个单词的词向量加权求和的结果。
QKV计算过程 为什么求内积之后除以 d \sqrt{d} d
在计算相似度 s ⟨ q , k ⟩ s \langle q, k \rangle s⟨q,k⟩ 时 s s s 要除以 d k e y \sqrt{d_{key}} dkey Key 向量的长度。原因是词向量 embedding 维度过高时 s s s 过大softmax 函数会进入饱和区。例如
对于两个 d d d 维向量 q , k q, k q,k假设它们都采样自“均值为 0、方差为 1”的分布。Attention 是内积后 softmax主要设计的运算是 e q ⋅ k e^{q \cdot k} eq⋅k我们可以大致认为内积之后、softmax 之前的数值在 − 3 d -3\sqrt{d} −3d 到 3 d 3\sqrt{d} 3d 这个范围内由于 d d d 通常都至少是 64所以 e 3 d e^{3\sqrt{d}} e3d 比较大而 e − 3 d e^{-3\sqrt{d}} e−3d 比较小softmax 函数进入饱和区。这样会有两个影响
带来严重的梯度消失问题导致训练效果差。softmax 之后归一化后计算出来的结果 a a a 要么趋近于 1 要么趋近于 0Attention 的分布非常接近一个 one hot 分布了加权求和退化成胜者全拿则解码时只关注注意力最高的attention 模型还是希望别的词也有权重。
相应地解决方法有两个参考苏剑林《浅谈 Transformer 的初始化、参数化与标准化》 像 NTK 参数化那样在内积之后除以 d \sqrt{d} d 使 q ⋅ k q \cdot k q⋅k 的方差变为 1对应 e 3 e^{3} e3 e − 3 e^{-3} e−3 都不至于过大过小这也是常规的 Transformer 如 BERT 里边的 Self Attention 的做法。对公式 s ⟨ q , k ⟩ s \langle q, k \rangle s⟨q,k⟩ 进行优化 q q q 和 k k k 求内积所以其实 key 和 q q q 的向量长度一样。 s ⟨ q , k ⟩ d k e y s \frac{\langle q, k \rangle}{\sqrt{d_{key}}} sdkey ⟨q,k⟩ 另外就是不除以 d \sqrt{d} d 但是初始化 q , k q, k q,k 的全连接层的时候其初始化方差要多除以一个 d d d这同样能使得 q ⋅ k q \cdot k q⋅k 的初始方差变为 1T5 采用了这样的做法。
参考
https://blog.csdn.net/qq_56591814/article/details/119759105https://blog.csdn.net/weixin_38252409/article/details/133828294