Transformer学习笔记(一)

Transformer学习笔记

基于 3B1B 可视化视频

自注意力机制

1.每个词的初始嵌入是一个高维向量,只编码该单词含义,与上下文没有关联

2.对初始向量进行位置编码,在高维向量中编码进位置信息(单词在语言序列中的位置信息),称此时的向量为E(GPT3中为12288维)

3.每个向量E,配有一个查询向量Q,用于向自身前面的向量序列查询信息(比如一个名词的查询向量中可能就蕴含着下面的问题:我的前面有没有对我的形容词?),每个向量的查询向量通过查询矩阵Wq生成: E·Wq -> Q. 因此,Wq的横向维度会与词向量的维度相match,纵向维度未要求(GPT-3中是128维)。所以E·Wq -> Q这个过程相当于把一个较高维的词向量映射到了一个低维空间。Wq矩阵在一个模型中是固定的,其中的参数是通过训练得到的。

4.每个向量E,同时配有一个键向量,用于回应查询向量的提问(比如后方有个词向量的查询向量问到:我的前方有没有形容我的形容词?键向量就用于回应这个查询向量),每个词向量的键向量通过键矩阵Wk生成:E·Wk -> K. 因此这个过程也是会把原本较高维度的词向量映射到一个低维空间(GPT-3中是128维)中。具体回应过程可以看成是在对比Q和K的匹配程度,匹配程度越高,说明该向量E与发出查询向量Q的E的关联性也就越大。这里用点积来衡量两个向量的匹配程度,点积结果越大,二者间的匹配程度越高,于是我们说,这个词E“注意到了”后面的词的嵌入。

在这里插入图片描述

5.如上图,在求出上述匹配度矩阵后,以匹配度作为权重,对每一列进行加权求和。因此我们想要把权重调整为在0-1之间的值并且其权重总和为1。因此,对每列权重数据做一次softmax()

在这里插入图片描述

将得到的矩阵称为Attention Pattern。

在一些模型中,我们往往会看到Cross-Attention,在Cross-Attention中,Wq和Wk会作用在不同的数据集上,如下图:

回到Self-Attention上,可以看见Transformer的原始论文中对Attention Pattern的表现形式:

在这里插入图片描述


从以上可以看出,每个词向量既接收来自身后的询问Q也接收来自词向量之前的询问Q。这样的做法会产生以下的效果:

训练时输入,“a fluffy blue creature roamed the verdant forest”,最终经过上述一系列计算根据forest的向量值输出下一个预测词,再根据输出与原本结果对模型参数进行调整,这样的过程固然可以,但效率太低。这一长串的文本只能对模型进行一次训练。由此我们提出一个方法:每输入一个词便进行一次预测训练。即达到以下效果:

a -预测下一个词                     
a fluffy -预测下一个词
a fluffy blue -预测下一个词
a fluffy blue creature -预测下一个词
a fluffy blue creature roamed -预测下一个词
a fluffy blue creature roamed the -预测下一个词
a fluffy blue creature roamed the verdant forest -预测下一个词

为了能使运算同步进行,每个词向量只对自己身后的词向量的查询进行匹配度回应,而不对自己之前的词向量发出的查询进行回应。或者说,每个向量只对自己之前的词向量发出查询请求,而不对自己身后的词向量发出查询请求(体现了自回归特性)。不然的话,比如此时训练序列为a fluffy blue creature roamed the此时forest收到了来自其前面词向量的查询并进行了回应,那就相当于透露了答案信息。

所以,在此,我们希望在Attention Pattern矩阵中主对角线的下半部分的值都为0。为了实现这一效果,在softmax之前将主对角线以下的值全部设为负无穷。这个步骤被称为Masking。(并不是所有的注意力机制都会运用此方法)

Masking这一步骤不仅在GPT的训练中用到,在使用GPT作为工具的时候也同样在运用。

从这也可以发现,随着文本输入越来越长,其Attention Pattern呈现平方指数级增长,因此这也成为了大语言模型的一个瓶颈,为解决这一瓶颈,有很多新的研究在进行中。


得到Attention Pattern过后,接下来介绍值向量V。每个词向量E配有一个值向量V,用于衡量自身的动量(例如:red hat,对于hat来说在高维空间指向的是初始embeding的位置,而加上red的值向量后,hat在高维空间中将指向红色帽子的位置)。每个词向量的值向量V通过值矩阵生成:Wv·E -> V。由于V最终要作为动量与词向量相加,所以V的维度要与词向量的维度一致,也因此Wv的纵向维度要与E一致(12288*12288)。Wv在模型中是固定的,其参数通过训练得到。在得到每个向量的值向量后,根据Attention Pattern中的响应程度,对每个词向量更新:
E j = E j + ∑ i = 1 j V i ∗ a t t e n t i o n S c o r e Ej=Ej+\sum_{i=1}^j Vi*attentionScore Ej=Ej+i=1jViattentionScore
以上为Single-Head Attention的工作流程。

对于Multi-Head Attention,即模型中有多个Wq、Wk、Wv矩阵,即每个词向量有多个查询向量V、键向量K,值向量V。可以将一幅Wq、Wk、Wv理解为一个Head(GPT3中有96个头),最终词向量的改变量为每个Head中的改变量相加。

在Transformer相关论文中Value矩阵通常会被转换为Wv↑和Wv↓两个矩阵相乘,此时Value矩阵特指Wv↓,这样做的目的是为了实现并行计算,但原理是相同的。


MLP多层感知器

我们对LLM输入Michael Jordan plays,大语言模型会输出basketball。对于一个不认识Michael Jordan的人来说,他能理解这句话的每个单词的含义,但是无法确定plays应该输出什么。所以,这个LLM一定存储了一个记忆,这个记忆就是Michael Jordan是打篮球的,这也是一个事实。LLM是如何记住这一事实的,即是我们要讨论的问题。

回想下手写数字识别的Neural Network,它的网络中也存储了一些记忆,能够识别输入图像的图形特征。带着这个思维,将能更好的理解Transformer中记忆的存储过程和结构。

在经过Self-Attention后,我们得到更新后的词向量序列。相较于初始的单词Embeding,此时的词向量序列embeded了更多的context信息。

MLP的结构如下图:

在这里插入图片描述

经过MLP时,各个词向量间不再相互影响,每个词向量并行的经过相同的运算。因此,关注一个词向量的运算过程就可以知道所有词的运算过程。

1.第一层映射

由于MLP的第一个矩阵会把词向量映射到更高的维度,所以称此矩阵为W↑。可以看成将矩阵W↑的行向量与词向量做点积,还记得Self-Attention中查询向量Q和键向量V吗?查询向量Q和键向量V做点积,从而计算出二者间的响应度(匹配度),这里也可以这样理解。可以把W↑的行向量看做一个个询问向量,向词向量询问各种问题,由此得出一个响应匹配度。在GPT3中W↑的纵向维度为4*12288。

之后加上一个Bias(用于增加参数调节的灵活度)。于是上述过程可用公式表示为:

接下来将蕴含响应度的向量通过一个激活函数,这里采用的是ReLU函数(很多模型会使用一个稍作修改的函数GELU)。

在经过激活函数后,我们得到类似于AttentionScore的向量,在Self-Attention中将值矩阵Wv乘以AttentionScore作为词向量的改变量。这里将该向量乘以W↓获得该词向量的补充信息(也要加上一个Bias向量),可以发现只有在第一轮映射中值大于0的地方(通过ReLU后被激活,这里没有考虑Bias对第一轮映射结果的改变),才会在第二轮映射中添加响应位置的向量。过程如下:

最后将获得的补充信息添加到词向量中得到一层MLP的完整运算过程:

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

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

相关文章

4.4.5 timer中断流向Linux(从interrupt log回放)

4.4.5 timer中断流向Linux(从interrupt log回放) 按上文所述,timer中断3已经记录到root domain的interrupt log。在《3.4.1.3 IPIPE interrupt log数据结构》中,已经讨论过interrupt log的记录与回放。本小结,讨论什么…

WinDefender Weaker

PPL Windows Vista / Server 2008引入 了受保护进程的概念,其目的不是保护您的数据或凭据。其最初目标是保护媒体内容并符合DRM (数字版权管理)要求。Microsoft开发了此机制,以便您的媒体播放器可以读取例如蓝光,同时…

基于redis完成延迟队列

添加依赖 使用redisson完成延迟队列效果 <!-- redisson依赖 --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.4</version> <!-- 请使用最新版本 --></dependency&g…

星辰资讯 | TiDB v7.5.4 v8.4.0 发版

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/6e299751 TiDB 8.4.0 DMR 发版 11 月 11 日&#xff0c;TiDB 8.4.0 版本发布&#xff0c;以下是该版本的一些关键特性和改进&#xff1a; 性能 分区表全局索引成为正式功能 &#xff1a;提高检索…

Spring基础

Spring基础 目录&#xff1a; 一、Spring框架简介 二、Spring容器机制 一、Spring框架简介 1. Spring发展历程 •在Spring兴起之前&#xff0c;Java企业级开发主要通过EJB (Enterprise JavaBean)完成。EJB是服务器端的组件模型&#xff0c;由于它过于依靠EJB容器&#xf…

二分查找法(leetcode 704)

在一个数组里找一个target&#xff0c;判断这个target在不在这个数组里&#xff0c;如果在&#xff0c;返回这个数组所对应的这个元素所对应的下标&#xff0c;否则返回-1. 易错点&#xff1a; &#xff08;1&#xff09;while(left<right) vs while(left<…

python的matplotlib实现数据分析绘图

目录 需求 效果 数据分析绘图示例 代码解释 运行结果 需求 分析一个班级中学生成绩分布&#xff0c;并绘图 效果 数据分析绘图示例 import matplotlib.pyplot as plt import numpy as np# 假设的学生成绩数据 np.random.seed(0) # 设置随机种子以确保结果可复现 score…

STM32电源管理—实现低功耗

注&#xff1a; 本文是学习野火的指南针开发板过程的学习笔记&#xff0c;可能有误&#xff0c;详细请看B站野火官方配套视频教程&#xff08;这个教程真的讲的很详细&#xff0c;请给官方三连吧&#xff09; 在响应绿色发展的同时&#xff0c;在很多应用场合中都对电子设备的功…

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息&#xff0c;在MyBatis框架中&#xff0c;首先需要通过SqlSessionFactory创建SqlSession&#xff0c;然后才能使用SqlSession获取对应的Mapper接口&#xff0c;进而执行查询操作 在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xm…

【视频讲解】Python深度神经网络DNNs-K-Means(K-均值)聚类方法在MNIST等数据可视化对比分析...

全文链接&#xff1a;https://tecdat.cn/?p38289 分析师&#xff1a;Cucu Sun 近年来&#xff0c;由于诸如自动编码器等深度神经网络&#xff08;DNN&#xff09;的高表示能力&#xff0c;深度聚类方法发展迅速。其核心思想是表示学习和聚类可以相互促进&#xff1a;好的表示会…

Java 网络编程(二)—— TCP流套接字编程

TCP 和 UDP 的区别 在传输层&#xff0c;TCP 协议是有连接的&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 而UDP 协议是无连接的&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 有连接和无连接的区别是在进行网络通信的时候&#xff0c;…

机器学习—正则化和偏差或方差

正则化参数的选择对偏差和方差的影响 用一个四阶多项式&#xff0c;要用正则化拟合这个模型&#xff0c;这里的lambda的值是正则化参数&#xff0c;它控制着你交易的金额&#xff0c;保持参数w与训练数据拟合&#xff0c;从将lambda设置为非常大的值的示例开始&#xff0c;例如…

【笔记】企业架构TOGAF 10的架构从4A增加至6A

背景 谈谈学习TOGAF 10的总结和笔记&#xff0c;说说较9.2版本有哪些变化。最直观的当属从原来的4A架构升级到6A架构&#xff0c;单独从原来的4A中提炼形成了安全架构、系统架构两个概念&#xff0c;谈谈理解并回顾总结一下学习笔记。 TOGAF 10 将安全架构单独列为一种架构&…

AI写作(十)发展趋势与展望(10/10)

一、AI 写作的崛起之势 在当今科技飞速发展的时代&#xff0c;AI 写作如同一颗耀眼的新星&#xff0c;迅速崛起并在多个领域展现出强大的力量。 随着人工智能技术的不断进步&#xff0c;AI 写作在内容创作领域发挥着越来越重要的作用。据统计&#xff0c;目前已有众多企业开始…

【模块一】kubernetes容器编排进阶实战之资源管理核心概念

kubernetes 资源管理核心概念 k8s的设计理念—分层架构 CRI-container runtime interface-容器运行接口 CNI-container network interface-容器网络接口 CSI-container storage interface-容器存储接口 k8s的设计理念—API设计原则 https://www.kubernetes.org.cn/kubernete…

DBeaver中PostgreSQL数据库显示不全的解决方法

本文介绍在DBeaver中&#xff0c;连接PostgreSQL后&#xff0c;数据库显示不全的解决方法。 最近&#xff0c;在DBeaver中连接了本地的PostgreSQL数据库。但是连接后打开这个数据库时发现&#xff0c;其所显示的Databases不全。如下图所示&#xff0c;Databases只显示了一个pos…

ElasticSearch学习笔记二:使用Java客户端

一、前言 在上一篇文章中&#xff0c;我们对ES有了最基本的认识&#xff0c;本着实用为主的原则&#xff0c;我们先不学很深的东西&#xff0c;今天打算先学习一下ES的Java客户端如何使用。 二、创建项目 1、普通Maven项目 1、创建一个Maven项目 2、Pom文件 <dependenc…

MySQL8 安装教程

一、从官网下载mysql-8.0.18-winx64.zip安装文件&#xff08; 从 https://dev.mysql.com/downloads/file/?id484900 下载zip版本安装包 mysql-8.0.18-winx64.zip 解压到本地磁盘中&#xff0c;例如解压到&#xff1a;D盘根目录&#xff0c;并改名为MySQL mysql-8.0.34-winx6…

如何将LiDAR坐标系下的3D点投影到相机2D图像上

将激光雷达点云投影到相机图像上做数据层的前融合&#xff0c;或者把激光雷达坐标系下标注的物体点云的3d bbox投影到相机图像上画出来&#xff0c;都需要做点云3D点坐标到图像像素坐标的转换计算&#xff0c;也就是LiDAR 3D坐标转像素坐标。 看了网上一些文章都存在有错误或者…