现代 NLP:详细概述,第 1 部分:transformer


阿比吉特·罗伊
·

一、说明

        近五年来,随着 BERT 和 GPT 等思想的引入,我们在自然语言处理领域取得了巨大的成就。在本文中,我们的目标是逐步深入研究改进的细节,并了解它们带来的演变。

二、关注就是你所需要的

        2017 年,来自 Google Brains 的 Ashish Vaswani 与多伦多大学的同事一起提出了一种用于序列到序列任务(例如神经语言翻译和释义)的想法,该想法不同于现有的按时间步长的单字方法由 LSTM 和 RNN 实现。

        检测到的 RNN 现有架构存在的问题是:

  1. 由于我们一次添加一个单词,在长序列的情况下,很难保留信息。在使用 RNN 和 LSTM 的编码器-解码器结构模型中,隐藏向量从一个时间戳传递到另一个时间戳。然后,在最后一步中,我们将最终的上下文向量传递给解码器。与序列的前几个单词相比,传递给解码器的隐藏上下文向量对最后几个单词的影响更大,因为信息会随着时间的推移而消失。
  2. 为了解决第一点提到的问题,引入了注意力机制。这表明在解码时,我们单独关注输入序列中的单词。输入序列中的每个单词都会获得一个特定的注意力权重向量,然后将该向量乘以单词向量以创建向量的加权和。但问题是,由于我们一次一步地执行此操作,计算时间太长,而且也没有完全消除信息丢失。

2.1 想法

        变形金刚建议使用一种称为自注意力的概念。该模型将一次接收整个句子,然后使用自注意力来决定句子中其他单词在当前单词上下文中的重要性。因此,与常设循环架构相比,它具有以下优点:

  1. 在检测权重时,我们已经拥有了所有单词,因此不存在信息丢失的可能性,而且我们从双方都获得了上下文。也就是说,我们了解所选单词之前的单词和后面的单词,这有助于形成更好的上下文,而不是循环结构(Bi-LSTM 的情况除外)。
  2. 由于我们可以获得完整的句子,并且我们需要找到句子中每个单词的所有其他单词的重要性,因此我们可以对所有单词并行执行此操作。这节省了大量的处理时间并充分利用处理能力。

2.2 自注意力:构建块

        自注意力机制试图找出其他单词对于特定单词的重要性,然后创建一个组合的上下文向量来表示该单词。基本上,这意味着,如果你在句子中选择一个单词,它与句子中其他单词的相关程度有多少?众所周知,单词定义了句子的上下文,而单词的含义往往取决于上下文。这是一种找出句子上下文和相关单词的方法。

单词及其与其他单词的对应重要性

        为了实现这一点,它对句子中的每个输入单词嵌入 (xi) 使用三个向量,即查询 (Qi)、键 (Ki) 和值 (Vi)。根据论文,嵌入向量 x 的长度建议为 512。为了获得这些向量,首先定义三个权重矩阵:Wq、Wv 和 Wk。我们将每个输入词向量 Xi 与相应的权重矩阵相乘,以获得给定词的键、查询和值向量。

Qi = Xi * Wq

Vi = Xi * Wv

Ki = Xi * Wk

        为了找出单词 xi 在单词 xj 的上下文中的重要性,我们需要找到单词 xi 对应的关键向量 Ki 与单词 xj 的查询向量 Qj 的标量点积。然后点积结果除以向量 Ki 维度的平方根,即 8,因为论文中给出的 k 维度为 64。正如论文所建议的,如果我们不除法,点积值就会太大,这会导致 softmax 值变得太陡,从而产生不利于平滑学习的不良梯度。

向量计算:其中Xi是输入词的嵌入,W是权重矩阵。

        一旦我们找出了给定单词的所有单词的重要性,我们就对所有单词的结果使用 softmax。softmax 提供了所有单个单词的最终重要性,使得它们的总和为 1。接下来是单词的值 Vi 向量,我们将向量 Vi 与其相应的重要性相乘。直觉是创建单词表示的值向量,而重要性因素则为主题词的上下文赋予权重。如果一个单词与上下文单词没有关系,它的重要性值将非常非常低,因此最终的乘积向量将非常低,我们可以忽略它对任务的重要性。最后,我们取所有这些加权值向量的总和来创建该特定单词的最终上下文向量,该向量是我们从注意力块接收到的。

一个词的注意力计算

2.3 多头注意力

        我们已经看到了注意力如何工作并为每个单词产生上下文向量。本文的作者使用了多头注意力,以获得无偏的复合上下文向量。他们使用了8个这样的注意力头,为一个单词提供了8个不同的上下文向量。这个想法是,因为每个内部重量矩阵(即WQ,WV和WK)都是随机初始化的,因此每个头部初始化点的变化可能有助于捕获上下文向量中的一系列不同特征。

        最后,对于每个单词,我们都有8个上下文向量,我们将它们串联在一起以获取给定单词的代表性上下文向量。

所有关注的头脑都聚在一起

2.4 自我发挥的障碍:将所有这些结合在一起

        到目前为止,我们讨论过的任何内容都是基于句子中的一个特定单词,但是我们确实需要考虑句子中的所有单词并使系统平行。

        本文建议我们使用长度512的嵌入来表示句子中的每个单词。现在,我们已经知道,对于NLP任务,我们通常需要使用零盖来均衡句子长度。接下来,我们彼此堆叠所有512维词向量,并且由于句子中有固定的单词,我们会得到一个固定的维度2D向量来表示整个句子,这是通过整个注意力发送的。机制。

整体工作

一旦我们获得了所有单词的组合上下文向量,它就会乘以另一个权重矩阵,该矩阵集中学习并降低向量的维度。

三、变压器:体系结构

变压器架构

        变压器还遵循标准编码器架构体系结构。为了简单,更好的学习,单词向量和层的输出的维度都保持在512。模型的学习是以自动回归的方式完成的,即,单词是一个一个人生成的,对于(t+1)单词的预测,我们将t字的输出附加到输入中,然后将其馈送到模型。

        编码器:作者使用了带有2个子层的模块。第一层包含多头注意,我们在上面已经讨论过,第二个子层是完全连接的进料层。前馈层由2个连接的正常神经网络层组成。进料前层的输入和输出为尺寸512,但内部维度为2048,即,内部层中的节点数为2048。完全连接的图层使用Relu激活。作者还使用了加法和归一化层来平滑学习,并避免了我们在几个NLP和计算机视觉案例中看到的信息丢失。

因此,方程变为

output = norm(x + f(x)),其中x是输入,f()是层的转换,可以是前馈或注意块。

编码器块中有6个这样的模块。

        解码器:这与编码器块非常相似。这也有 6 个模块和类似的架构。唯一的区别是,除了已经存在的 2 个子层之外,解码器块还引入了第三个子层,这也是一个注意层,但输入被屏蔽,因此模型无法使用第 (t+1) 个时间戳单词作为输入,同时预测第 t 个单词。没有掩码的多头注意力子层从相应层的编码器获取值。因此,该层接收来自前一个解码器层和相应编码器层的输入。

掩蔽是这样实现的

        据作者称,模型在训练时以 3 种不同的方式使用了注意力层。正如我们所知,我们将所有单词的三个向量(Key、Query 和 Value)输入到注意力块中,作者使用它来更好地训练模型。

        选项 1:在这种情况下,查询来自前一个解码器层,内存键和值来自编码器的输出。这允许解码器中的每个位置关注输入序列中的所有位置。

        选项 2:在这种情况下,值和查询来自编码器中前一层的输出。编码器中的每个位置可以关注编码器上一层中的所有位置。

        选项 3:在这种情况下,值和查询来自解码器中前一层的输出。解码器中的每个位置可以参与解码器前一层中的所有位置。现在,这一点带来了屏蔽多头注意力的重要性,因为模型在 t+1 时看不到单词,所以保留了自回归属性。

最后,作者使用了一个线性变换层,然后是一个 softmax 层。

四、位置编码

        除了模型之外,本文还引入了位置编码的概念。问题是,由于本文没有使用循环网络或卷积网络,也不是基于时间步长的,作者认为应该有一些东西来表示单词的位置,因为它在表达含义中起着重要作用的句子。

        为了解决这个问题,作者提出了两种估计。

        其中 pos 是单词的位置,i 是维度,dmodel = 512,输入维度大小。编码的大小也保持在 512 维,因此可以轻松地将它们添加到词嵌入中。作者选择了这些特定函数,因为这些函数在一定偏移量后给出相同值的倍数,因此可以表示为线性函数。

五、结论

        我们已经了解了变压器的工作原理;接下来,该系列的第二个故事讲述 GPT。我们还将了解其他演变及其实现。

至此,祝您阅读愉快!!!!

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

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

相关文章

CSRF(Pikachu)

CSRF(get) 首先我们先登录账号 admin 密码是;123456 点击修改个人信息 用F12或者BP 抓包看看我们的url 那么构成的CSRF攻击payload为http://pikachu.shifa23.com/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sexboy&phonenum”手机…

美团开店宝集成策略:API连接助力用户运营与客服系统

无代码开发与美团开店宝API的协同作用 随着电子商务的快速发展,商家们迫切需要一种既能提高效率又能降低技术门槛的电商管理方案。美团开店宝API提供了这样一种解决方案,特别是当与无代码开发结合时,它的优势更加明显。无代码开发免去了商家…

44.常用shell之 export - 设置或显示环境变量 的用法及衍生用法

export 是一个在类 Unix 系统的 shell 中常用的命令,用于设置或显示环境变量。环境变量是在操作系统层面定义的,用于控制程序的行为和访问系统资源。以下是 export 命令的基本用法和一些衍生用法的示例: 基本用法 设置环境变量: export VARv…

Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档

1、API 接口文档的几种规范格式 前后端分离项目中,使用规范、便捷的API接口文档工具,可以有效提高团队工作效率。 标准化的API文档的益处: 允许开发人员以交互式的方式查看、测试API接口,以方便使用将所有可暴露的API接口进行分…

普冉PY32系列(十四) 从XL2400迁移到XL2400P

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…

React快速入门之组件

组件 文件&#xff1a;Profile.js export default function Profile({isPacked true&#xff0c;head,stlyeTmp,src,size 80}) {if (isPacked) {head head " ✔";}return (<div><h1>{head}</h1><imgsrc{src}alt"Katherine Johnson&q…

cmake 入门笔记

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/dUmsmiwzULQKmjfFILDdag 1. cmake 是什么&#xff1f; 这些年大型 C/C 工程都纷纷转到了 cmake 环境下&#xff0c;那么这个工具到底有什么魅力吸引着…

电商数据分析-02-电商业务介绍及表结构

参考 电商业务简介 大数据项目之电商数仓、电商业务简介、电商业务流程、电商常识、业务数据介绍、电商业务表、后台管理系统 举个例子:&#x1f330; 1.1 电商业务流程 电商的业务流程可以以一个普通用户的浏览足迹为例进行说明&#xff0c;用户点开电商首页开始浏览&…

Guava的Joiner的日常使用

具体使用参考官方文档&#xff1a;https://github.com/google/guava/wiki/StringsExplained#joiner//1 处理&#xff0c;为null的值&#xff0c;替换 String join Joiner.on("_").useForNull("*").join("1", "2", 90, 100,110,109,20…

shell 编程中内置的变量(冷门又好用)

简介 分别盘点一下 shell 中的内置变量&#xff0c;真的巨好用&#xff01;&#xff01;&#xff01;包括&#xff1a;环境变量类、shell 变量类、终端设置类和其他一些变量。 常用的内置变量目录如下 1. 环境变量类 $MACHTYPE&#xff1a;机器类型 $OSTYPE&#xff1a;操作…

JVM初识-----01章

一.虚拟机与java虚拟机的区别以及共同点 1.虚拟机&#xff08;Virtual Machine&#xff0c;简称VM&#xff09; 是一种能够在物理计算机上模拟一台完整的计算机系统的软件。它运行在宿主操作系统之上&#xff0c;可以提供一个独立的运行环境&#xff0c;使得在不同的操作系统上…

【深度学习-目标检测】03 - Faster R-CNN 论文学习与总结

论文地址&#xff1a;Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks 论文学习 1. 摘要与引言 研究背景与挑战&#xff1a;当前最先进的目标检测网络依赖于 区域提议&#xff08;Region Proposals&#xff09;来假设目标的位置&#xff0c…

CentOS系统环境搭建(二十六)——使用nginx在无域名情况下使用免费证书设置https

centos系统环境搭建专栏&#x1f517;点击跳转 文章目录 使用nginx在无域名情况下使用免费证书设置https1.获取SSL证书1.1 生成SSL密钥1.2 生成SSL证书1.3 重命名密钥文件 2.nginx配置https2.1 放证书2.2 修改nginx.conf文件2.2.1 将80端口重定向到4432.2.2 端口443配置ssl证书…

如何处理uni-app中的跨平台差异

在uni-app中&#xff0c;可以通过条件编译和平台判断来处理跨平台差异代码。具体步骤如下&#xff1a; 在uni-app项目的根目录下&#xff0c;找到名为manifest.json的文件&#xff0c;这是uni-app的配置文件。 在manifest.json文件中&#xff0c;可以使用条件编译指令来处理不…

Upload-Labs-Linux

题目 1.打开靶机 随便上传一个图片&#xff0c;查看get请求发现/upload/XXX.jpg 2.创建一个脚本文件 命名为flag.php.jpg,并上传 脚本文件内容&#xff1a; <?php eval($_POST[1234])?> 3上传后复制文件get请求的链接并打开蚁剑 连接密码为123 双击链接 4&#xff…

我在 VSCode 插件里接入了 ChatGPT,解决了Bug无法定位的难题

作为一名软件开发者&#xff0c;我时常面临着代码中Bug的定位和解决问题。这个过程往往既费时又充满挑战。然而&#xff0c;最近我在我的VSCode插件中接入了ChatGPT&#xff0c;这个决定彻底改变了我处理Bug的方式。 Bug&#xff1a;开发者的噩梦 在开发过程中&#xff0c;遇…

leetcode 6. N 字形变换(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public String convert(String s, int numRows) {if(numRows 1) {return s;}int lengths.length();StringBuilder retnew StringBuilder();//获取…

5.2 显示窗口的内容(二)

三,显示器几何形状管理 只有显示管理器被允许更改显示器的几何形状。窗口管理器也是显示管理器。 3.1 当显示器显示其自身内容时 当显示器显示其自身内容时,适用以下属性: 显示属性描述SCREEN_PROPERTY_PROTECTION_ENABLE表示显示目标窗口是否需要内容保护。只要显示器上…

Flink电商实时数仓(六)

交易域支付成功事务事实表 从topic_db业务数据中筛选支付成功的数据从dwd_trade_order_detail主题中读取订单事实数据、LookUp字典表关联三张表形成支付成功宽表写入 Kafka 支付成功主题 执行步骤 设置ttl&#xff0c;通过Interval join实现左右流的状态管理获取下单明细数据…

zookeeper基本使用

目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…