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

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

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

相关文章

如何排查k8s集群中Pod内mysqld进程占用内存消耗过高?

文章目录 1. **查看容器资源使用情况**:2. **进入容器内部**:3. **检查进程内存使用**:4. **MySQL服务器状态检查**:5. **MySQL日志分析**:6. **使用专门的MySQL监控工具**:7. **配置文件检查**&#xff1a…

Java基础07--多线程-网络编程-Java高级

一、多线程 1.认识多线程 ①线程 ②多线程 2.创建线程方式 ①方式一:继承Thread类 1.让子类继承Thread线程类 2.重写run方法,就是这个线程执行会执行的操作。 3.创建继承Thread的子类对象就代表一个线程 4.启动线程:.start()-自动执行run方法 注意&am…

点亮一颗 LED: 单片机 ch32v003 (RISC-V) 使用 rust 编写固件

首发日期 2024-04-09, 以下为原文内容: 使用 rust 编写单片机的程序 ? 很新, 但没问题. 使用 RISC-V CPU 的单片机 (比如 ch32v003) ? 也没问题. 同时使用 ? 哦嚯, 问题出现了 !! ch32v003 是一款使用 rv32ec 指令集的国产单片机, 很便宜 (某宝零卖只要 0.4 元一个, 在同档…

简单了解JVM

一.JVM简介 jvm及Java virtual machineJava虚拟机,它是一个虚构出来的计算机,一种规范。其实抛开这么专业的句子不说,就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互&#…

Handler——小白能懂的原理,老鸟需要的面经

1.机制学习 1.1Handler定义 发送并处理 与线程的消息队列关联的Message和Runnable 1.2基本用法 1、Message.obtain() 从消息池取得Message 2、Handler().sendMessage(msg) 发送消息 3、Handler().post 将Runnable包装成Message发送 以下提供一个结构代码 import android.os.H…

VMware导出虚拟机vmkd格式转换qcow2

VMware虚拟机导出qcow2格式可以上传至云服务 1、需要导出的虚拟机 2、克隆虚拟机 3、选择克隆源 4、创建完整克隆 5、完成 6、找到VMware安装路径 7、找到vmware-vdiskmanager所在路径使用cmd或Windows PowerShell进入目录 进入vmware-vdiskmanager目录 cd F:\软件\VMware Wo…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

React 快速入门:掌握前端开发的核心技能

React 快速入门:掌握前端开发的核心技能 一、React 简介1.1 React 的历史1.2 React 的概念1.3 React 的特点1.4 React 的官网地址 二、开发环境搭建三、React 基础3.1 JSX3.2 组件3.3 Props3.4 State3.5 props 和 state 的区别3.6 Hook 四、React 生命周期五、添加样…

Redis Pipelining 底层原理分析及实践

作者:vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对…

Unity构建详解(7)——AssetBundle格式解析

【文件格式】 文件可以分为文本文件、图片文件、音频文件、视频文件等等,我们常见的这些文件都有行业内的标准格式,其意味着按照一定的规则和规范去保存读取文件,可以获取我们想要的数据。 有些软件会有自己的文件格式,会按照其…

风储微网虚拟惯性控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 风储微网虚拟惯性控制系统simulink建模与仿真。风储微网虚拟惯性控制系统是一种模仿传统同步发电机惯性特性的控制策略,它通过集成风力发电系统、储能系统和其他分…

如何动态渲染HTML内容?用v-html!

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

计算机网络知识等汇总补充

计算机网络知识汇总补充 一、四次挥手1、为什么TCP要等待2MSL2、如果说一个系统中,有大量的time_wait和close_wait,会是什么原因? 二、你是怎么解决粘包问题?三、你觉得哪些场景适合redis四、redis的持久化策略五、你会怎么保证my…

4-云原生监控体系-Grafana-基本使用

1. 介绍 使用Grafana,您可以通过漂亮、灵活的仪表板创建、探索和共享所有数据。查询、可视化、提醒和理解您的数据,无论数据存储在何处。 图片出处: https://grafana.com/grafana/ 官方网站 2. 界面介绍 Connections 可以配置数据源&#x…

php-redis windows ,pecl 已经不维护了,解决方案:php 8.2 | 8.3+ redis extension windows

从论坛上pecl 已经不维护了,直接让大家到ci 去下载 https://stackoverflow.com/questions/76496488/redis-dll-not-found-for-php8-2/76496489#76496489 让我们找最新的一次commit ,然后又action 构建,再下载,这样的话也好&#…

Redis从入门到精通(十三)Redis分布式缓存(一)RDB和AOF持久化、Redis主从集群的搭建与原理分析

文章目录 第5章 Redis分布式缓存5.1 Redis持久化5.1.1 RDB持久化5.1.1.1 执行时机5.1.1.2 bgsave原理 5.1.2 AOF持久化5.1.2.1 AOF原理5.1.2.2 AOF配置5.1.2.3 AOF文件重写 5.1.3 RDB和AOF的对比 5.2 Redis主从5.2.1 搭建主从结构5.2.2 主从数据同步原理5.2.2.1 全量同步5.2.2.…

集群开发学习(一)(安装GO和MySQL,K8S基础概念)

完成gin小任务 参考文档: https://www.kancloud.cn/jiajunxi/ginweb100/1801414 https://github.com/hanjialeOK/going 最终代码地址:https://github.com/qinliangql/gin_mini_test.git 学习 1.安装go wget https://dl.google.com/go/go1.20.2.linu…

【Ubuntu】 Github Readme导入GIF

1.工具安装 我们使用 ffmpeg 软件来完成转换工作1.1 安装命令 sudo add-apt-repository ppa:jonathonf/ffmpeg-3sudo apt-get updatesudo apt-get install ffmpeg1.2 转换命令 (1)直接转换命令: ffmpeg -i out.mp4 out.gif(2) 带参数命令&…

【洛谷 P4017】最大食物链计数 题解(深度优先搜索+动态规划+邻接表+记忆化搜索+剪枝)

最大食物链计数 题目背景 你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。 题目描述 给你一个…

SuperGluePretrainedNetwork调用接口版本(两个版本!)

本脚本是一个基于Python的应用,旨在演示如何使用SuperGlue算法进行图像之间的特征匹配。SuperGlue是一个强大的特征匹配工具,能够在不同的图像之间找到对应的关键点。这个工具尤其适用于计算机视觉任务,如立体视觉、图像拼接、对象识别和追踪…