深度剖析Transformer核心思想 "Attention Is All You Need"

简介: 深度剖析Transformer核心思想 "Attention Is All You Need"

Transformer 模型及其关键组件的概述。

简介

在这篇博文中,我将讨论本世纪最具革命性的论文“Attention Is All You Need”。首先,我将介绍自注意力机制,然后转向 Transformer 的架构细节。注意力模型使用 2 个 RNN 和一个注意力机制来为编码器的隐藏状态分配权重。在《Attention is all you need》这篇论文中,作者去掉了所有的 RNN。他们引入了一种不使用递归的新架构,而是完全依赖于自注意力机制。先解释一下什么是self-attention机制

自注意力机制

自注意力机制使模型能够通过同时关注所有位置来捕获序列中不同位置之间的依赖关系。注意力分数确定每个键值对对给定查询的重要性或相关性。自注意力机制扩展了这种机制,使其可以在单个序列中运行,而不需要外部输入。

在上图中,可以查看self-attention机制。首先,我们有一个输入x。我们将此输入与可训练权重矩阵(Wq、Wk、Wv)相乘。作为输出,我们得到查询、键和值矩阵。我们使用查询和关键矩阵来查找它们的相似性。上图只采用了点积,但在 Transformer 架构中对其进行了缩放。该点积的输出是注意力权重 (a)。以同样的方式,我们将计算所有输入 x(t) 的注意力权重。计算完所有注意力权重后,应用 softmax 函数对点积进行归一化,生成总和为 1 的注意力权重。从 softmax 运算获得的注意力权重用于计算值向量的加权和。该加权和表示输入序列中每个位置的自参与表示。自注意力的优势在于它能够对序列中的局部和全局依赖性进行建模。它从整个序列中捕获上下文信息,提供对不同位置之间关系的更全面的理解。

缩放点积

正如上段所述,我们不仅仅使用点积来查找相关性。但我们也按关键维度 (dk) 的平方根因子对其进行缩放。这有助于确保查询和键之间的点积对于大 dk 来说不会变得太大。如果点积变得太大,那么 softmax 输出将非常小。为了避免这种情况,我们缩放点积。

多头注意力

多头注意力只是自注意力机制的补充。它允许模型共同关注不同的位置并同时学习输入序列的多种表示。通过并行执行多组注意力计算,多头注意力捕获输入序列的不同方面,并增强模型捕获复杂依赖关系的能力。每个注意力头都有不同的查询、键和值矩阵。

来自不同注意力头的输出通过线性投影进行组合和转换,从而产生整合多个视角信息的最终表示。

Transformer 架构

《Attention Is All You Need》论文中介绍的 Transformer 架构由几个关键组件组成,这些组件协同工作以实现有效的序列建模。主要组件是编码器、解码器、位置编码、残差连接、层归一化、多头注意块、屏蔽多头注意块和前馈网络。

我们已经讨论了多头注意力块。蒙面多头注意力与此相同,但有一点变化。我们屏蔽后续的序列元素。即,只允许参加当前位置(包括当前位置)的位置。这是通过将这些值的 softmax 设置为负无穷来实现的。

  • 编码器:Transformer 架构中的左侧部分是编码器部分。它由一个多头注意力块、一个前馈网络、多个残差连接和层归一化组成。它采用输入序列的嵌入以及添加到其中的位置编码。在原始论文中,他们使用了 6 个编码器。
  • 解码器:Transformer 架构中正确的部分是解码器部分。它由一个屏蔽多头注意块、一个简单多头注意块、一个前馈网络以及多个残差连接和层归一化组成。它采用输出序列的嵌入以及添加到其中的位置编码。在最初的论文中,他们使用了 6 个解码器。
  • 残差连接和层归一化:残差连接,也称为跳跃连接,是绕过神经网络中一个或多个层的直接连接。在 Transformer 架构的上下文中,残差连接用于将子层的输出连接到其输入,从而允许原始输入不变地流经该层。层归一化是一种用于归一化神经网络层内激活的技术。网络。它的目的是通过减少内部协变量偏移来提高训练稳定性和泛化性,内部协变量偏移是指网络学习时激活分布的变化。层归一化独立应用于每个神经元或特征,在小批量维度上对其值进行归一化。
  • 前馈网络:在 Transformer 架构中,前馈网络是在每层内的每个位置上独立且相同地运行的组件。它负责在自注意力机制和位置前馈子层中转换输入序列的表示。在第一次变换之后,将两个线性变换应用到具有 Relu 激活函数的自注意力机制的输出。
  • 位置编码:输入和输出序列的嵌入与位置编码连接在一起。这些编码注入有关序列中元素相对位置的信息。

学习的位置嵌入和通过正弦和余弦函数的嵌入在语言任务中产生几乎相同的结果。

总结

总之,《Attention Is All You Need》论文介绍了一种称为 Transformer 的突破性架构,它彻底改变了序列建模领域。该架构在很大程度上依赖于自注意力的概念,使其能够捕获输入序列中不同位置之间的依赖关系。

Transformer 的注意力机制使其能够对远程依赖关系进行建模、处理可变长度输入,并在各种自然语言处理任务中实现最先进的性能。

相关文章
|
分布式计算 网络协议 Java
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
411 0
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
|
2月前
|
数据采集 数据管理 数据挖掘
数据治理5个最容易混淆的关键词:主数据、元数据、数据质量、数据安全、指标口径,你都搞明白了吗?
企业在数据管理中常面临“听起来都懂,做起来都乱”的困境,尤其对主数据、元数据、数据质量、数据安全与指标口径等关键概念模糊,影响数据治理与业务决策。本文用通俗方式讲清这五大核心概念,帮助企业厘清数据治理基础逻辑,提升数据可用性与业务协同效率,为BI、数据中台等建设打下坚实基础。
|
12月前
|
算法 数据可视化 数据处理
MATLAB内置函数
【10月更文挑战第6天】本文详细介绍了MATLAB的内置函数和自定义函数,涵盖数学计算、矩阵操作、图形绘制等方面。通过具体代码示例,展示了如何使用内置函数和创建自定义函数,以及它们在性能、灵活性和可读性上的优劣。同时,文章还讨论了函数文件与脚本文件的区别,匿名函数和函数句柄的高级应用,帮助读者更好地利用MATLAB解决复杂问题。
|
10月前
|
人工智能 自然语言处理 算法
Devika AI:开源的 AI 软件开发工具,理解和执行复杂的人类指令
Devika AI 是一款开源的 AI 软件开发工具,能够理解和执行复杂的人类指令。它通过分解任务、信息搜集和代码生成,帮助开发者提高效率,减少人工干预。本文将详细介绍 Devika AI 的功能、技术原理以及如何运行和配置该工具。
297 9
Devika AI:开源的 AI 软件开发工具,理解和执行复杂的人类指令
|
11月前
|
存储 Java
静态变量与实例变量的区别
【10月更文挑战第15天】总之,静态变量和实例变量在 Java 中具有不同的特性和用途。理解它们的区别对于正确设计和编写代码至关重要。
|
11月前
|
机器学习/深度学习 计算机视觉 Python
图像数据的特征提取与预处理方法,涵盖图像数据的特点、主要的特征提取技术
本文深入探讨了图像数据的特征提取与预处理方法,涵盖图像数据的特点、主要的特征提取技术(如颜色、纹理、形状特征)及预处理步骤(如图像增强、去噪、分割)。同时介绍了Python中常用的OpenCV和Scikit-image库,并提供了代码示例,强调了预处理的重要性及其在提升模型性能中的作用。
1535 5
led点阵---显示数字或汉字(内含代码+注释+图片)
led点阵---显示数字或汉字(内含代码+注释+图片)
1103 0
led点阵---显示数字或汉字(内含代码+注释+图片)
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
自然语言处理 测试技术 计算机视觉
ICLR 2024:Time-LLM:基于大语言模型的时间序列预测
【2月更文挑战第28天】ICLR 2024:Time-LLM:基于大语言模型的时间序列预测
2115 1
ICLR 2024:Time-LLM:基于大语言模型的时间序列预测
|
Linux 数据处理 vr&ar
Linux下的ranlib命令:静态库文件的索引生成器
`ranlib`是Linux用于加速静态库(.a文件)链接的工具,它生成索引以优化查找目标文件。当链接器处理静态库时,索引能快速定位目标,提升效率。命令如`ranlib libexample.a`创建索引。注意,新工具链可能已自动包含此功能,使用前应确保库文件未含索引,避免重复生成。