【变形金刚02】注意机制以及BERT 和 GPT

news2024/12/25 12:21:52

 

一、说明

        我已经解释了什么是注意力机制,以及与转换器相关的一些重要关键字和块,例如自我注意、查询、键和值以及多头注意力。在这一部分中,我将解释这些注意力块如何帮助创建转换器网络,注意、自我注意、多头注意、蒙面多头注意力、变形金刚、BERT 和 GPT。

二、内容:

  1. RNN 的挑战以及转换器模型如何帮助克服这些挑战(在第 1 部分中介绍)
  2. 注意力机制 — 自我注意、查询、键、值、多头注意(在第 1 部分中介绍)
  3. 变压器网络
  4. GPT 的基础知识(将在第 3 部分中介绍)
  5. BERT的基础知识(将在第3部分中介绍)

三. 变压器网络

        论文 — 注意力就是你所需要的一切 (2017)

图1.The Transformer Network(来源:图片来源于原文)

        图 1 显示了变压器网络。这个网络已经取代了RNN,成为NLP甚至计算机视觉(视觉变压器)的最佳模型。

        网络包含两部分 — 编码器和解码器。

        在机器翻译中,编码器用于对初始句子进行编码,解码器用于生成翻译后的句子。转换器的编码器可以并行处理整个句子,使其比RNN更快,更好 - RNN一次处理句子的一个单词。

3.1 编码器块

图2.变压器网络的编码器部分(来源:图片来自原文)

        编码器网络从输入开始。在这里,整个句子立即被喂食。然后将它们嵌入到“输入嵌入”块中。然后将“位置编码”添加到句子中的每个单词中。这种编码对于理解句子中每个单词的位置至关重要。如果没有位置嵌入,模型会将整个句子视为一个装满单词的袋子,没有任何序列或含义。

详细地:

3.1.1 输入嵌入 

        — 句子中的单词“dog”可以使用嵌入空间来获取向量嵌入。嵌入只是将任何语言中的单词转换为其向量表示。示例如图 3 所示。在嵌入空间中,相似的单词具有相似的嵌入,例如,单词“cat”和单词“kitty”在嵌入空间中会非常接近,而单词“cat”和“emotion”会在空间中落得更远。

图3.输入嵌入(来源:作者创建的图像)

3.1.2 位置编码

        不同句子中的单词可以有不同的含义。例如,单词 dog in a.我养了一只可爱的狗(动物/宠物 - 位置 5)和 b。你真是一条懒狗!(无价值-位置4),有不同的含义。为了帮助进行位置编码。它是一个向量,根据单词在句子中的上下文和位置提供信息。

        在任何句子中,单词一个接一个地出现,具有重要意义。如果句子中的单词混乱,那么句子将没有意义。但是当转换器加载句子时,它不会按顺序加载,而是并行加载它们。由于变压器架构在并行加载时不包括单词的顺序,因此我们必须明确定义单词在句子中的位置。这有助于转换器理解句子中的一个单词在另一个单词之后。这就是位置嵌入派上用场的地方。这是一种定义单词位置的矢量编码。在进入注意力网络之前,此位置嵌入被添加到输入嵌入中。图 4 给出了输入嵌入和位置嵌入的直观理解,然后再将其输入到注意力网络中。

图4.直观理解位置嵌入(来源:作者创建的图像)

        有多种方法可以定义这些位置嵌入。例如,在原始论文《注意力是你所需要的一切》中,作者使用交替的正弦和余弦函数来定义嵌入,如图5所示。

图5.原论文中使用的位置嵌入(来源:原论文图片)

        尽管此嵌入适用于文本数据,但此嵌入不适用于图像数据。因此,可以有多种方式嵌入对象的位置(文本/图像),并且可以在训练过程中固定或学习它们。基本思想是,这种嵌入允许转换器架构理解单词在句子中的位置,而不是通过混淆单词来弄乱含义。

在单词/输入嵌入和位置嵌入完成后,嵌入然后流入编码器最重要的部分,其中包含两个重要块 - “多头注意力”块和“前馈”网络。

3.1.3 多头注意力

        这是魔术发生的主要块。要了解多头注意力,请访问此链接 — 2.4 多头注意力。

        作为输入,该块接收一个包含子向量(句子中的单词)的向量(句子)。然后,多头注意力计算每个位置与矢量其他位置之间的注意力。

图6.缩放点积注意力(来源:图片来自原始论文)

        上图显示了缩放的点积注意力。这与自我注意完全相同,增加了两个块(比例和蒙版)。要详细了解Sef-Attention,请访问此链接 — 2.1 自我关注。

        如图 6 所示,缩放注意力完全相同,只是它在第一个矩阵乘法 (Matmul) 之后增加了一个刻度。

        缩放比例如下所示,

        缩放后的输出将进入遮罩层。这是一个可选层,对机器翻译很有用。

图7.注意力块(来源:作者创建的图像)

        图 7 显示了注意力块的神经网络表示。词嵌入首先传递到一些线性层中。这些线性层没有“偏差”项,因此只不过是矩阵乘法。其中一个层表示为“键”,另一个表示为“查询”,最后一个层表示为“值”。如果在键和查询之间执行矩阵乘法,然后规范化,我们得到权重。然后将这些权重乘以值并相加,得到最终的注意力向量。这个块现在可以在神经网络中使用,被称为注意力块。可以添加多个这样的注意力块以提供更多上下文。最好的部分是,我们可以获得梯度反向传播来更新注意力块(键、查询、值的权重)。

        多头注意力接收多个键、查询和值,通过多个缩放的点积注意力块馈送它,最后连接注意力以给我们一个最终输出。如图 8 所示。

图8.多头注意力(来源:作者创建的图像)

        更简单的解释:主向量(句子)包含子向量(单词)——每个单词都有一个位置嵌入。注意力计算将每个单词视为一个“查询”,并找到一些与句子中其他一些单词对应的“”,然后采用相应“”的凸组合。在多头注意力中,选择多个值、查询和键,以提供多重关注(更好的单词嵌入与上下文)。这些多个注意力被连接起来以给出最终的注意力值(来自所有多个注意力的所有单词的上下文组合),这比使用单个注意力块要好得多。

        在简单的单词,多头注意力的想法是采用一个单词嵌入,将其与其他一些单词嵌入(或多个单词)结合使用注意力(或多个注意力)来为该单词产生更好的嵌入(嵌入周围单词的更多上下文)。

        这个想法是计算每个查询的多个注意力,具有不同的权重。

3.1.4 添加和规范和前馈

        下一个块是“添加和规范”,它接收原始单词嵌入的残差连接,将其添加到多头注意力的嵌入中,然后将其归一化为零均值和方差 1。

        这被馈送到一个“前馈”块,该块的输出端也有一个“添加和规范”块。

        整个多头注意力和前馈块在编码器块中重复n次(超参数)。

3.2 解码器块

图9.变压器网络的解码器部分(Souce:图片来自原始论文)

        编码器的输出又是一系列嵌入,每个位置一个嵌入,其中每个位置嵌入不仅包含原始单词在该位置的嵌入,还包含有关其他单词的信息,这些信息是它使用注意力学习的。

        然后将其馈送到变压器网络的解码器部分,如图9所示。解码器的目的是产生一些输出。在论文《注意力是你所需要的一切》中,这个解码器被用于句子翻译(比如从英语到法语)。因此,编码器将接收英语句子,解码器将其翻译成法语。在其他应用程序中,网络的解码器部分不是必需的,因此我不会过多地阐述它。

        解码器块中的步骤 —

1.在句子翻译中,解码器块接收法语句子(用于英语到法语翻译)。像编码器一样,这里我们添加一个词嵌入和一个位置嵌入,并将其馈送到多头注意力块。

2.自注意力块会为法语句子中的每个单词生成一个注意力向量,以显示句子中一个单词与另一个单词的相关性。

 3.然后将法语句子中的注意力向量与英语句子中的注意力向量进行比较。这是英语到法语单词映射发生的部分。

4.在最后几层中,解码器预测英语单词到最佳可能的法语单词的翻译。

5.整个过程重复多次,以获得整个文本数据的翻译。

用于上述每个步骤的模块如图 10 所示。

图 10.不同解码器块在句子翻译中的作用(来源:作者创建的图像)

解码器中有一个新块 - 蒙面多头注意力。所有其他块,我们之前已经在编码器中看到过。

3.2.1Mask多头注意力

        这是一个多头注意力块,其中某些值被屏蔽。屏蔽值的概率为空或未选中。

        例如,在解码时,输出值应仅取决于以前的输出,而不依赖于未来的输出。然后我们屏蔽未来的输出。

3.3 结果和结论

图 11.结果(来源:原始论文图片)

        在论文中,将英语到德语和英语到法语之间的语言翻译与其他最先进的语言模型进行了比较。BLEU是语言翻译比较中使用的度量。从图 11 中,我们看到大型转换器模型在这两个翻译任务中都获得了更高的BLEU分数。他们还显着改善的是培训成本。

        总之,变压器模型可以降低计算成本,同时仍然获得最先进的结果。

        在这一部分中,我解释了变压器网络的编码器和解码器块,以及如何在语言翻译中使用每个块。在下一部分也是最后一部分(第 3 部分),我将讨论一些最近变得非常有名的重要变压器网络,例如 BERT(来自变压器的双向编码器表示)和 GPT(通用变压器)。

四、引用 

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Proceedings of the 31st International Conference on Neural Information Processing Systems (NIPS’17). Curran Associates Inc., Red Hook, NY, USA, 6000–6010.

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

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

相关文章

Mysql中如果建立了索引,索引所占的空间随着数据量增长而变大,这样无论写入还是查询,性能都会有所下降,怎么处理?

索引所占空间的增长确实会对MySQL数据库的写入性能和查询性能造成影响,这主要是由于索引数据过多时会导致磁盘I/O操作变得非常频繁,从而使性能下降。为此,可以采取以下几种方式来减缓这种影响: 1. 限制索引的大小:可以…

【已成功解决】使用vpn/代理后无法正常上网/无法正常访问网站

文章目录 一、问题描述二、解决步骤三、原因分析 一、问题描述 很多同学在学习访问学校提供的资源时或者一些小伙伴在公司办公时需要使用VPN。但是当我们关闭VPN后,却发现没有办法正常连接到互联网了。 可以尝试以下方法解决,至于导致这种情况发生的原可…

SpringBoot携带Jdk绿色部署项目

文章目录 SpringBoot携带Jdk绿色部署运行项目1. 实现步骤2. 自测项目文件目录及bat文件内容,截图如下:2-1 项目文件夹列表:2-2. bat内容 SpringBoot携带Jdk绿色部署运行项目 说明: 实际应用的不方便场景:1. 实际项目…

Vue.js2+Cesium1.103.0 十、加载 Three.js

Vue.js2Cesium1.103.0 十、加载 Three.js Demo ThreeModel.vue <template><divid"three_container"class"three_container"/> </template><script> /* eslint-disable eqeqeq */ /* eslint-disable no-unused-vars */ /* eslint…

Python爬虫-抓取的目标数据为#x开头,怎么解决?

前言 本文是该专栏的第4篇,后面会持续分享python爬虫案例干货,记得关注。 在做爬虫项目的时候,有时候抓取的平台目标数据为&#x开头,如下图所示: 浏览器显示的正常数据,但通过爬虫协议获取到的网页源码数据却是以&#x开头的隐藏数据,遇到这种情况,爬虫需要怎么处…

基于扩频的数字视频水印嵌入和检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ................................................................. for j 1:length(attens…

Google FixMatch:SOTA 在半监督学习基准测试中的性能

作为当前计算机视觉应用的首选&#xff0c;深度网络通常通过监督学习&#xff08;一种需要标记数据集的方法&#xff09;来实现其强大的性能。尽管人工智能多年来取得了许多成就和进步&#xff0c;但标记数据的关键任务仍然落在人类专家身上。他们很难满足那些数据饥渴的深度网…

智慧工地管理平台源码,Spring Cloud +Vue+UniApp框架开发

智慧工地源码 智慧工地云平台源码 智慧建筑源码 互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;从施工现场源头抓起&#xff0c;最大程度的收集人员、安全、环境、材料等关键业务数据&#xff0c;依托物联网、互联网&#xff0c;建立云端大数据管…

【C++】透过STL源码深度剖析及模拟实现vector

鉴于读者的响应&#xff0c;打算将文章拆分一下&#xff0c;方便观看&#xff0c;基本接口可看 深入浅出STL之vector类 一、源码引入 以下我所介绍的都是基于【SGI】版本的STL&#xff0c;对源码有兴趣的同学可以去看看 侯捷老师的《STL源码剖析》 然后呢我们就去调出【vector…

引用.so库,JNI使用方法

1、先将.so库放在libs下&#xff1a; 2、在工程模块下 的build.gradle配置&#xff1a; android的defaultConfig配置 不同的系统平台看项目需要 3、生成与so库中c文件的jni方法的一样包名的实体类以及方法 如C文件暴露的方法&#xff1a; 生成的类和包名对应为&#xff1a; …

Python-OpenCV中的图像处理-模板匹配

Python-OpenCV中的图像处理-模板匹配 模板匹配单对象的模板匹配多对象的模板匹配 模板匹配 使用模板匹配可以在一幅图像中查找目标函数&#xff1a; cv2.matchTemplate()&#xff0c; cv2.minMaxLoc()模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。 OpenCV 为我们提…

Fast SAM与YOLOV8检测模型一起使用实现实例分割

Fast SAM与YOLOV8检测模型一起使用 部分源代码在结尾处可获取 晓理紫 1 使用场景 实例分割数据集的获取要比检测数据的获取更加困难&#xff0c;在已有检测模型不想从新标注分割数据进行训练但是又想获取相关物体的mask信息以便从像素级别对物体进行操作&#xff0c;这时就可以…

【JavaEE进阶】SpringBoot项目的创建

文章目录 一. SpringBoot简介1. 什么是SpringBoot?2. SpringBoot的优点 二. SpringBoot项目创建1. 使用IDEA创建2. 使用网页创建SpringBoot项目 三. 运行SpringBoot项目 一. SpringBoot简介 1. 什么是SpringBoot? Spring Boot 是一个用于快速构建基于 Spring 框架的应用程序…

使用 PyTorch 逐步检测单个对象

一、说明 在对象检测任务中&#xff0c;我们希望找到图像中对象的位置。我们可以搜索一种类型的对象&#xff08;单对象检测&#xff0c;如本教程所示&#xff09;或多个对象&#xff08;多对象检测&#xff09;。通常&#xff0c;我们使用边界框定义对象的位置。有几种方法可以…

概率论与数理统计:第四章:随机变量的数字特征

文章目录 Ch4. 随机变量的数字特征1. 数学期望E(X)(1)数学期望的概念1.离散型①一维离散型随机变量X的数学期望&#xff1a; E X EX EX②一维离散型随机变量的函数的期望&#xff1a; E [ g ( X ) ] E[g(X)] E[g(X)]③二维离散型随机变量的函数的期望&#xff1a; E [ g ( X , …

基于CentOS 7 部署社区版Haproxy

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件&#xff0c;是一款具 备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支 持正则表达式及web状态统计。 目录 1…

23款奔驰AMG GT50升级原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶&#xff0c;可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出&#xff0c;并且在关闭后能够立刻散去。车内气味不会永久改变&#xff0c;香氛…

nacos原理

不要纠结于具体代码&#xff0c;随着版本变化源码多变&#xff0c;要学习的是基本原理和思想&#xff1b; Nacos注册中心实现原理分析 Nacos架构图 其中分为这么几个模块&#xff1a; Provider APP&#xff1a;服务提供者。 Consumer APP&#xff1a;服务消费者。 Name Serv…

MiniPaint:在线图像编辑利器【在线PS】

MiniPaint在线图像编辑器使用 HTML5 实现图像的在线创建与编辑&#xff0c;在线PS&#xff0c;支持超过40种效果滤镜&#xff0c;无需本地安装&#xff0c;在很多应用场景中可以替代PhotopShop等传统软件。 访问地址&#xff1a;MiniPaint - 在线PS - 在线图像编辑。 1、打开图…

iOS- git对单个或者多个文件权限设置,使用pre-commit hook 和shell脚本,拦截校验

前提&#xff1a;最近&#xff0c;由于团队代码规范和安全问题&#xff0c;有一些文件只能是指定用户才能修改。 对比&#xff1a;调查了一下资料&#xff0c;发现好多人都在使用pre-commit技术。于是&#xff0c;就朝着这个方向去研究。于是抽空写了脚本&#xff0c;在提交的…