大模型 Transformer介绍-Part1

news2024/12/27 17:25:31

众所周知,transformer 架构是自然语言处理 (NLP) 领域的一项突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。事实证明,transformer 架构是 BERT、GPT 和 T5 及其变体等革命性架构的基石。正如许多人所说,NLP 正处于黄金时代,可以说 transformer 模型是一切的起点。

Transformer架构
如前所述,需要是发明之母。传统的 seq-to-seq 模型在处理长文本时表现不佳。这意味着模型在处理输入序列的后半部分时往往会忘记从输入序列的前半部分学习的知识。这种信息丢失是不可取的。

尽管像 LSTM 和 GRU 这样的门控架构通过丢弃在记住重要信息的过程中无用的信息,在处理长期依赖性方面表现出一些性能改进,但这仍然不够。世界需要更强大的东西,2015 年,Bahdanau 等人 引入了“注意力机制” 。它们与 RNN/LSTM 结合使用来模仿人类行为,以专注于有选择的事物而忽略其余的事物。Bahdanau 建议为句子中的每个词分配相对重要性,以便模型关注重要词而忽略其余词。对于神经机器翻译任务,它是对编码器-解码器模型的巨大改进,很快,注意力机制的应用也被推广到其他任务中。

Transformer时代
Transformer 模型完全基于注意力机制,也称为“自注意力”。这种架构在 2017 年的论文“ Attention is All You Need ”中被介绍给世界。它由一个编码器-解码器架构组成。

在这里插入图片描述

图 Transformer Model Architecture on high-level(来源:作者)
在高层次上,

编码器负责接受输入语句并将其转换为隐藏表示,并丢弃所有无用信息。
解码器接受这个隐藏表示并尝试生成目标句子。
在本文中,我们将深入分析 Transformer 模型的编码器组件。在下一篇文章中,我们将详细介绍解码器组件。开始吧!

Transformer编码器
Transformer 的编码器块由一堆按顺序工作的 N 个编码器组成。一个编码器的输出是下一个编码器的输入,依此类推。最后一个编码器的输出是馈送到解码器块的输入句子的最终表示。
在这里插入图片描述

图 带有堆叠编码器的 Enoder 块(来源:作者)
每个编码器块可以进一步拆分为两个组件,如下图所示。

在这里插入图片描述

图 Encoder Layer 的组成部分(来源:作者)
让我们一一详细研究这些组件中的每一个,以了解编码器块是如何工作的。编码器块中的第一个组件是多头注意力,但在我们进入细节之前,让我们先了解一个基本概念:自注意力。

Attention机制
大家脑海中可能会冒出第一个问题:attention和self-attention是不同的概念吗?是的,他们是。(呃!)

传统上,如前一节所述,注意力机制是为神经机器翻译任务而存在的。所以本质上是应用注意力机制来映射源句和目标句。由于 seq-to-seq 模型逐个标记地执行翻译任务,注意力机制帮助我们在为目标句子生成标记 x 时识别源句子中的哪些标记需要更多关注。为此,它利用来自编码器和解码器的隐藏状态表示来计算注意力分数,并根据这些分数生成上下文向量作为解码器的输入。如果您想了解有关注意力机制的更多信息,请阅读本文(精彩解释!)。

回到self-attention,主要思想是在将源句子映射到自身的同时计算注意力分数。如果你有这样的句子,

“男孩没有过马路,因为马路太宽了。”

我们人类很容易理解上面句子中“它”这个词指的是“路”,但是我们如何让我们的语言模型也理解这种关系呢?这就是self-attention发挥作用的地方!

在高层次上,将句子中的每个单词与句子中的每个其他单词进行比较,以量化关系并理解上下文。出于代表性的目的,您可以参考下图。

让我们详细看看这种自注意力是如何计算的(实际)。

为输入句子生成嵌入
找到所有单词的嵌入并将它们转换为输入矩阵。这些嵌入可以通过简单的标记化和单热编码生成,也可以通过 BERT 等嵌入算法生成。输入矩阵的维度将等于句子长度 x 嵌入维度。让我们将此输入矩阵称为 X以供将来参考。

将输入矩阵转换为 Q、K 和 V
为了计算自注意力,我们需要将 X(输入矩阵)转换为三个新矩阵:

  • Query (Q)
  • Key (K)
  • Value (V)

为了计算这三个矩阵,我们将随机初始化三个权重矩阵,即Wq、Wk 和 Wv。输入矩阵 X 将与这些权重矩阵 Wq、Wk 和 Wv 相乘,分别获得 Q、K 和 V 的值。在此过程中将学习权重矩阵的最佳值,以获得更准确的 Q、K 和 V 值。

计算Q和K转置的点积
从上图可以看出,qi、ki、vi 代表了句子中第 i 个词的 Q、K、V 的值。

在这里插入图片描述

图 Q 和 K 转置的点积示例(来源:作者)
输出矩阵的第一行将使用点积告诉您 q1 表示的 word1 与句子中其余单词的关系。点积的值越高,单词越相关。直觉上为什么要计算这个点积,可以从信息检索的角度理解Q(query)和K(key)矩阵。所以在这里,

  • Q 或 Query = 您正在搜索的术语
  • K 或 Key = 您搜索引擎中的一组关键字,Q 将与之进行比较和匹配。

缩放点积
与上一步一样,我们正在计算两个矩阵的点积,即执行乘法运算,该值可能会爆炸。为了确保不会发生这种情况并稳定梯度,我们将 Q 和 K-转置的点积除以嵌入维度 (dk) 的平方根。

使用 softmax 规范化值
使用 softmax 函数的归一化将导致值介于 0 和 1 之间。具有高尺度点积的单元格将进一步提高,而低值将减少,从而使匹配的词对之间的区别更加清晰。得到的输出矩阵可以被视为得分矩阵 S。

计算注意力矩阵Z
将值矩阵或V乘以从上一步获得的分数矩阵S来计算注意力矩阵Z。

但是等等,为什么要乘法?

假设,Si = [0.9, 0.07, 0.03] 是句子中第 i 个词的得分矩阵值。该向量与 V 矩阵相乘以计算 Zi(第 i 个词的注意力矩阵)。

子 = [0.9 * V1 + 0.07 * V2 + 0.03 * V3]

我们是否可以说为了理解第 i 个词的上下文,我们应该只关注词 1(即 V1),因为 90% 的注意力分数值来自 V1?我们可以清楚地定义重要的词,应该更加注意理解第 i 个词的上下文。

因此,我们可以得出结论,一个词在 Zi 表示中的贡献越高,这些词之间的关键性和相关性就越高。

现在我们知道如何计算自注意力矩阵,让我们了解多头注意力机制的概念。

多头Attention机制
如果你的分数矩阵偏向于特定的词表示会发生什么?它会误导你的模型,结果不会像我们预期的那样准确。让我们看一个例子来更好地理解这一点。

S1:“一切都很好”

Z(孔)= 0.6 * V(全部)+ 0.0 * v(是)+ 0.4 * V(孔)

S2:“狗吃了食物因为它饿了”

Z(it) = 0.0 * V(the) + 1.0 * V(dog) + 0.0 * V(ate) + …… + 0.0 * V(hungry)

在 S1 情况下,在计算 Z(well) 时,更重视 V(all)。它甚至超过了 V(well) 本身。无法保证这将有多准确。

在 S2 的情况下,在计算 Z(it) 时,所有重要性都赋予 V(dog),而其余单词的分数为 0.0,包括 V(it)。这看起来可以接受,因为“它”这个词是模棱两可的。将它更多地与另一个词相关联而不是与该词本身相关联是有意义的。这就是计算自我注意力的练习的全部目的。处理输入句子中歧义词的上下文。

换句话说,我们可以说,如果当前词是有歧义的,那么在计算自注意力时给予其他词更多的重要性是可以的,但在其他情况下,它可能会对模型产生误导。所以我们现在怎么办?

如果我们计算多个注意力矩阵而不是计算一个注意力矩阵并从中推导出最终的注意力矩阵会怎么样?

这正是多头注意力的全部意义所在!我们计算注意力矩阵 z1、z2、z3、……、zm 的多个版本并将它们连接起来以得出最终的注意力矩阵。这样我们就可以对我们的注意力矩阵更有信心。

继续下一个重要概念,

位置编码
在 seq-to-seq 模型中,输入句子被逐字输入网络,这使得模型能够跟踪单词相对于其他单词的位置。

但在变压器模型中,我们采用不同的方法。它们不是逐字输入,而是并行输入,这有助于减少训练时间和学习长期依赖性。但是用这种方法,词序就丢失了。然而,要正确理解句子的意思,词序是极其重要的。为了克服这个问题,引入了一种称为“位置编码”(P)的新矩阵。

该矩阵 P 与输入矩阵 X 一起发送,以包含与词序相关的信息。由于显而易见的原因,X 和 P 矩阵的维数相同。

为了计算位置编码,使用下面给出的公式。

在这里插入图片描述

图.计算位置编码的公式(来源:作者)
在上面的公式中,

pos = 单词在句子中的位置
d = 单词/标记嵌入的维度
i = 表示嵌入中的每个维度
在计算中,d 是固定的,但 pos 和 i 是变化的。如果 d=512,则 i ∈ [0, 255],因为我们取 2i。

如果您想了解更多信息,该视频将深入介绍位置编码。

Transformer 神经网络视觉指南——(第 1 部分)位置嵌入

我正在使用上面视频中的一些视觉效果用我的话来解释这个概念。

在这里插入图片描述

Fig. Positional Encoding Vector Representation(来源:作者)
上图显示了一个位置编码向量的示例以及不同的变量值。

在这里插入图片描述

图. 具有常量 i 和 d 的位置编码向量(来源:作者)
在这里插入图片描述

图. 具有常量 i 和 d 的位置编码向量(来源:作者)
上图显示了如果 i 不变且只有 pos 变化,PE(pos, 2i)的值将如何变化。正如我们所知,正弦波是一种周期性函数,往往会在固定间隔后自行重复。我们可以看到 pos = 0 和 pos = 6 的编码向量是相同的。这是不可取的,因为我们希望对不同的 pos 值使用不同的位置编码向量。

这可以通过改变正弦波的频率来实现。

在这里插入图片描述

图 pos 和 i 不同的位置编码向量(来源:作者)
随着 i 值的变化,正弦波的频率也会发生变化,从而导致不同的波,从而导致每个位置编码向量的值不同。这正是我们想要实现的。

位置编码矩阵 § 添加到输入矩阵 (X) 并馈送到编码器。

在这里插入图片描述

图. 将位置编码添加到输入嵌入中(来源:作者)
编码器的下一个组件是前馈网络。

前馈网络
编码器块中的这个子层是具有两个密集层和 ReLU 激活的经典神经网络。它接受来自多头注意力层的输入,对其执行一些非线性变换,最后生成上下文向量。全连接层负责考虑每个注意力头并从中学习相关信息。由于注意力向量彼此独立,因此可以以并行方式将它们传递给变换器网络。

Encoder 块的最后一个组件是Add & Norm 组件。

添加&规范组件
这是一个残差层,然后是层归一化。残差层确保在处理过程中不会丢失与子层输入相关的重要信息。而规范化层促进更快的模型训练并防止值发生重大变化。

在这里插入图片描述

图。包含添加和规范层的编码器组件(来源:作者)
在编码器中,有两个添加和规范层:

将多头Attention子层的输入连接到它的输出
将前馈网络子层的输入连接到它的输出
至此,我们总结了编码器的内部工作。为了总结这篇文章,让我们快速回顾一下编码器使用的步骤:

生成输入句子的嵌入或标记化表示。这将是我们的输入矩阵 X。
生成位置嵌入以保留与输入句子的词序相关的信息,并将其添加到输入矩阵 X。
随机初始化三个矩阵:Wq、Wk 和 Wv, 即查询、键和值的权重。这些权重将在 transformer 模型的训练过程中更新。
将输入矩阵 X 与 Wq、Wk 和 Wv 中的每一个相乘以生成 Q(查询)、K(键)和 V(值)矩阵。
计算 Q 和 K-transpose 的点积,通过将乘积除以 dk 的平方根或嵌入维度来缩放乘积,最后使用 softmax 函数对其进行归一化。
通过将 V 或值矩阵与 softmax 函数的输出相乘来计算注意力矩阵 Z。
将此注意力矩阵传递给前馈网络以执行非线性转换并生成上下文嵌入。

在下一篇文章中,我们将了解 Transformer 模型的 Decoder 组件是如何工作的。

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

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

相关文章

SpringBoot仿GPT数据流传输

目录 Java数据流传输响应前提Springboot文字流响应Web端接收流数据并显示 SpingBoot集成ChatGPT使用流响应结果 Java数据流传输响应 前提 在折腾ChatGpt集成在SpringBoot项目时,发现了ChatGpt api返回数据时有两种返回方式,一种是使用流传输&#xff0…

MyCat总结

目录 什么是mycat 核心概念 逻辑库 逻辑表 分片节点 数据库主机 用户 mycat原理 目录结构 配置文件 读写分离 搭建读写分离 搭建主从复制: 搭建读写分离: 分片技术 垂直拆分 实现分库: 水平拆分 实现分库: ER表 全局表 分…

简要介绍 | 基于深度学习的姿态估计技术

注1:本文系“简要介绍”系列之一,仅从概念上对基于深度学习的姿态估计技术进行非常简要的介绍,不适合用于深入和详细的了解。 注2:"简要介绍"系列的所有创作均使用了AIGC工具辅助 基于深度学习的姿态估计技术 背景介绍 …

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 告警抑制

2023大厂笔试模拟练习网站(含题解) www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

基于Dlib的疲劳检测系统

需要源码的朋友可以私信我 基于Dlib的疲劳检测系统 1、设计背景及要求2、系统分析3、系统设计3.1功能结构图3.2基于EAR、MAR和HPE算法的疲劳检测3.2.1基于EAR算法的眨眼检测3.2.2基于MAR算法的哈欠检测3.3.3基于HPE算法的点头检测 4、系统实现与调试4.1初步实现4.2具体实现过程…

使用MATLAB画SCI论文图

从gcf和gca说起 不论是 Python 绘图还是Matlab绘图,想要获得更好看的图,都会用到这两个单词。 gcf:get current figure,是目标图像的图形句柄对象 gca:get current axes,是目标图像的坐标轴句柄对象 Mat…

pandas---数学函数、离散化处理、分组聚合

1. 数学函数 方差:当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和 较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。因此方差越 …

【计算机网络】如何学好计网-第一章概论

相关术语 URI:Uniform Resource Identifier 统一资源标识符,指的是一个资源 URL:Uniform Resource Location 统一资源定位符,URI的子集,用地址定为的方式指定一个资源 URN:Uniform Resource Name 统一资…

北京论道|光环云李卓然:以“云”为帆 赋能文化出海行业创新增长

2023年6月15~16日,由流媒体网主办,北京新媒体(集团)有限公司、北京联通、北京电信、北京移动共同协办的「北京论道暨第25届中国智能视听与科技创新高峰论坛」在北京隆重举行。 本届论道以“电视的未来与未来的电视”为主题&#…

java语言中方法的重载

文章目录 前言一、重载是什么?二、使用步骤 1.实操展示2.注意事项总结 前言 小时候,我们学会了十以内的加法,却对十以外的加法感到害怕,但从现在来看,它们都属于加法,只是计算方法略有不同。方法的重载也一…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 阿里巴巴找黄金宝箱(IV)

2023大厂笔试模拟练习网站(含题解) www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

Computer Graphics From Scratch - Chapter 9

系列文章目录 简介:Computer Graphics From Scratch-《从零开始的计算机图形学》简介 第一章: Computer Graphics From Scratch - Chapter 1 介绍性概念 第二章:Computer Graphics From Scratch - Chapter 2 基本光线追踪 第三章:Computer Gr…

IEEE 最佳论文提名 | TraND:用步态算法优化身份识别

来源:投稿 作者:小灰灰 编辑:学姐 论文标题:TraND: Transferable Neighborhood Discovery for Unsupervised Cross-domain Gait Recognition 论文链接: https://arxiv.org/pdf/2102.04621v1.pdf 步态识别开始应用在公共场域身份…

centos mysql安装配置远程访问

包含以下三个部分:mysql安装,mysql密码重置、mysql配置远程访问。 一 centos安装mysql 1、wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 2、yum -y install mysql57-community-release-el7-10.noarch.rpm 3、yum…

to be delete

一、grafana版本升级 1.1 还是先跟着官网简单走一波 建议经常升级Grafana,以获取最新的修补程序和增强功能。 为了实现这一点,Grafana升级向后兼容,并且升级过程简单快捷。升级通常是安全的(在许多次要版本和一个主要版本之间&a…

Python习题进阶

1.十六进制数字的大小 描述 计算的世界,除了二进制与十进制,使用最多的就是十六进制了,现在使用input读入一个十六进制的数字,输出它的十进制数字是多少? 输入描述: input读入一个十六进制数字&#xf…

微信支付服务商接入指引(企业)

目录 一、官方指引二、申请流程1.进入服务商平台2.填写资料3.账户验证&资料审核 三、登录 一、官方指引 https://kf.qq.com/faq/161220iqeAfA1612202yeURB.html 二、申请流程 1.进入服务商平台 https://pay.weixin.qq.com/static/partner_guide/service_provider.shtml…

【JVM快速入门篇】

本笔记内容为狂神说JVM快速入门篇部分 目录 一、JVM的位置 二、JVM体系结构 三、类加载器(ClassLoader) 四、双亲委派机制 双亲委派机制的作用 五、沙箱安全机制 六、Native ​编辑Native Method Stack 本机方法栈 Native Ilnterface本地接口…

低代码靠谱吗?实操一遍就知道了

一、前言 最近一段时间,“低代码”概念特别流行,有些人特别推崇它,也有些人对此不屑一顾。 推崇它的人认为,它有很多优点,比如说能够降低开发周期,提高系统开发效率,降低开发成本,学…

使用HBuilder将h5网站打包成app 自行打包

1、点击manifest.json,基础配置,APP名字,是否全面屏 2、然后点击图标配置,选好后点自动生成所有图标并替换 点击模块配置,选VideoPlayer和X5内核 然后顶部菜单选发行,选择原生App-云打包 选公测证书然后…