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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介: 一文搞懂Transformer架构的三种注意力机制

前言

大家对注意力机制多少都有所耳闻,毕竟在自然语言处理(NLP)和大型语言模型(LLM)领域,2017年,《Attention Is All You Need》这篇论文是里程碑式的存在;几乎所有的LLM都是基于注意力机制构建的,甚至最新的多模态或基于视觉的模型也在某种程度上都运用了它;今天,我们将深入探讨注意力机制。


1、什么是注意力

当人类的视觉机制察觉到一个物体时,通常不会从头到尾地扫视整个场景;一般会根据个人的需求集中关注特定的部分。

比如下面这张图,我们第一眼应该是看到一只动物,然后,眼睛会先注意到动物的脸,然后得出初步结论,这应该是一只狼;就像右边注意力图所示,颜色更深的部分表示一般是我们人类最先看见(注意)的。

注意力最早应用在机器视觉领域(CV,Computer Vision),后来才应用到NLP和LLM领域。

多头(2头)自注意力可视化:

如下动画所示,注意力在Transformer中,被应用于机器翻译:

2、Transformer的注意力层

在Transformer架构中,有两大组件,分别是编码器(Encoder)和解码器(Decoder),编码器主要是将输入序列映射到潜在语义空间(注意力向量,也叫上下文向量,但其实上下文向量是注意力机制内部对输入向量的叫法,本文中编码器输出向量都只叫作注意力向量,以示区分),而解码器则是将潜在语义空间(注意力向量)映射到输出序列。

在Transformer架构中,有3种不同的注意力层:

  • 解码器中的交叉注意力层(Cross attention layer)
  • 编码器中的全局自注意力层(Global self attention layer)
  • 解码器中的因果自注意力层(Casual attention layer)

如下图所示:

注意力机制基础

注意力机制的数学表示如下:

表达式中,Q,K和V分别指的是查询(Query),键(Key)以及值(Value)矩阵;这三种矩阵中,每一行都对应了输入文本中的一个分词,每一列则对应了这个分词的某一个特性(Feature)或者维度;

简单来说,查询矩阵里的数据代表了我们关注的词,键矩阵里的数据用来帮我们计算这些词之间的相似度(即注意力分数:attention score,向量点乘可以计算相似度),而值矩阵里的数据则用来根据这些相似度计算出最终的输出结果;

为了确保计算过程中的数据不会因为维度(即键的大小)太大而爆炸,或者太小而消失,注意力分数会通过键的维度的平方根来进行调整;接着,通过softmax函数把这些分数转化成权重,最后这些权重会和值矩阵相乘,得到最后的输出(注意力向量)。

注意力分数可视化为热力图后,能清晰地显示出,在序列中哪些单词,对于预测每个输出单词更重要。(下图是在机器翻译中的例子,纵轴是英语原文,横轴是对应的葡萄牙语翻译)。

以下是计算自注意力机制输出注意力向量的过程。(不包括Scale和SoftMax)。

理解Q,K,V

注意力机制中有两个输入:

  • 查询序列(Q):正在处理的序列(在底部)。
  • 上下文序列(K,V):被关注的序列(在左侧)。

输出序列的维度与查询序列相同。

这个操作常常被比作字典查找,但是,是一个模糊的,可微分的,向量化的字典查找。

举个例子,假设有一个普通的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编码器的一部分,它的作用是负责处理整个输入序列。

它允许每个序列元素直接访问其他所有序列元素,只需将整个序列作为Q,K,V即可,所有输出可以并行计算。

  • Q = 输入序列中的当前位置词向量
  • K = 输入序列中的所有位置词向量
  • V = 输入序列中的所有位置词向量

因果注意力层

因果注意力层对解码器中输出序列执行类似于全局自注意力层的工作;但与编码器的全局自注意力层有不同的处理方式。

Transformer是一个“自回归”模型,它逐个标记地生成文本,并将输出反馈到输入中;为了使这个过程高效,这些模型确保每个序列元素的输出只依赖于前面的序列元素;这些模型是“因果”的。

要构建一个因果自注意力层,在计算注意力分数和求和注意力值时需要使用适当的掩码,因为输出序列也是一次性输入的,但在计算前面分词的时候是不希望它后面的分词也参与计算的。

  • Q = 输出序列中的当前位置词向量
  • K = 输出序列中的所有位置词向量
  • V = 输出序列中的所有位置词向量

3、位置编码

与RNN、LSTM等按顺序逐个接收输入分词,计算天然就带有位置信息不同,Transformer是一次性处理所有输入分词,虽然这使得Transformer更快,但是会丢失与分词顺序相关的信息;然而,位置信息对于大多数信息处理是至关重要的,比如“我爱你”和“你爱我”是完全不一样的语义;为了解决这个问题,需要把位置编码加入输入序列,使得最终的注意力向量是包含位置信息的。

位置编码也可以通过多种方式实现,包括使用学习分词(在Bert中使用),正弦函数或相对位置;我们将重点介绍正弦定位编码,这也是Vaswani等人在原始论文中采用的方法。

正弦定位编码是一个将Token的位置映射到大小为d的向量的函数,其中 d 是输入和输出向量的维度。

其中pos表示token所在的位置,而 i 代表向量的维数;正弦位置编码对每一个维度使用不同频率,这样就为每一个位置创造了一个既独特又有规律的模式;与学习得到的嵌入方式相比,正弦位置编码有几个明显的优点:它是固定的、可以泛化到未见过的数据、以及易于扩展。

位置编码应与输入序列应有相同的维度,以便两个向量可以相加(本质上是将位置信息注入到输入嵌入表示中)


4、多头注意力机制

多头注意力机制是在注意力机制基础上的一个创新,它让模型能同时关注输入和输出序列的多个不同特征或维度;简单来说,它通过把查询(Q),键(K),值(V)这三个矩阵分成好几个小块,每一块称为一个“头”;每个“头”都会独立进行自注意力运算,然后把所有“头”的结果拼接在一起,再进行一次特定的变换,得到最终的输出。

数学表示如下:

与传统的单头自注意力相比,多头注意力有几大优点:比如,它能辨识出分词之间的各种关系,无论是主谓、动宾还是名形关系;同时,多头注意力还能提升模型的能力和表现力,因为模型能从序列的多种表现形式中同时学习;此外,多头注意力还能让模型在运算时更高效、更便于并行处理,因为它将每个头的维度降低了,从而可以同时处理多个头。

另外,Transformer还可以叠加多个层,进一步提升模型的能力和表现力。

5、总结

我们介绍了Transformer中的三种不同的注意力层,以及注意力的实现方法,位置编码和多头注意力机制,涵盖了大部分注意力相关的知识点,希望朋友们对它有了近一步的了解。

Transformer利用注意力机制做出了更好的预测,从ChatGPT的成功,已经得到了验证;尽管循环神经网络RNN也试图实现类似的功能,但由于它们受到短期记忆的限制,因此在处理长序列时,特别是在编码或生成长序列时,Transformer更为出色;由于Transformer架构,自然语言处理(NLP)行业取得了前所未有的成果。

参考:AlwithGary

目录
相关文章
|
7天前
|
人工智能 测试技术 数据处理
首个Mamba+Transformer混合架构多模态大模型来了,实现单卡千图推理
【10月更文挑战第18天】《LongLLaVA: Scaling Multi-modal LLMs to 1000 Images Efficiently via Hybrid Architecture》提出了一种新型多模态大模型LongLLaVA,结合了Mamba和Transformer架构,通过系统优化实现在单张A100 80GB GPU上处理近千张图像的突破。该模型在视频理解、高分辨率图像分析和多模态智能体任务中表现出色,显著提升了计算效率。
108 64
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型最强架构TTT问世!斯坦福UCSD等5年磨一剑, 一夜推翻Transformer
【7月更文挑战第21天】历经五年研发,斯坦福、UCSD等顶尖学府联合推出TTT架构,革新NLP领域。此架构以线性复杂度处理长序列,增强表达力及泛化能力,自监督学习下,测试阶段动态调整隐藏状态,显著提升效率与准确性。实验显示,TTT在语言模型与长序列任务中超越Transformer,论文详述于此:[https://arxiv.org/abs/2407.04620](https://arxiv.org/abs/2407.04620)。尽管如此,TTT仍需克服内存与计算效率挑战。
149 2
|
10天前
|
存储 资源调度 算法
操作系统的心脏:深入理解内核架构与机制####
【10月更文挑战第16天】 本文旨在揭开操作系统最神秘的面纱——内核,通过剖析其架构设计与关键机制,引领读者一窥究竟。在这篇探索之旅中,我们将深入浅出地讨论内核的基本构成、进程管理的智慧、内存分配的策略,以及那至关重要的系统调用接口,揭示它们是如何协同工作,支撑起现代计算机系统的高效运行。这既是一次技术的深潜,也是对“看不见的手”调控数字世界的深刻理解。 ####
27 3
|
2月前
|
机器学习/深度学习 存储 算法
Transformer、RNN和SSM的相似性探究:揭示看似不相关的LLM架构之间的联系
通过探索大语言模型(LLM)架构之间的潜在联系,我们可能开辟新途径,促进不同模型间的知识交流并提高整体效率。尽管Transformer仍是主流,但Mamba等线性循环神经网络(RNN)和状态空间模型(SSM)展现出巨大潜力。近期研究揭示了Transformer、RNN、SSM和矩阵混合器之间的深层联系,为跨架构的思想迁移提供了可能。本文深入探讨了这些架构间的相似性和差异,包括Transformer与RNN的关系、状态空间模型在自注意力机制中的隐含作用以及Mamba在特定条件下的重写方式。
87 7
Transformer、RNN和SSM的相似性探究:揭示看似不相关的LLM架构之间的联系
|
25天前
|
机器学习/深度学习 人工智能
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
|
2月前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
38 5
|
3月前
|
机器学习/深度学习 自然语言处理 知识图谱
|
3月前
|
消息中间件 负载均衡 Java
揭秘Kafka背后的秘密!Kafka 架构设计大曝光:深入剖析Kafka机制,带你一探究竟!
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理及流传输设计的高效率消息系统。其核心特性包括高吞吐量、低延迟及出色的可扩展性。Kafka采用分布式日志模型,支持数据分区与副本,确保数据可靠性和持久性。系统由Producer(消息生产者)、Consumer(消息消费者)及Broker(消息服务器)组成。Kafka支持消费者组,实现数据并行处理,提升整体性能。通过内置的故障恢复机制,即使部分节点失效,系统仍能保持稳定运行。提供的Java示例代码展示了如何使用Kafka进行消息的生产和消费,并演示了故障转移处理过程。
48 3
|
2月前
|
存储 安全 算法
探索操作系统的心脏:内核架构与机制的深度剖析
本文旨在深入探讨操作系统的核心——内核,揭示其架构设计与运行机制的内在奥秘。通过对进程管理、内存管理、文件系统、设备控制及网络通信等关键组件的细致分析,展现内核如何高效协调计算机硬件与软件资源,确保系统稳定运行与性能优化。文章融合技术深度与通俗易懂的表述方式,旨在为读者构建一幅清晰、立体的内核运作全景图。
55 0
|
3月前
|
数据采集 存储 Java
Flume Agent 的内部原理分析:深入探讨 Flume 的架构与实现机制
【8月更文挑战第24天】Apache Flume是一款专为大规模日志数据的收集、聚合及传输而设计的分布式、可靠且高可用系统。本文深入解析Flume Agent的核心机制并提供实际配置与使用示例。Flume Agent由三大组件构成:Source(数据源)、Channel(数据缓存)与Sink(数据目的地)。工作流程包括数据采集、暂存及传输。通过示例配置文件和Java代码片段展示了如何设置这些组件以实现日志数据的有效管理。Flume的强大功能与灵活性使其成为大数据处理及实时数据分析领域的优选工具。
94 1

热门文章

最新文章