注意力机制详解笔记 Attention is all I donot understand!

注意力机制好奇了太久,QKV知道是什么但是一直没搞懂为什么,这段时间终于眼一闭心一横摁头看了一天视频,3B1B大佬太强了!基于GPT看了三个视频,基本讲的toy model,没有讲“硬核”的如何训练和码代码,但是完全满足了我的求知欲和总缠绕在脑海里的不确定性。

【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章_哔哩哔哩_bilibili

【官方双语】直观解释注意力机制,Transformer的核心 | 【深度学习第6章】_哔哩哔哩_bilibili

【官方双语】直观解释大语言模型如何储存事实 | 【深度学习第7章】_哔哩哔哩_bilibili

.总体流程:

GPT的全称是Generative Pretrained Transformer,也就是生成式预训练模型,最初的attention结构出现在2017年谷歌的翻译模型里,也就是大名鼎鼎的《Attention is all you need》,后来常见任务、也是这一系列视频用到的任务,是怎么基于提供的段落预测接下来的内容,虽然也是T2T模型但是难度和实际不一样了。

GPT的总体信息流动路径如下:

1.分割为Tokens

tokens可以翻译为语素,大致可以理解为一个单词或者一个汉字,但是其实划分更细,比如cleverest可能会把clever-和-est分割为两个tokens,亦或者一个标点或者一个词根也会被分为一个token,在图像中可能tokens会被划为一个一个像素。但是整体便于理解可以视为一个一个单词

每个token对应一个表示语义的向量,向量在空间中相近表示语义相近的词。

这里作者附了一个非常好玩的代码,可以试着输出一下不同单词的embedding:

In [21: import
# You need to pip install gensim
In [3]: model = gensim.downloader.load("glove-wiki-gigaword-50")
In [4]: model["tower"]

2.过Attention结构

根据上下文(context)优化token的语义

3.过MLP

(Multilayer Perception 多层感知器)实现每个token独立优化,被认为是存储信息和记忆的关键部分。

在实现中 往往是1-2-3-2-3-2-3-2-3-....-输出这样的过程,会过很多个attention-MLP的循环直到最后输出过一个softmax认为是下一个位置是tokens的概率分布。

从整体来看,GPT的格式为system prompt+user prompt的形式~

背景知识: 

GPT参数量

总体GPT-3的数据量超过1750亿个参数,具体如下,在接下来的几章会分别讲述这些参数的意义。

embedding:

词嵌入,也就是学习到每个token的表征,GPT有50257个备选tokens,学习到的表征是12288维,因此这个表示表征的矩阵是122888*50257的参数量 

每个token对应的这个12288维的表征,直观上可以用于找新词。 一个非常toy的例子:

虽然这个和现实出入很大,但是很有助于直观了解,如果我们有男性君主和男性女性三个tokens的表征,可以“猜”得queen对应的token的表征——E(king)+(E(woman)-E(man))

最终步:

把最后的向量通过“解嵌入矩阵”和softmax变成预测下一个位置是每一个token的概率:

tricks:

值得一提的是,此处有加入温度作为trick,温度越高使得较小值的P越高,这样各个不同的概率差别没那么大,采样的时候更有丰富性,反之如果T=0,那么一定会输出概率最大值,更稳定也更刻板,可以理解为T越大越有多变性和创造性,但是不会改变相对大小关系,也就是小的概率差别小但是一定不会比大概率的大。 

Attention(self-attention)

作用:

由于单纯看每一个token容易造成歧义(比如可能出现一词多义)因此理解特定token需要上下文关联。

1.精细化token的含义

2.允许模型相互传递嵌入的表征向量包含的信息  

接下来以最简单的one head self-attention为例,详细讲讲QKV怎么理解意思。

Query

每当我们想试试下一位置是不是该token,都要像之前的位置提问。比如,我们想知道creature的位置是不是creature,我么要考虑“前面有没有形容词?”---如果有可能这个位置会是名词,那么这个提问就是creature对应的query

 

这个query怎么获得?用我们之前讲过的embedding获得的表征(12288维)乘上一个矩阵W_Q,这个矩阵W_Q表示了query的获得方法,也就是我们为了实现找到query需要学习的参数量。在GPT-3中,我们获得的query的维数是128,(可以理解为我们每个token可以问128个问题,)那么此处需要12288*128个参数来习得这样一套query。

Key

有了当前位置的tokens们的提问自然要有前面tokens的回复, 视频的图很形象:

 同样的,我们给每个token的key的长度为128,(可以理解为128个相对应的回答)

Key+Query=Attention Pattern

我们怎么检测前面的回答(Key)和当前位置的提问(Query)是不是对应呢? 非常自然的结论是,用点乘,两个向量是不是方向一致大小差不多~

实际应用中我们还要除以一个维数的常数,加上我们后面提到的Value就构成了常见的attention公式:

这样,QK的参数量分别为:

tricks:

值得一提的是,我们要用前文预测后文,所以不能知道后文的信息,也就是需要把上面的QV的矩阵变成上三角阵,实际应用中,把左下半角的值先变成非常小的负数再过softmax

可以看出,上下文的窗口大小非常影响预测质量,过小的窗口会导致记忆力很差的模型,过大的窗口又导致参数量过大,于是有了很多变体:

Value: 

V的主要目标是回答这个问题:如果要让QK(128维的向量)包含的信息影响tokens的嵌入(12288维的向量),应该怎么实现? 

值得一提的是,当我们用Q和K点乘获得了attention pattern后我们就不关心QK的具体值了 ,上面公式也表示了,我们用的V是这样实现的↓

也就是说,Q K表示了一个“重要性”或者“权重”,进而把加权后的V加入原始token的embedding上

tricks:

这样看,V要把Q*V(/\sqrt(d))中的12288维向量映射到另一个12288维向量(为了和原始embedding齐平),所以要有12288*12288参数量,但是实际上会用low-rank transformation的思路,转化为两个12288*128的矩阵

这两个分别指的是参数量表格中的Value矩阵(把原始12288维的QV的列 映射到128维的中间向量)和Output矩阵(把128维的中间向量映射到最终要加到embedding上的12288维向量)

也就是Value层实现需要12288*128*2的参数量

multi-head attention:

实际上,GPT-3用了好几个(96个)注意力机制并行,可以理解为问不同的问题给出不同的回答,并把这些heads输出的最终要加到embedding上的12288维向量一起加进去。

进而总的新的embedding的运算公式为:

这也是为什么参数量表格里QKV都要乘上一个n_heads的原因。

习惯性的,一般会把96个output矩阵放到一起形成超大矩阵称为实际的output矩阵。 

MLPs

结构:

多层感知机结构相信学过CNN的都耳熟能详,它的结构非常简单且清晰。

分析中,科学家们认为,GPT主要储存记忆就在MLPs里面,也是为什么这个简单的结构能占据了2/3的参数量。  

应用:

在应用中,2-3-2-3的结构会不断堆叠(96层,也就是参数量中乘上的n_layers)

值得一提的是,在MLPs中,不同于attention,每个token是被独立计算的,因此可以实现并行 

计算参数量也很容易,不加赘述。也就是第一个矩阵乘法放大,过一个简单的非线性函数,第二个矩阵再缩回原来的维数。

 此处针对大小有非常多的解释,我已经可以take it for granted,但是解释还挺巧妙也贴在这里。

“第一个线性层行可以视为嵌入空间的方向,神经元的激活程度表示给定向量与特定方向的一致程度,第二个线性层的列可视为若该神经元被激活应当加入多少信息给当前的embedding”

*superposition(叠加) 

 很有趣的一个结果,解释为什么增加特征维数能大幅度提高准确度:

正常来说,在n维线性空间中我们用不同方向表示不同的表征,基础的线性代数告诉我们,n维空间的表征个数(也就是基向量的个数)只有n,但是如果我们放宽条件,加个noise使得基向量不再要求90°的垂直而是可以在89°-91°的区间内,低维度看不出来,但是高维度空间可以大幅度提高特征数量。100维可以实现至少塞下10000个基向量,因此提高一维可以提供远超十倍的特征量。

有意思。

sparse autoencoder 可以follow一下。

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

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

相关文章

腾讯云对象存储服务(COS)

腾讯云对象存储服务(COS) 安全、可扩展、低成本的云存储解决方案 腾讯云 对象存储服务(COS,Cloud Object Storage) 是一种高可靠、高性能、可扩展的云存储服务,专为海量非结构化数据(如图片、…

Linux下安装VS Code

Centos 7 https://blog.csdn.net/weixin_63790642/article/details/132927888 安装存储库 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc密钥 sudo sh -c echo -e "[code]\nnameVisual Studio Code\nbaseurlhttps://packages.microsoft.com/yum…

win32汇编环境,窗口程序中使控件子类化的示例一

;运行效果 ;win32汇编环境,窗口程序中使编辑框控件子类化的示例一 ;窗口子类化,就是把某种控件,自已再打造一遍,加入自已的功能。比如弄个特殊形状的按钮,或只能输入特殊字符的编辑框 ;当然,一般来说,这都是…

数组中的逆序对(C++)

目录 1 问题描述 1.1 输入描述: 1.2 示例1 1.3 示例2 2 解题思路 2.1 暴力解法 2.2 归并排序法 3 代码实现 3.1 暴力解法 3.2 归并排序法 4 代码解析 4.1 暴力解法 4.1.1 初始化 4.1.2 判断是否是逆序对 4.2 归并排序法 4.2.1 InversePairs 主函数 …

iphone上ios设备开启safari开发者debug模式,配合mac电脑使用

1.mac操作 mac的safari上打开开发者模式,打开显示网页开发者功能 2.开启IPhone的Safari调试模式 启用 Web 检查 功能,打开 iPhone 依次进入 设置 > Safari浏览器 > 高级 > 网页检查器 > 启用。 3.调试步骤 先用IPhone 的Safari打开要调试…

Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存

Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 目录 Flutter 学习之旅 之 flutter 在 Android 端进行简单的打开前后相机预览 / 拍照保存 一、简单介绍 二、简单介绍 camera 三、安装 camera 四、简单案例实现 五、关键代码 一、简单…

[BUUCTF]web--wp(持续更新中)

ps:文章所引用知识点链接,如有侵权,请联系删除 [极客大挑战 2019]EasySQL 题目类型:简单SQL注入 发现是登录页面,用万能登录方法测试,两种语句均能解出flag [极客大挑战 2019]Havefun 题目类型:代码审计…

【Java项目】基于SpringBoot的CSGO赛事管理系统

【Java项目】基于SpringBoot的CSGO赛事管理系统 技术简介:采用SpringBoot框架、Java语言、MySQL数据库等技术实现。 系统简介:CSGO赛事管理系统是一个基于B/S架构的管理系统,主要功能包括前台和后台管理模块。前台系统功能模块分为&#xf…

Grafana接入Zabbix数据源

1. 对接 Zabbix 1.1 安装 Zabbix 插件 在线安装&#xff1a; 1.2 配置 Zabbix 数据源 点击 Configuration > Data Sources > Add data source。选择 Zabbix&#xff0c;填写&#xff1a; URL&#xff1a;http://<zabbix-server>/api_jsonrpc.phpUsername&#x…

UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹

视频参考&#xff1a;https://www.bilibili.com/video/BV1KpXSYdEdo/ 从地球观察土星的运动轨迹 从地球观察火星 轨迹 从地球观察金星的运动轨迹

【鸿蒙操作系统】- 1:实习阶段的一些总结

本文目录 1. 序2.鸿蒙与欧拉的概念微内核LiteOS鸿蒙微内核POSIX标准 3.实习干了些什么身份鉴别访问控制恶意代码防范安全审计入侵防范性能压测检查系统版本网络测试常见的linux测试命令 1. 序 之前在某国企实习的时候&#xff0c;有幸参与了鸿蒙系统、鸿蒙欧拉的项目&#xff…

张岳教授:语言模型推理与泛化研究 | ICLR 2025 特邀报告与团队专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; AITIME 01 ICLR 2025预讲会特邀报告 AITIME 02 ICLR 2025预讲会西湖大学张岳老师实验室专场 01 AI生成文本的自动化检测 Glimpse: Enabling White-Box Methods to Use Proprietary Models for Zero-Shot LLM-Ge…

Qt显示一个hello world

一、显示思路 思路一&#xff1a;通过图形化方式&#xff0c;界面上创建出一个控件显示。 思路二&#xff1a;通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;显示 hello world 即可。 qmake 基于 .…

Qt基础入门-详解

前言 qt之路正式开启 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44…

React Native从入门到进阶详解

React Native知识框架从入门到进阶的问题。首先需要结合我搜索到的资料来整理出结构化的内容。证据中有多本书籍和文章&#xff0c;可能会涉及不同的章节和重点&#xff0c;需要仔细梳理。 首先&#xff0c;根据邱鹏源的《React Native精解与实战》将知识分为入门和进阶两大部分…

win本地vscode通过代理远程链接linux服务器

时间&#xff1a;2025.2.28 1. win本地下载nmap.exe nmap官网 https://nmap.org/或者 https://nmap.org/download#windows下载win版本并安装。 2. vscode插件Remote-SSH 插件下载Remote-SSH 3. 配置 按照图中顺序配置ssh 1.点击左侧工具栏的“小电视”图标 2.点击ssh的…

MIT 6.S184 流匹配与扩散模型公开课

课程简介 MIT 2025年开设的关于流匹配算法与扩散模型的新课&#xff0c;6.S184: Generative AI with Stochastic Differential Equations&#xff08;生成式人工智能与随机微分方程&#xff09;&#xff0c;授课教师是Peter Holderrieth和Ezrah Erives。 生成式AI是一种能创建…

SQL server配置ODBC数据源(本地和服务器)

本地配置 1. 控制面板中找到系统ODBC数据源&#xff08;打开控制面板直接搜&#xff09; 2. 选择“系统DSN”&#xff0c;点击“添加” 3. 选择“SQL server” 4. 名称和描述自己填&#xff0c;服务器选择本机设备名称 5. 选择ID和密码验证&#xff0c;并填写本地SQL server登…

JVM线程分析详解

java线程状态&#xff1a; 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用start()方法。运行(RUNNABLE)&#xff1a;Java线程中将就绪&#xff08;ready&#xff09;和运行中&#xff08;running&#xff09;两种状态笼统的称为“运行”。 线程对象创建…

Redis - 高可用实现方案解析:主从复制与哨兵监控

文章目录 Pre概述Redis 高可用实现方案一、主从复制机制1.1 全量同步流程1.2 增量同步&#xff08;PSYNC&#xff09;流程 二、哨兵监控机制2.1 故障转移时序流程 三、方案对比与选型建议四、生产环境实践建议 Pre Redis-入门到精通 Redis进阶系列 Redis进阶 - Redis主从工作…