“Attention (& this post) is All You Need”:在 7 分钟阅读中理解 Transformer 论文的关键点。

“Attention (& this post) is All You Need”:在 7 分钟阅读中理解 Transformer 论文的关键点。

在这篇文章中,我将向您介绍注意力的概念,并解释在论文“注意力就是你需要的一切”中介绍的 Transformer 架构。让我们潜入水中,好吗?

先决条件: 熟悉神经网络 + 对编码器-解码器架构有大致的了解。

从复发到关注的转变: 是什么激励了变压器 ?

长期以来,RNN 和 CNN 一直是每场表演的核心 转导模型 .通常,它们用于构建编码器-解码器架构,其中两个部分通过注意力机制链接。然而,尽管这些架构性能良好,但由于其固有的顺序性,这些架构在训练方面的成本很高。我在下面的段落中解释了原因。

循环模型为输入和输出序列中的每个标记分配位置。对于每个这样的位置和计算的每个时间步 t,使用以下方法生成隐藏状态 hₜ:时间 t 的输入和前一个时间步的隐藏状态。

RNN 的这种顺序工作带来了一个问题,因为它使同一训练示例中的并行化变得不可能。对于非常长的序列,由于这些模型的执行需要为所有时间步存储一系列隐藏状态,因此会出现内存问题。

基于以上原因,《Attention is All You Need》的作者介绍了 Transformer: 一种完全依赖注意力的架构,不需要递归或卷积。

如果您想了解更多关于变形金刚的历史背景,Vinithavn 在她的身上讲述了一个引人入胜的故事 文章 .

介绍著名的变压器:它的架构和组件:

如果 Transformer 有 Facebook 帐户,下图就是他们的头像。乍一看肯定不是最讨人喜欢的数字,但我会在一分钟内为您分解!

The Transformer Architecture — From “Attention is All You Need”

现在,让我们勇敢地审视一下架构,并确定我们可以从中提取哪些组件。

首先,架构是一个 ** 编码器-解码器** (由灰色框表示)其中使用了两种类型的层: ** 前馈层** (蓝色)和 ** 注意力层** (橙色)。其次,输入和输出表示为 ** 嵌入** 除了使用 ** 位置编码** .一个 ** 软最大** 层(绿色)用于获取输出。

在下文中,我将解释上面突出显示的每个组件。

注意力:

从技术上讲,注意力只不过是一种功能。连接一个序列的不同部分的一个。实际上,键值对和查询之间的函数映射 (键、值和查询都是向量)。

键、查询和值的含义类似于它们在检索系统中的使用方式

  • 查询 Q 是您计算注意力的向量。
  • 关键 K 是您计算注意力的向量。
  • 根据您的查询,值 V 类似于最佳匹配结果。

Scaled Dot-Product Attention vs. Multi-Head Attention — From “Attention is All You Need”

自注意力是当注意力机制用于 “关联来自同一序列的不同位置,以便计算序列的表示” .也就是说,Q、V 和 K 来自同一个位置/输入序列。

点积注意

有两种常用的注意力类型:加法和乘法/逐点。 Transformer 实现的乘法注意力的计算方式如下:

在哪里:

  • Sqrt(dk) 用于缩放:怀疑dk(Q和K的维度)的值越大,点积越大。因此,后者落在梯度接近于零的 softmax 曲线区域。
  • Softmax 的使用是获取 0 到 1 之间的值,以便后者可以作为权重。

多头注意力

Vaswani 等人没有使用单个点积注意力计算。发现最好使用对相同查询、键和值的不同线性投影执行相同操作的多个头。

换句话说,本文建议使用多个这样的值,而不是为键、值和查询使用一组值。

多头注意力的工作方式如下:

H 头堆叠在一起。它们的输出被连接起来并被预测:

磁头采用的 K、Q 和 V 值略有不同,首先要进行一些变换。 K、Q 和 V 是 “使用不同的学习线性投影进行线性投影” 在它们被喂到每个头之前。

为什么要多头注意力?

上述转换背后的想法是,该模型将“ 关注来自不同位置的不同表示子空间的信息”。 换句话说,每个头都会得到不同版本的 Q、V 和 K。

本文 这里 详细解释了多头注意力背后的直觉和数学。

编码器-解码器堆栈:

编码器-解码器架构是最具竞争力的转导模型的核心。

还记得变形金刚的 FB 头像吗?编码器是该图左侧的灰色框。

  • 每层由两个子层组成:前馈网络 + 多头自注意力机制。
  • Nx 是组成 Transformer 的编码器部分的相同层的数量。
  • 使用了残差连接和层归一化。

解码器层(右侧的灰色框)与编码器层类似,不同之处在于以下修改:

  • 解码器层有一个额外的子层:一个多头注意力子层(橙色的第二个框),负责处理编码器堆栈的输出。
  • 将掩码添加到自注意力层(解码器底部的橙色框)以确保解码器只关注之前的位置而不关注后续位置。

位置编码:

由于没有递归或卷积,因此需要一种不同的方法来解释序列的顺序。为此,使用这些位置编码并将其汇总到编码器和解码器输入。

实际上,这些编码可以学习或固定。在本文的上下文中,后者是使用正弦和余弦函数实现的:

在哪里:

  • 位置 是输入的位置。
  • 一世 是每个维度对应一个正弦曲线的维度。

这种位置编码选择背后的直觉是基于使用正弦函数的假设,该模型将:

  • “容易学会按相对位置参加”。
  • “外推到比训练期间遇到的序列长度更长的序列长度”。

嵌入、Softmax 和前馈层:

嵌入

神经网络处理数字。在处理转导模型时,嵌入是必须的,以便将输入和输出标记转换为其维度的向量表示 模型 .

软最大

需要 softmax 函数将解码器输出转换为概率。后者用于在给定先前构建的词汇表的情况下解释解码器的输出。

前馈层

全连接的前馈层与 ReLU 激活函数一起使用。

在 Transformer 中使用多头注意力的 3 种不同方式:

编码器-解码器注意

查询来自解码器层,而键和值来自编码器输出,如解码器中的中间橙色框所示。这允许解码器中的每个位置关注输入序列中的所有位置。

编码器中的自注意力

这种注意力由编码器中的橙色框表示。查询、键和值都来自同一个地方,在这种情况下,是前一个编码器层的输出。

解码器中的自注意力

与编码器中的自注意力类似,查询、键和值都来自前一个解码器层。解码器底部的橙色框代表了这种类型的注意力。目标是每个解码器位置都关注自身和之前的位置。

有了这个,你可以放心,你对“注意力就是你需要的一切”论文中介绍的重要概念有了一个概述。

要坚持新概念,可能需要一些重复(以及很大的耐心)。祝你好运,学习愉快!

对于您的建议或意见,欢迎联系 领英 或者 中等的 .

参考:

瓦斯瓦尼等人。 (2017)。 注意力就是你所需要的 .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/3130/37193109

posted @ 2022-08-31 09:38  哈哈哈来了啊啊啊  阅读(99)  评论(0编辑  收藏  举报