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 的注意力机制使其能够对远程依赖关系进行建模、处理可变长度输入,并在各种自然语言处理任务中实现最先进的性能。
往期推荐
- 深度学习:张量 介绍
- Linux 用户必备的 Git 图形化工具
- PyTorch 与 TensorFlow:机器学习框架之战
- 详解 Diffusion (扩散) 模型