解码自然语言处理之 Transformers

news2024/11/30 8:59:19

自 2017 年推出以来,Transformer 已成为机器学习领域的一支重要力量,彻底改变了翻译和自动完成服务的功能。

最近,随着 OpenAI 的 ChatGPT、GPT-4 和 Meta 的 LLama 等大型语言模型的出现,Transformer 的受欢迎程度进一步飙升。这些引起了巨大关注和兴奋的模型都是建立在 Transformer 架构的基础上的。通过利用 Transformer 的力量,这些模型在自然语言理解和生成方面取得了显着的突破。

尽管有很多很好的资源可以解释Transformer的工作原理,但我发现自己处于这样的境地:我理解其机制如何在数学上工作,但发现很难直观地解释Transformer如何工作。

这篇博文[1]中,我的目标是在不依赖代码或数学的情况下提供Transformer如何工作的高级解释。我的目标是避免混淆技术术语以及与以前的架构进行比较。虽然我会尽量让事情变得简单,但这并不容易,因为Transformer相当复杂,但我希望它能让人们更好地直观地了解它们的作用以及如何做到这一点。

什么是Transformer?

Transformer 是一种神经网络架构,非常适合涉及处理序列作为输入的任务。也许在这种情况下,序列最常见的例子是句子,我们可以将其视为有序的单词集。

这些模型的目的是为序列中的每个元素创建数字表示;封装有关元素及其相邻上下文的基本信息。然后,所得的数字表示可以传递到下游网络,下游网络可以利用这些信息来执行各种任务,包括生成和分类。

通过创建如此丰富的表示,这些模型使下游网络能够更好地理解输入序列中的底层模式和关系,从而增强它们生成连贯且上下文相关的输出的能力。

Transformer 的主要优势在于它们能够处理序列内的远程依赖关系,并且效率很高;能够并行处理序列。这对于机器翻译、情感分析和文本生成等任务特别有用。

alt

什么是注意力 ?

也许 Transformer 架构使用的最重要的机制被称为注意力,它使网络能够理解输入序列的哪些部分与给定任务最相关。对于序列中的每个标记,注意力机制会识别哪些其他标记对于理解给定上下文中的当前标记很重要。在我们探索如何在变压器中实现这一点之前,让我们先从简单的开始,尝试理解注意力机制试图从概念上实现什么,以建立我们的直觉。

理解注意力的一种方法是将其视为一种用包含有关其相邻标记信息的嵌入替换每个标记嵌入的方法;而不是对每个标记使用相同的嵌入,而不管其上下文如何。如果我们知道哪些标记与当前标记相关,捕获此上下文的一种方法是创建这些嵌入的加权平均值,或者更一般地说,创建线性组合。

alt

让我们考虑一个简单的例子,说明如何查找我们之前看到的句子之一。在应用注意力之前,序列中的嵌入没有其邻居的上下文。因此,我们可以将单词 light 的嵌入可视化为以下线性组合。

alt

在这里,我们可以看到我们的权重只是单位矩阵。应用我们的注意力机制后,我们希望学习一个权重矩阵,以便我们可以用类似于以下的方式表达我们的光嵌入。

alt

这次,我们为与我们选择的标记序列中最相关的部分相对应的嵌入赋予了更大的权重;这应该确保在新的嵌入向量中捕获最重要的上下文。包含当前上下文信息的嵌入有时被称为上下文嵌入,这就是我们最终想要创建的。

注意力是如何计算的?

注意力有多种类型,主要区别在于用于执行线性组合的权重的计算方式。在这里,我们将考虑原始论文中介绍的缩放点积注意力,因为这是最常见的方法。在本节中,假设我们所有的嵌入都已进行位置编码。

回想一下,我们的目标是使用原始嵌入的线性组合来创建上下文嵌入,让我们从简单开始,假设我们可以将所需的所有必要信息编码到我们学习的嵌入向量中,而我们需要计算的只是权重。

为了计算权重,我们必须首先确定哪些标记彼此相关。为了实现这一点,我们需要建立两个嵌入之间的相似性概念。表示这种相似性的一种方法是使用点积,我们希望学习嵌入,以便较高的分数表明两个单词更相似。

alt

由于对于每个标记,我们需要计算其与序列中每个其他标记的相关性,因此我们可以将其概括为矩阵乘法,这为我们提供了权重矩阵;这通常被称为注意力分数。为了确保权重总和为 1,我们还应用了 SoftMax 函数。然而,由于矩阵乘法可以产生任意大的数字,这可能会导致 SoftMax 函数针对较大的注意力分数返回非常小的梯度;这可能会导致训练过程中梯度消失的问题。为了解决这个问题,在应用 SoftMax 之前,将注意力分数乘以缩放因子。

alt

现在,为了获得上下文嵌入矩阵,我们可以将注意力分数乘以原始嵌入矩阵;这相当于对我们的嵌入进行线性组合。

alt

虽然模型有可能学习足够复杂的嵌入来生成注意力分数和随后的上下文嵌入;我们试图将大量信息压缩到通常很小的嵌入维度中。

因此,为了让模型学习任务稍微容易一些,让我们引入一些更容易学习的参数!我们不直接使用嵌入矩阵,而是通过三个独立的线性层(矩阵乘法);这应该使模型能够“关注”嵌入的不同部分。如下图所示:

alt

从图像中,我们可以看到线性投影被标记为 Q、K 和 V。在原始论文中,这些投影被命名为 Query、Key 和 Value,据说是受到信息检索的启发。就我个人而言,我从未发现这个类比有助于我的理解,所以我倾向于不关注这一点;我遵循此处的术语是为了与文献保持一致,并明确这些线性层是不同的。

现在我们了解了这个过程是如何工作的,我们可以将注意力计算视为具有三个输入的单个块,这将被传递到 Q、K 和 V。

alt

当我们将相同的嵌入矩阵传递给 Q、K 和 V 时,这称为自注意力。

什么是多头注意力?

在实践中,我们经常并行使用多个自注意力模块,以使 Transformer 能够同时关注输入序列的不同部分——这称为多头注意力。

多头注意力背后的想法非常简单,多个独立自注意力块的输出连接在一起,然后通过线性层。该线性层使模型能够学习组合来自每个注意力头的上下文信息。

在实践中,每个自注意力块中使用的隐藏维度大小通常选择为原始嵌入大小除以注意力头的数量;保留嵌入矩阵的形状。

alt

Transformer 还由什么组成?

尽管介绍 Transformer 的论文被命名为“Attention is all you need”,但这有点令人困惑,因为 Transformer 的组件不仅仅是 Attention!

Transformer 还包含以下内容:

  • 前馈神经网络(FFN):一种两层神经网络,独立应用于批次和序列中的每个标记嵌入。 FFN 块的目的是将额外的可学习参数引入到转换器中,这些参数负责确保上下文嵌入是不同的且分散的。原始论文使用了 GeLU 激活函数,但 FFN 的组件可能会根据架构的不同而有所不同。
  • 层归一化:有助于稳定深度神经网络(包括 Transformer)的训练。它标准化每个序列的激活,防止它们在训练过程中变得太大或太小;这可能会导致与梯度相关的问题,例如梯度消失或爆炸。这种稳定性对于有效训练非常深的 Transformer 模型至关重要。
  • 跳过连接:与 ResNet 架构一样,残差连接用于缓解梯度消失问题并提高训练稳定性。

虽然 Transformer 架构自推出以来一直保持相当稳定,但层归一化块的位置可能会根据 Transformer 架构而变化。原始架构(现在称为后层规范)如下所示:

alt

如下图所示,最近架构中最常见的放置是预层规范,它将规范化块放置在跳跃连接内的自注意力和 FFN 块之前。

alt

Transformer 有哪些不同类型?

虽然现在有许多不同的Transformer 架构,但大多数可以分为三种主要类型。

编码器架构

编码器模型旨在产生可用于下游任务(例如分类或命名实体识别)的上下文嵌入,因为注意力机制能够关注整个输入序列;这是本文到目前为止所探讨的架构类型。最流行的纯编码器Transformer系列是 BERT 及其变体。

将数据传递给一个或多个Transformer块后,我们得到了一个复杂的上下文嵌入矩阵,表示序列中每个标记的嵌入。然而,要将其用于分类等下游任务,我们只需要做出一个预测。传统上,第一个标记被取出并通过分类头;通常包含 Dropout 和 Linear 层。这些层的输出可以通过 SoftMax 函数传递,将其转换为类概率。下面描述了一个示例。

alt

解码器架构

与编码器架构几乎相同,主要区别在于解码器架构采用屏蔽(或因果)自注意力层,因此注意力机制只能关注输入序列的当前和先前元素;这意味着生成的上下文嵌入仅考虑之前的上下文。流行的仅解码器型号包括 GPT 系列。

alt

这通常是通过用二元下三角矩阵屏蔽注意力分数并用负无穷大替换非屏蔽元素来实现的;当通过下面的 SoftMax 操作时,这将确保这些位置的注意力分数等于 0。我们可以更新之前的自注意力图,将其包括在内,如下所示。

alt

由于它们只能从当前位置和向后进行,因此解码器架构通常用于自回归任务,例如序列生成。然而,当使用上下文嵌入来生成序列时,与使用编码器相比,还有一些额外的考虑因素。下面显示了一个示例。

alt

我们可以注意到,虽然解码器为输入序列中的每个标记生成上下文嵌入,但在生成序列时,我们通常使用与最终标记相对应的嵌入作为后续层的输入。

此外,将 SoftMax 函数应用于 logits 后,如果不应用过滤,我们将收到模型词汇表中每个标记的概率分布;这可能非常大!通常,我们希望使用各种过滤策略来减少潜在选项的数量,一些最常见的方法是:

  • Temperature调整: Temperature是一个应用于 SoftMax 操作内部的参数,它会影响生成文本的随机性。它通过改变输出词的概率分布来确定模型输出的创造性或集中度。较高的 Temperature使分布变得平坦,使输出更加多样化。
  • Top-P 采样:此方法根据给定的概率阈值过滤下一个标记的潜在候选者数量,并根据高于此阈值的候选者重新分配概率分布。
  • Top-K 采样:此方法根据 Logit 或概率得分(取决于实现)将潜在候选者的数量限制为 K 个最有可能的标记

一旦我们改变或减少了下一个标记的潜在候选者的概率分布,我们就可以从中采样以获得我们的预测——这只是从多项分布中采样。然后将预测的标记附加到输入序列并反馈到模型中,直到生成所需数量的标记,或者模型生成停止标记;表示序列结束的特殊标记。

编码器-解码器架构

最初,Transformer 是作为机器翻译的架构提出的,并使用编码器和解码器来实现这一目标;在使用解码器转换为所需的输出格式之前,使用编码器创建中间表示。虽然编码器-解码器转换器已经变得不太常见,但 T5 等架构演示了如何将问答、摘要和分类等任务构建为序列到序列问题并使用这种方法来解决。

编码器-解码器架构的主要区别在于解码器使用编码器-解码器注意力,它在注意力计算期间同时使用编码器的输出(作为 K 和 V)和解码器块的输入(作为 Q)。这与自注意力形成对比,自注意力对于所有输入使用相同的输入嵌入矩阵。除此之外,整体生成过程与使用仅解码器架构非常相似。

我们可以将编码器-解码器架构可视化,如下图所示。在这里,为了简化图形,我选择描绘原始论文中所示的变压器的后层范数变体;其中层规范层位于注意块之后。

alt

希望上面的描述对您理解 Transformer 有所帮助。

Reference

[1]

Source: https://towardsdatascience.com/de-coded-transformers-explained-in-plain-english-877814ba6429

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode刷题(数据结构与算法)】:平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 输入:root [3,9,20,null,null,15,7] 输出:true 输入:roo…

SpringMVC全注解开发

在学习过程中,框架给我们最大的作用,就是想让开发人员尽可能地只将精力放在具体业务功能的实现之上,而对于各种映射关系的配置,统统由框架来进行完成,由此,注解就很好的将映射功能进行实现,并且…

CentOS-7网卡重启后关闭的解决方法

第一步查找网卡: ip addr 如下图: 于是发现网卡eth0。 第二步进入网卡配置目录并进行配置: cd /etc/sysconfig/network-scriptsvim ifcfg-eth0 第三步改配置如下图: 然后每次重启后网卡会自动启动。

网络基础2(1)

HTTP 1.应用层协议2.send和recv单独使用不安全3.URL4.urlencode和urldecode5.HTTP协议格式6.HTTP中的常见请求方法POST&&GET7.HTTP的状态码8.HTTP常见Header 🌟🌟hello,各位读者大大们你们好呀🌟🌟 &#x1f6…

【算法|前缀和系列No.1】牛客网 DP34 【模板】前缀和

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【牛客网刷题】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希…

Opencv——颜色模型+通道分离与合并

视频加载/摄像头调用 VideoCapture允许一开始定义一个空的对象 VideoCapture video VideoCapture(const String &filename,int apiPreferenceCAP_ANY) filename:读取的视频文件或者图像序列名称 apiPreference:读取数据时设置的属性,例如编码格式、是否调用Op…

罗技鼠标接收器丢失或损坏后用另一个接收器配对的方法

本文介绍罗技鼠标在丢失、损坏其自身原有的接收器后,将另一个新的接收器与原有鼠标相互配对的方法。 在开始之前,大家需要首先查看两个内容:首先是原有的鼠标——大家需要查看自己的鼠标(罗技键盘也是同样的操作)底部&…

【动态规划】309. 买卖股票的最佳时机含冷冻期、 714. 买卖股票的最佳时机含手续费

提示:努力生活,开心、快乐的一天 文章目录 309. 买卖股票的最佳时机含冷冻期💡解题思路🤔遇到的问题💻代码实现🎯题目总结 714. 买卖股票的最佳时机含手续费💡解题思路🤔遇到的问题&…

MybatisPlus 从零开始 全面学习!

引入 本文以下将mybatisPlus简称为mp 首先注意: mybatisPlus不是mybatis 的替代品,而是增强mybatis的技术. 只做增强不做改变, 引入他不会对现有工程产生影响. 快速入门 基本步骤 以下为mapper例子: 要继承这个BaseMapper类, 并在泛型括号中 标注好要操作的类 public interf…

【题解】[NOIP2015]扫雷游戏(Java C++)

题目描述 见 P2670 [NOIP2015 普及组] 扫雷游戏 - 洛谷。 前置知识 无。 题目分析 只需要统计每一个格子周围 8 个格子的地雷数量即可。 重点是处理边界情况,比如左上角,有五个格子不在数组范围内,需要特殊处理。 为了避免思路混乱&a…

div盒子放在页面正中间,添加旋转动画的时候,盒子向右下偏移

一、问题代码(核心部分) //盒子定位在页面正中心 #spinner { position: absolute; left: 50%; top: 50%; border: #2ecc71 solid 1px; transform: translate(-50%, -50%); animation: rotate 5s linear 2s forwards; transform-origin: 50% 50%; } keyfr…

hadoop组成

在hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源调度,耦合性较大; 在hadoop2.x时代,新增了yarn,主要负责资源的调度,MapReduce仅负责运算; 在hadoop3.x时代,在组成上没有变化;

【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:vue要做权限管理该怎么做…

社区活动|Apollo开发者城市活动·长沙站来啦!

Apollo开发者城市活动长沙站 2023/10/22 🙋想亲身乘坐无人车,感受自动驾驶技术的魅力吗? 🙋想与技术大咖面对面,了解自动驾驶的历史与原理吗? 🙋想与本地开发者交流心得,实现自动…

springboot自动配置原理面试题(自用)

springboot自动装配主要是基于注解编程和约定大于配置的思想设计 核心步骤: 1 组件必须包含configuration并声明为bean注解返回注入到IOC容器中 2 第三方jar包,根据/meta-inf/目录下增加spring.factories文件加载配置文件中的内容 3 springboot获取到…

游戏开发这么久没见过github-lfs-居然不能下载图片的,这就让你见到了解决方法

以前很少见到github上有游戏的整体仓库,还觉得是游戏人都不爱分享 git 是很好的分布式代码管理,但对于大部分的“”云资源“”管理,git的很多原生功能并不擅长 现在想想,其实也合理,基本只要是手游换皮游戏&#xff…

注释的两难之道:程序员的反思

文章目录 代码即注释?注释的艺术1. 注释要言简意赅2. 注释的时机3. 注释内容4. 避免无意义的注释5. 维护注释 如何看待注释? 🎉欢迎来到Java学习路线专栏~注释的两难之道:程序员的反思 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f3…

JDBC批量插入数据

PreparedStatement的一些好处 1.PreparedStatement可以防止SQL注入 2.PreparedStatement可以操作Blob数据,Statement做不到. 3.PreparedStatement可以实现更高效的批量操作 演示PreparedStatement批量操作 在数据库操作中 update,delete后面如果没有条件,本身就可以就可以…

基于html5开发的Win12网页版,抢先体验

据 MSPoweruser 报道,Windows 11虽然刚刚开始步入正轨,但最新爆料称微软已经在开启下一个计划,Windows 12 的开发将在 去年3 月份开始。德国科技网站 Deskmodder.de 称,根据内部消息,微软将在 2022年3 月开始开发 Wind…

02_单片机及开发板介绍

单片机简介 单片机,又称为微控制器(Microcontroller),是一种集成了微处理器核心、存储器、输入/输出接口及各种功能模块的集成电路芯片。它通常由中央处理器(CPU)、存储器、输入/输出接口以及各种外设组成&…