ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一文搞懂Transformer架构的三种注意力机制

一文搞懂Transformer架构的三种注意力机制 前言大家对注意力机制多少都有所耳闻毕竟在自然语言处理NLP和大型语言模型LLM领域2017年《Attention Is All You Need》这篇论文是里程碑式的存在几乎所有的LLM都是基于注意力机制构建的甚至最新的多模态或基于视觉的模型也在某种程度上都运用了它今天我们将深入探讨注意力机制。01什么是注意力当人类的视觉机制察觉到一个物体时通常不会从头到尾地扫视整个场景一般会根据个人的需求集中关注特定的部分。比如下面这张图我们第一眼应该是看到一只动物然后眼睛会先注意到动物的脸然后得出初步结论这应该是一只狼就像右边注意力图所示颜色更深的部分表示一般是我们人类最先看见注意的。注意力最早应用在机器视觉领域CVComputer Vision后来才应用到NLP和LLM领域。多头2头自注意力可视化如下动画所示注意力在Transformer中被应用于机器翻译02Transformer的注意力层在Transformer架构中有两大的组件,分别是编码器Encoder和解码器Decoder 编码器主要是将输入序列映射到潜在语义空间注意力****向量也叫上下文向量但其实上下文向量是注意力机制内部对输入向量的叫法本文中编码器输出向量都只叫作注意力向量以示区分而解码器则是将潜在语义空间注意力****向量映射到输出序列。在Transformer架构中有3种不同的注意力层解码器中的交叉注意力层Cross attention layer编码器中的全局自注意力层Global self attention layer解码器中的因果自注意力层Causal attention layer如下图所示注意力机制基础注意力机制的数学表示如下表达式中QK和V分别指的是查询Query键Key以及值Value矩阵这三种矩阵中每一行都对应了输入文本中的一个分词每一列则对应了这个分词的某一个特性Feature或者维度简单来说查询矩阵里的数据代表了我们关注的词键矩阵里的数据用来帮我们计算这些词之间的相似度即注意力分数attention score向量点乘可以计算相似度而值矩阵里的数据则用来根据这些相似度计算出最终的输出结果为了确保计算过程中的数据不会因为维度即键的大小太大而爆炸或者太小而消失注意力分数会通过键的维度的平方根来进行调整接着通过softmax函数把这些分数转化成权重最后这些权重会和值矩阵相乘得到最后的输出注意力向量。注意力分数可视化为热力图后能清晰地显示出在序列中哪些单词对于预测每个输出单词更重要。下图是在机器翻译中的例子纵轴是英语原文横轴是对应的葡萄牙语翻译以下是计算自注意力机制输出注意力向量的过程。不包括Scale和SoftMax理解QKV注意力机制中有两个输入查询序列Q正在处理的序列在底部。上下文序列KV被关注的序列在左侧。输出序列的维度与查询序列相同。这个操作常常被比作字典查找但是是一个模糊的可微分的向量化的字典查找。举个例子假设有一个普通的Python字典有 3 个键和 3 个值被传递了一个单独的查询d {‘color’: ‘blue’, ‘age’: 22, ‘type’: ‘pickup’}result d[‘color’]这里查询Q是你要找的内容键K表示字典里有什么样的信息而值V则是对应的信息在普通的字典查找中字典会找到匹配的键并返回其对应的值如果查询找不到完全匹配的键也许你会期望返回最接近的值比如在上面的例子中如果你查找 d[“species”]你可能会期望返回 “pickup”因为它是最接近查询的匹配。一个注意力层就像是这样的一个模糊查找但它不仅仅是寻找最佳键它结合了查询Q和键K向量来确定它们匹配的程度也就是“注意力分数”。然后根据“注意力分数”对所有值进行加权平均在注意力层中每个位置的查询Q序列都提供一个查询向量而上下文序列则充当了一个字典每个位置提供一个键和值向量在使用这些向量之前注意力层会用一个全连接层对输入向量进行投影。交叉注意力层在 Transformer 中交叉注意力层位于字面上的中心位置它连接了编码器和解码器是在模型中使用注意力最直接的方式。要实现这一点需要将目标序列作为查询将上下文序列作为键/值传递。Q 解码器中因果注意力层的输出向量K 编码器输出的注意力向量V 编码器输出的注意力向量如下所示每一列代表了对上下文序列的加权求和。为了简化起见没有显示残差连接。全局自注意力层全局自注意力层是Transformer编码器的一部分它的作用是负责处理整个输入序列。它允许每个序列元素直接访问其他所有序列元素只需将整个输入序列作为 QKV即可所有输出可以并行计算。Q 输入序列中的当前位置词向量K 输入序列中的所有位置词向量V 输入序列中的所有位置词向量因果注意力层因果注意力层对解码器中输出序列执行类似于全局自注意力层的工作但与编码器的全局自注意力层有不同的处理方式。Transformer 是一个“自回归”模型它逐个标记地生成文本并将输出反馈到输入中为了使这个过程高效这些模型确保每个序列元素的输出只依赖于前面的序列元素这些模型是“因果”的。要构建一个因果自注意力层在计算注意力分数和求和注意力值时需要使用适当的掩码因为输出序列也是一次性输入的但在计算前面分词的时候是不希望它后面的分词也参与计算的。Q 输出序列中的当前位置词向量K 输出序列中的所有位置词向量V 输出序列中的所有位置词向量03位置编码与RNNLSTM等按顺序逐个接收输入分词计算天然就带有位置信息不同Transformer是一次性处理所有输入分词虽然这使得 Transformer更快但是会丢失与分词顺序相关的信息然而位置信息对于大多数信息处理是至关重要的比如“我爱你”和“你爱我”是完全不一样的语义为了解决这个问题需要把位置编码加入输入序列使得最终的注意力向量是包含位置信息的。位置编码可以通过多种方式实现包括使用学习分词在Bert中使用正弦函数或相对位置我们将重点介绍正弦定位编码这也是Vaswani等人在原始论文中采用的方法。正弦定位编码是一个将Token的位置映射到大小为d的向量的函数其中d是输入和输出向量的维度。其中pos表示token所在的位置而i代表向量的维数正弦位置编码对每一个维度使用不同频率这样就为每一个位置创造了一个既独特又有规律的模式与学习得到的嵌入方式相比正弦位置编码有几个明显的优点它是固定的、可以泛化到未见过的数据、以及易于扩展。位置编码应与输入序列应有相同的维度以便两个向量可以相加本质上是将位置信息注入到输入嵌入表示中04多头注意力机制多头注意力机制是在注意力机制基础上的一个创新它让模型能同时关注输入和输出序列的多个不同特征或维度简单来说它通过把查询Q键K值V这三个矩阵分成好几个小块每一块称为一个“头”每个“头”都会独立进行自注意力运算然后把所有“头”的结果拼接在一起再进行一次特定的变换得到最终的输出。数学表示如下与传统的单头自注意力相比多头注意力有几大优点比如它能辨识出分词之间的各种关系无论是主谓、动宾还是名形关系同时多头注意力还能提升模型的能力和表现力因为模型能从序列的多种表现形式中同时学习此外多头注意力还能让模型在运算时更高效、更便于并行处理因为它将每个头的维度降低了从而可以同时处理多个头。另外Transformer还可以叠加多个层进一步提升模型的能力和表现力。05总结我们介绍了Transformer中的三种不同的注意力层以及注意力的实现方法位置编码和多头注意力机制涵盖了大部分注意力相关的知识点希望朋友们对它有了近一步的了解。Transformer利用注意力机制做出了更好的预测从ChatGPT的成功已经得到了验证尽管循环神经网络RNN也试图实现类似的功能但由于它们受到短期记忆的限制因此在处理长序列时特别是在编码或生成长序列时Transformer更为出色由于Transformer架构自然语言处理NLP行业取得了前所未有的成果。最后的最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表