GPT中的Transformer架构以及Transformer 中的注意力机制

目录

1 GPT中的Transformer架构

2 transformer中的注意力机制

参考文献:


看了两个比较好的视频,简单做了下笔记。

1 GPT中的Transformer架构

GPT是Generative Pre-trained Transformer单词的缩写,其中transformer是一种特定的神经网络,这里的单词是transformer不是transform.

当聊天机器人生成某个特定词汇时,首先输入内容会被拆分成许多小片段,

如果把这些向量看作是在一个高维空间中的坐标,那么含义相似的词汇倾向于彼此接近的向量上,

这些向量接下来会经过一个称为注意力块的处理过程,使得向量能够相互交流,

注意力模块的作用就是要确定上下文中哪些词对更新其他词的意义有关,以及应该如何准确地更新这些含义。

词语的所谓含义完全通过向量中的数字来表达。然后这些向量会经过另一种处理,这个过程根据资料的不同,可能被称作多层感知机或者前馈层,这个阶段向量不在互相交流,而是并行地经历同一处理。

然后对这最后一个向量进行特定操作,产生一个覆盖所有可能token的概率分布,

 然后它就可以根据一小段文本预测下一步,给他一段初始文本,然后让他不断地进行预测下一步, 从概率分布中抽样,添加到现有文本, 然后不断地重复这个过程,就能生成一段文本。

将上面的工具转化为聊天机器人的一个简单方法就是准备一段文本,设定出用户与一个有帮助的AI助手交互的场景,这就是所谓的系统提示。

文本处理示例第一步:将输入分割成小片段,并将这些片段转换成向量。

模型拥有一个预设的词汇库,包含所有可能的单词,输入首先遇到一个矩阵叫做embedding嵌入矩阵,他为每个单词都分配了一个独立的列

 这些列定义了第一部中每个单词转换成的向量。

这些嵌入空间中的向量,不仅仅代表着单个单词,他们还携带了词汇位置的信息,这些词汇能吸纳并反映语境。

2 transformer中的注意力机制

前面说过每个tokens都是一个嵌入向量,在所有可能得嵌入向量所构成的高维空间中, 不同的方向能够代表不同的语义含义 (比如有的方向对应着性别,即在这个空间中添加一定的变化可以从一个男性名词的嵌入转到对应的女性名词的嵌入) 

在这样一个复杂的空间中,有无数的方向, 每一个都可能代表词义的不同方面。

transformer的目标就是逐步调整这些嵌入,使他不仅仅编码单词本身,而是包含更丰富、更深层次的上下文含义。  

但是,在transformer的第一步中,文本被拆分,每个token都被关联到一个向量,

因为初始的token嵌入向量,本质上是一个不参考上下文的查找表,直到transformer的下一步,周围的嵌入向量才有机会向这个token传递信息, 

注意力模块不仅可以精确一个词的含义,还能将一个嵌入向量中的信息传递到另一个嵌入向量中,

例如,你输入的文字是一整部悬疑小说,到了接近尾声的部分,写着“所以,凶手是”,如果模型要准确地预测下一个词语,那么这个序列中的最后一个向量,他最初只是嵌入了单词“是”,它必须经过所有的注意力模块的更新,以包含远超过任何单个单词的信息,通过某种方式编码了所有来自完整的上下文窗口中与预测下一个词相关的信息。

 举一个简单的例子,假设输入一个句子 

假设我们现在关注的只是让形容词调整其对应名词的含义这种更新方式。

 

每个词的初始嵌入向量是一个高维向量,只编码了该特定词的含义以及词的位置,不包含任何上下文,

  我们用字母E来表示这些嵌入向量,我们的目标是,通过一系列计算,产生一组新的、更为精细的嵌入向量,这样做可以让名词的嵌入向量捕捉并融合了与他们相对应的形容词的含义。

其中的矩阵充满了可调节的权重,模型将根据数据来学习这些权重,

在这个过程的第一步,你可以想象每个名词,比如“生物”,都在问,有没有形容词在我前面,对于“毛茸茸的”和“蓝色的”这两个词,都会回答,我是一个形容词,我就在那个位置,这个问题会被编码成另一个向量,也就是一组数字,我们称之为这个词的查询向量,

计算这个查询就是取一个特定的矩阵,也就是WQ,并将其与嵌入向量相乘,简化一下,我们把查询向量记作Q,

 这里E和WQ相乘得到查询向量Q,在这种情况下,你将这个矩阵WQ和上下文中的所有嵌入向量相乘,得到的是每个token对应的一个查询向量,这个矩阵WQ由模型的参数组成,意味着它能从数据中学习到真实的行为模式。 在实际应用中,这个矩阵在特定注意力机制中的具体作用是相当复杂的, 理想的情况是,我们希望这个查询矩阵能将名词的嵌入信息映射到一个较小空间的特定方向上,

 这种映射方式能够捕捉到一种特殊的寻找前置形容词的规律,

然后还有另一个被称之为键矩阵的矩阵,同时需要与所有嵌入向量相乘,这会生成一个我们称之为键的向量序列,从概念上讲,可以把键想象成是潜在的查询回答者,

这个键矩阵也冲忙了可调整的参数,同查询矩阵一样,将嵌入向量映射到同一个较小的维度空间中,当键与查询密切对齐时,你可以将键视为与查询相匹配,

为了衡量每个键和每个查询的匹配程度,你需要计算每一对可能的键-查询组合之间的点积,我们可以将其想象为一个充满各种点的网络,其中较大的点对应着较大的点积, 即键与查询对齐的地方,就我们讨论的形容词与名词的例子而言,如果毛茸茸的和蓝色的生成的键确实与生物产生的查询非常吻合,那么这两个点的点积会是一些较大的正数,

相比之下,像the这样的词语的键,与生物的查询之间的点积会是一些较小或者负数,这反映出他们之间没有关联,

这个网格赋予了我们评估每个单词在更新其他单词含义上的相关性得分的能力,接下来我们将利用这些分数,执行一种操作:按照每个词的相关重要性,沿着每一列计算加权平均值,因此我们的目标不是让这些数据列的数值范围无线扩展,从负无穷到正无穷,相反,我们希望这些数据列中的每个数值都介于0和1之间。并且每列的数值总和为1,正如他们构成一个概率分布那样,这就需要做softmax操作,softmax之后如下

我们将这种网格称为 注意力模式。

在transformer的原始论文里面,

在这个公式中,还有个dk,为了数值稳定性,这里将所有这些值除以键-查询空间维度的平方根,

然后包含所有算式的softmax函数我们应理解为是按列应用的,然后公式中还有大写V,后面再讲。

 之前没有提到一个技术细节,在训练过程中,对给定样本进行处理时,模型会通过调整权重来奖励或惩罚预测的准确性,即根据模型对文中下一个词的预测概率的高低,有种做法能显著提高整个训练过程的效率,那就是同时让模型预测, 该段落中每个初始token子序列之后所有可能出现得下一个token,

这样一来,一个训练样本就能提供更多的学习机会,在设计注意力模式时,一个基本原则是不允许后出现得词汇影响先出现得词汇,如果不这么做,后面出现得词汇可能会提前泄露接下来内容的线索,这就要求我们在模型中设置一种机制,确保代表后续token对前面token的影响力能够被有效削弱到0,直觉上我们可能会考虑直接将这些影响力设置为0,但这样做会导致一个问题,那些影响力值的列加和不再是1,也就失去了标准化的效果,为了解决这个问题,一个常见的做法是在进行softmax归一化操作之前将这些影响力值设置为负无穷大。这样,干净过softmax处理后,这些位置的数值会变成0,同时保证了整体的归一化条件不被破坏,这就是所谓的掩蔽过程,

注意力模式的大小等于上下文大小的平方,这就解释了上下文大小可能会对大语言模型构成巨大瓶颈,

通过前面的计算,模型能够推断哪些词与其他词相关,然后就需要实际更新嵌入向量,让词语可以将信息传递给他们相关的其他词,比如说,你希望毛茸茸的嵌入向量能够使得生物发生改变,从而将它移动到这个12000维嵌入空间的另一部分,以更具体地表达一个毛茸茸的生物,

我首先向你展示的事执行这个操作的最简单方法,这个方法的核心是使用一个第三个矩阵,也就是我们所说的值矩阵Wv,你需要将它与某个单词的嵌入相乘,得到的结果我们称为值向量,

 是你要就加入到第二个单词的嵌入向量中的元素,例如在这个情境下,就是要加入到“生物”的嵌入向量中,因此这个值向量就存在于和嵌入向量一样的,给常高维的空间中,当你用这个值矩阵乘以某个单词的嵌入向量时,可以理解为你在询问:如果这个单词对于调整其他内容的含义具有相关性,那么为了反应这一点,我们需要向那个内容的嵌入中添加什么呢,

回到之前的注意力模式的图表,我们先不考虑所有的键和查询,因为一旦计算出注意力模式,这些就不再需要了,接下来,我们将使用这个值矩阵,将其与每一个嵌入向量相乘,从而生成一系列的值向量,这些值向量视作在某种程度上与他们对应的键有关。对于图表中的每一列来说,你需要将每个值向量与该列中相应的权重相乘,比如,对于代表生物的嵌入向量,你会主要假如毛茸茸的和蓝色的这两个值向量的较大比例,而其他的只向量则被减少为零,或者至少接近零,最后,为了更新这一列与之相关联的嵌入向量,原本这个向量编码了生物这一概念的某种基本含义(不考虑具体上下文),你需要将列中所有这些经过重新调整比例的值加总起来,这一步骤产生了一个我们想要引入的变化量,我将其称为delta-e。接着将这个变化量叠加到原有的嵌入向量上,希望最终得到的事一个更精细的向量,是一个更加细致和含有丰富上下文信息的向量,比如描绘了一个毛茸茸、蓝色的奇妙生物。

上面讨论的整个过程,构成了所谓的单头注意力机制。这一机制是通过三种不同的、充满可调整参数的矩阵来实现的。也就是键  查询 和 值。

另外,值矩阵,有12288行和12288列,

参考文献:

图形化的理解GPT中的Transformer架构_哔哩哔哩_bilibili

什么是GPT?通过图形化的方式来理解 Transformer 中的注意力机制_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Harmony鸿蒙南向驱动开发-PIN接口使用

功能简介 PIN即管脚控制器,用于统一管理各SoC的管脚资源,对外提供管脚复用功能:包括管脚推拉方式、管脚推拉强度以及管脚功能。 PIN接口定义了操作PIN管脚的通用方法集合,包括: 获取/释放管脚描述句柄:传…

MATLAB GUI图形化界面设计计算器

MATLAB GUI界面设计教程可以帮助用户创建交互式的图形用户界面,以简化与MATLAB程序的交互过程。以下是一个简化的教程,指导你如何进行MATLAB GUI界面设计: 1. 启动GUIDE或App Designer GUIDE:在MATLAB命令窗口中输入guide命令&a…

微服务demo(四)nacosfeigngateway(2)gatewayspringsercurity

一、思路 1、整体思路 用户通过客户端访问项目时,前端项目会部署在nginx上,加载静态文件时直接从nginx上返回即可。当用户在客户端操作时,需要调用后端的一些服务接口。这些接口会通过Gateway网关,网关进行一定的处理&#xff0…

4.12学习总结·(MySQL学习总结)

1.MySQL对数据库的操作 1.展示所有数据库 show databases; 这种就是将我navicat上的所有数据库调用出来; 2.创建数据库 create database 数据库名; 很明显,我多创建了一个Teacher 的数据库 3.使用某个数据库 use 数据库名 use test1; 切换到test…

WEB漏洞-文件上传之WAF绕过及安全修复

#上传参数解析: Content-disposition:一般不可更改 Name:表单参数值,不能更改(更改需要达到统一) Filename:文件名,可以更改 Content-type:文件MIME,视情…

Linux 函数学习 poll

1、Linux poll 函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds&#xff1a; 需要轮询的fd集合 nfds&#xff1a;需要轮询的fds数量 timeout&#xff1a;超时时间 返回值&#xff1a;0 超时&#xff0c;<0 发生异常&#xff0c;> 0 存在数据变化 …

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁&#xff0c;那么state0&#xff0c;假如有人持有这把锁&#xff0c;那么state1&#xff0c;如果持有这把锁的…

ubuntu 20.04 更新显卡驱动

1. 问题描述 $ watch -n 1 nvidia-smi画面不动 而且运行 pytorch 代码时出现问题&#xff1a; UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new…

《web应用技术》第三次课后练习

实验目的&#xff1a; 1、springboot入门程序撰写并启动 2、使用postman练习参数的获取。 参考&#xff1a;Day04-10. Web入门-SpringBootWeb-快速入门_哔哩哔哩_bilibili

基于Springboot的网上商品订单转手系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的网上商品订单转手系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

基于级联H桥的多电平逆变器PWM控制策略的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 级联H桥&#xff08;CHB&#xff09;多电平逆变器是一种通过多个H桥单元级联实现更高电压等级和更高质量输出波形的电力电子转换装置。这种逆变器在高压大功率场合应用广泛&am…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念&#xff0c;特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习&#xff0c;模型可以更好地处理未知的情况和新任务&#xff0c;减少对大量标注数据的依赖&#xff0c;提高模型的…

Mac M2安装 Windows

由于需要在 Windows 上使用一些软件&#xff0c;今天在 Mac M2 上安装了 Windows 11。以前在 X86 Mac 上安装很容易&#xff0c;都是 X86 架构随便找个镜像安装上就可以用了。到了 M1/M2 Arm 架构就会麻烦一些&#xff0c;先在网上找到 Windows 10 Arm 架构的安装镜像&#xff…

3. WPF应用程序启动时StartUp事件和重写OnStartup方法有什么不同

文章目录 一. 目标二. 技能介绍① OnStartup方法介绍② Startup事件介绍 三. 结论① 不同点1: 设计意图② 不同点2: 执行时机 一. 目标 搞明白WPF应用中OnStartup() 方法的作用和用法搞明白WPF应用中StartUp事件的作用和用法搞明白为什么同时需要这两个功能?它们设计上有所重叠…

程序猿之路

我接触计算机算对自己来说是比较晚的了&#xff0c;上初中的时候就有微机课&#xff0c;但是在那个小县城&#xff0c;上课也只是3个人共用一个电脑&#xff0c;我初中整个过程只会开关机&#xff0c;哈哈&#xff0c;虽然学过word&#xff0c;但是无奈&#xff0c;我插不上手呀…

vue中预览docx、xlsx、pptx、pdf

前言&#xff1a;其实本来是要做全类型文件预览的&#xff0c;但是一直找不到合适的doc,xlx,ppt预览插件。要是有可以使用的&#xff0c;可以评论推荐给我 我使用的node版本&#xff1a;v18.19.1 参考官网&#xff1a;preview 文件预览 | ran 引入方式&#xff1a; //安装组…

20232831 2023-2024-2 《网络攻防实践》第5次作业

目录 20232831 2023-2024-2 《网络攻防实践》第5次作业1.实验内容&#xff08;1&#xff09;防火墙配置&#xff08;具体IP配置参考自己的IP设置&#xff09;&#xff08;2&#xff09;动手实践&#xff1a;Snort&#xff08;3&#xff09;分析配置规则 2.实验过程3.学习中遇到…

【论文阅读——SplitFed: When Federated Learning Meets Split Learning】

级别CCFA 1.摘要 联邦学习&#xff08;FL&#xff09;和分割学习&#xff08;SL&#xff09;是两种流行的分布式机器学习方法。两者都采用了模型对数据的场景&#xff1b;客户端在不共享原始数据的情况下训练和测试机器学习模型。由于机器学习模型的架构在客户端和服务器之间…

HWOD:二维数组下标合法性判断

一、知识点 1、停止读取的判定条件有两种写法 (1)&#xff1a;while(scanf()!EOF) (2)&#xff1a;while(scanf()>0) 在代码提交平台(1)和(2)都可以用 在本地&#xff0c;只能用(2)&#xff0c;且要有非法输入的配合。比如要读取的是整数&#xff0c;但输入了字符串&am…