从与原始的Transformer architecture比较来理解GPT

news2024/11/18 16:49:24

从与原始的Transformer architecture比较来理解GPT

flyfish

一、Transformer architecture

先说名词
不同的文献和资料中有不同的名字,其实是一样的意思
1 编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism)
其他名字:
交叉注意力机制(Cross-Attention Mechanism)
源-目标注意力机制(Source-Target Attention Mechanism)
解码器-编码器注意力机制(Decoder-Encoder Attention Mechanism)

2 遮蔽多头自注意力机制(Masked Multi-Head Self-Attention Mechanism )
其他名字:
因果注意力机制(Causal Attention Mechanism)
未来位置遮蔽注意力机制(Look-Ahead Masking Attention Mechanism)
遮蔽自注意力机制(Masked Self-Attention Mechanism)
前向遮蔽注意力机制(Forward Masking Attention Mechanism)
名字很多,意思是一样的

请添加图片描述组成
编码器(Encoder):
编码器由 N 个相同的层堆叠而成,每个层包含两个子层:
多头自注意力机制(Multi-Head Self-Attention Mechanism)
前馈神经网络(Feed-Forward Neural Network)
每个子层后都包含残差连接和层归一化(Layer Normalization)。

解码器(Decoder):
解码器也由 N 个相同的层堆叠而成,每个层包含三个子层:
多头自注意力机制(Masked Multi-Head Self-Attention Mechanism)(带有掩码以防止未来信息泄露)
编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism)
前馈神经网络(Feed-Forward Neural Network)
每个子层后也包含残差连接和层归一化。

位置嵌入(Positional Encoding):
为了保留序列的位置信息,通常在输入中加入位置嵌入。

生成器(Generator):
用于将解码器的输出映射到词汇表中的概率分布。

原始的 Transformer 架构中,编码器和解码器的多头注意力机制有以下几种类型

图中流程是从下往上走
编码器:使用一个双向的多头自注意力机制。
解码器:使用一个单向的遮蔽多头自注意力机制(因果注意力机制)和一个双向的编码器-解码器多头注意力机制(交叉注意力机制)

编码器中的多头注意力

  1. 多头自注意力机制(Multi-Head Self-Attention Mechanism)
  • 类型 :双向的(Bidirectional)这种机制允许模型捕捉输入序列中的全局依赖关系,因为它可以同时考虑到元素的前后文。

  • 功能 :对输入序列中的每个位置,通过查看序列中的所有其他位置(包括前后位置)来计算其表示。这种机制允许编码器捕捉输入序列中全局的依赖关系。

解码器中的多头注意力

解码器中的多头注意力机制包括两种类型:

  1. 遮蔽多头自注意力机制(Masked Multi-Head Self-Attention Mechanism)图下部分
  • 类型 :单向的(Unidirectional),又称因果注意力机制(Causal Attention Mechanism)。这种机制用于生成任务中,确保模型生成的每个位置的元素只能依赖于之前生成的元素,而不能依赖于未来的元素。

  • 功能 :对解码器输入序列的每个位置,通过仅查看该位置及其之前的所有位置来计算其表示。这确保了生成过程中的每个步骤只能看到之前生成的内容,而不能看到未来的内容,从而保持生成序列的因果性。

  1. 编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism)图上部分
  • 类型 :双向的(Bidirectional),也称交叉注意力机制(Cross-Attention Mechanism)。

  • 位置 :在解码器层中,位于遮蔽多头自注意力机制之后。

  • 功能 :通过查看编码器的输出序列,为解码器提供额外的上下文信息。解码器每个位置通过查看整个编码器输出序列,来生成与输入序列相关的表示。

二、Decoder-Only Transformer Architecture

请添加图片描述Decoder-Only Transformer Architecture 是一种只包含解码器部分的 Transformer 模型。与标准的 Transformer 模型不同,它省略了编码器部分,只使用解码器进行任务处理。GPT-2 就是一个典型的 Decoder-Only Transformer 模型。

组成部分
输入嵌入层(Input Embedding Layer):
将输入的单词或符号嵌入到高维向量空间中。

位置编码(Positional Encoding):
添加位置编码以保留序列中单词的位置信息。

堆叠的解码器层(Stacked Decoder Layers):
多个相同的解码器层堆叠而成,每个解码器层包含:
遮蔽多头自注意力机制(Masked Multi-Head Self-Attention Mechanism)
前馈神经网络(Feed-Forward Neural Network)
残差连接和层归一化(Residual Connections and Layer Normalization)

输出层(Output Layer):
将解码器的输出映射到词汇表中的概率分布。
请添加图片描述GPT-2 是一种典型的自回归架构(autoregressive architecture)模型。

GPT-2 的自回归特性
逐步生成文本:
GPT-2 在生成文本时,通过逐步生成每个单词,每个生成的单词只依赖于之前生成的单词。

遮蔽多头自注意力机制:
在训练和推理过程中,GPT-2 使用遮蔽多头自注意力机制,确保每个位置只能看到当前位置及其之前的位置,而不能看到未来的位置。

模型结构:
GPT-2 的模型结构是一个 Decoder-Only Transformer,其中的每一层都使用自回归机制进行文本生成。

如果自回归 用数学语言描述是(不喜欢的,可以跳过,不影响理解)

需要理解的基础知识
序列中的每个元素 x t x_t xt 是基于之前生成的元素 x 1 , x 2 , . . . , x t − 1 x_1, x_2, ..., x_{t-1} x1,x2,...,xt1 来生成的,公式如下:
p ( x ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 1 , x 2 ) ⋯ p ( x T ∣ x 1 , x 2 , … , x T − 1 ) p(x) = p(x_1) p(x_2|x_1) p(x_3|x_1, x_2) \cdots p(x_T|x_1, x_2, \ldots, x_{T-1}) p(x)=p(x1)p(x2x1)p(x3x1,x2)p(xTx1,x2,,xT1)

  • 联合概率分布
    p ( x ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 1 , x 2 ) ⋯ p ( x T ∣ x 1 , x 2 , … , x T − 1 ) p(x) = p(x_1) p(x_2|x_1) p(x_3|x_1, x_2) \cdots p(x_T|x_1, x_2, \ldots, x_{T-1}) p(x)=p(x1)p(x2x1)p(x3x1,x2)p(xTx1,x2,,xT1)
    这个公式表示生成序列 x x x 的联合概率等于依次生成每个元素的条件概率的乘积。

  • 逐步生成

    • 第一步,生成第一个元素 x 1 x_1 x1 的概率是 p ( x 1 ) p(x_1) p(x1)

    • 第二步,在已生成 x 1 x_1 x1 的条件下生成 x 2 x_2 x2,其概率是 p ( x 2 ∣ x 1 ) p(x_2 | x_1) p(x2x1)

    • 第三步,在已生成 x 1 x_1 x1 x 2 x_2 x2 的条件下生成 x 3 x_3 x3,其概率是 p ( x 3 ∣ x 1 , x 2 ) p(x_3 | x_1, x_2) p(x3x1,x2)

    • 依此类推,直到生成第 T T T 个元素 x T x_T xT,其概率是 p ( x T ∣ x 1 , x 2 , … , x T − 1 ) p(x_T | x_1, x_2, \ldots, x_{T-1}) p(xTx1,x2,,xT1)

  1. p ( x ) p(x) p(x) :整个序列 x x x 的联合概率分布。
    p ( x ) p(x) p(x) 表示生成整个序列 x x x 的概率。

  2. x x x :序列。
    x x x 是由 T T T 个元素组成的序列,可以是单词、字符或其他符号。
    x x x 通常表示整个序列,例如在文本生成中, x x x 可能是一个句子或段落。

  3. x i x_i xi :序列中的第 i i i 个元素。
    x i x_i xi 表示序列 x x x 中的第 i i i 个元素。例如,在文本生成中, x i x_i xi 可能是一个单词或字符。

  4. p ( x i ∣ x 1 , x 2 , … , x i − 1 ) p(x_i | x_1, x_2, \ldots, x_{i-1}) p(xix1,x2,,xi1) :给定之前的元素 x 1 , x 2 , … , x i − 1 x_1, x_2, \ldots, x_{i-1} x1,x2,,xi1 的条件下,第 i i i 个元素 x i x_i xi 的条件概率。
    这个条件概率表示在已经生成了序列的前 i − 1 i-1 i1 个元素之后,生成第 i i i 个元素的概率。
    例如, p ( x 3 ∣ x 1 , x 2 ) p(x_3 | x_1, x_2) p(x3x1,x2) 表示在已经生成了 x 1 x_1 x1 x 2 x_2 x2 之后,生成 x 3 x_3 x3 的概率。

  5. T T T :序列的长度。
    T T T 表示序列中元素的总数。例如,在文本生成中,如果序列是一个句子, T T T 可能是句子中的单词总数。

三、GPT-2 (Decoder-Only Transformer)(autoregressive architecture)

请添加图片描述输入嵌入层和位置编码
将输入序列的每个单词转换为嵌入向量,并加上位置编码。

遮蔽多头自注意力机制
在每个解码器层中使用遮蔽多头自注意力机制,确保每个位置只看到当前位置及其之前的位置。

前馈神经网络
每个解码器层中包含一个前馈神经网络,用于进一步处理注意力机制的输出。

残差连接和层归一化
每个子层之后使用残差连接和层归一化,以稳定训练过程和加速模型收敛。

输出层
最后将解码器的输出映射到词汇表中的概率分布,用于生成下一个单词

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

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

相关文章

CI/CD:Job failed: execution took longer than 1h0m0s seconds

简介:当在CI/CD配置运行Gitlab-runner流水线中,一般默认情况下,Job的执行时间默认为1小时,如果超出1小时,任务会中断。 历史攻略: 定时任务:Jenkins 容器化CICDLocust性能压测 容器化CICDSo…

我的NAS是怎么连接Amazon Web Services S3的

作为IT爱好者,很多家庭都配备了Network Attached Storage(NAS),用于存储和管理大量数据。一个常见的挑战是如何实现异地备份,以确保数据的安全性和可恢复性。以下是一些解决方案和工具,可以帮助用户有效地管…

使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

前言 RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 特点 成熟,稳定消息持久化灵活的消息路由高性能,高可用性,可扩展性高支…

操作系统:进程1

一.进程 1.什么是进程 一个进程创建,他会生成几块: 代码段:进程执行的程序代码数据段:全局变量,静态变量,在进程生命周期中是动态可变的堆:动态分配的内存区域,malloc、calloc、real…

Ubuntu安装mysql,并使用IDEA连接mysql

一、安装Mysql 1.更新源 sudo apt-get update2.安装Mysql apt-get install mysql-server3.检查是否安装成功 mysql --version4.启动和关闭mysql的命令如下: #启动 sudo service mysql start #关闭 sudo service mysql stop #重启 sudo service mysql restart5.查看mysql运行…

JavaDS —— 二叉搜索树、哈希表、Map 与 Set

前言 我们将学习 Map 与 Set 这两个接口下的 TreeMap 与 TreeSet ,HashMap 与 HashSet ,在学习这四个类使用之前,我们需要先学习 二叉搜索树与 哈希表的知识。 二叉搜索树 在学习二叉树的时候,我们就已经了解过二叉搜索树的概念…

ctfshow-web入门-php特性(web142-web146)

目录 1、web142 2、web143 3、web144 4、web145 5、web146 1、web142 要求 v1 是数字,之后将 v1乘以 0x36d(即16进制的869)五次,然后将结果转换为整数并赋值给变量 $d,使用 sleep 函数使程序休眠 $d 秒&#xff0c…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 项目排期安排(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

CentOS7 yum报错Cannot find a valid baseurl for repo

问题 Loaded plugins: fastestmirror Determining fastest mirrors Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infravag error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown…

基于多种机器学习算法的短信垃圾分类模型

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主导入第三方库读取数据数据预处理数据分析与可视化机器学习建模贝叶斯逻辑回归支持向量机随机森林XGBoost总结每文一语 有需要本项目的代码或文档以及全部资源,或者部署调试可以私…

阅读笔记2:董超底层视觉之美|底层视觉是什么?

原文链接:https://mp.weixin.qq.com/s/9EQNwXqCM6odwe5n9dOrmw 本文针对底层视觉给出了一个大致的定义,然后通过底层视觉与人工智能、计算机视觉、图像处理等相关概念的对比来对底层视觉做了进一步的界定。 1. 底层视觉是什么 以像素级图像为输入、处…

利用小爱同学与点灯科技+esp8266+舵机,制作智能关灯神器:小白也可制作,米家同步设备可实现多部手机进行控制。(亲测有用)

利用小爱同学与点灯科技,制作智能关灯神器:小白也可制作,米家同步设备可实现多部手机进行控制。 文章目录 利用小爱同学与点灯科技,制作智能关灯神器:小白也可制作,米家同步设备可实现多部手机进行控制。1.…

vue3 快速入门 (六) : vue中调用HTTP请求

1. 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 1.91.0 2. 访问HTTP 在Vue中,访问HTTP,可以使用axios第三方库。 axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js。 axios使用简…

一步步理清开源路径规划导航引擎GraphHopper

一步步理清开源路径规划导航引擎GraphHopper,学习应用 GraphHopper简介 源码用 Java 编写,开发人员可以通过 Maven 轻松上手。可以用作** Java 库**来计算两个或多个点之间路线的距离、时间、逐向指示和许多道路属性。可以用作独立的 Web 服务器来计算…

redis的学习

! 快速入门 安装 1.使用docker安装redis docker pull redisdocker run -d --name redis -p 6379:6379 --restart unless-stopped -v /etc/docker/Redis/data:/data -v /etc/docker/Redis/conf/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/e…

Python 百题(实战快速掌握语法)_2(链表)

目录 实现链表类 挑战介绍 挑战内容 挑战要求 示例代码 版权说明 参考答案 代码分析: Node 类 LinkedList 类 方法分析 总结 删除链表的重复项 挑战介绍 挑战内容 挑战要求 示例代码 版权说明 参考答案 代码分析: 寻找链表倒数第 k…

算法笔记--知识点记录2

enumerate函数 enumerate 是 Python 中的一个内置函数,它用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,通常用在 for 循环当中。 使用 enumerate 可以同时获得每个元…

什么是C++活锁?

听过太多的死锁(Deadlock),今天来聊聊什么是C活锁(Livelock)。 C中的活锁(Livelock)并非特指C语言本身的一个概念,而是并发编程和操作系统中可能遇到的一种现象。活锁指的是任务或者…

数据库 执行sql添加删除字段

添加字段: ALTER TABLE 表明 ADD COLUMN 字段名 类型 DEFAULT NULL COMMENT 注释 AFTER 哪个字段后面; 效果: 删除字段: ALTER TABLE 表明 DROP COLUMN 字段;

【C++】C++入门知识(上)

好久不见&#xff0c;本篇介绍一些C的基础&#xff0c;没有特别的主题&#xff0c;话不多说&#xff0c;直接开始。 1.C的第一个程序 C中需要把定义文件代码后缀改为 .cpp 我们在 test.cpp 中来看下面程序 #include <stdio.h> int main() {printf("hello world\n…