LLM的基础模型8:深入注意力机制

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

自注意力

Self-Attention

自注意力的主要功能是从输入序列本身生成上下文感知向量,而不是像基于RNN的编码器-解码器架构那样同时考虑输入和输出。在继续往下之前,还是需要帮助大家温习下之前的内容,也请各位能够认真的理解自注意力。

在例句中,“火车准时离开车站”中有 7 个Tokens,可以得到一个 7x7 的自注意力得分矩阵。根据图中描绘的自注意力得分,“火车”一词更关注“车站”一词,而不是关注其他单词。自注意力分数有助于理解给定句子中单词的上下文含义。例如,这里的“车站”一词用于火车站的上下文,而不是用于其他上下文,如加油站或公共汽车站等。

自注意力分数是通过余弦相似度计算的,即两个词向量的点积。它用于评估两个词向量之间的关系强度或比较词向量之间的相似程度。

这些自注意力分数最后会被按照权重进行加权累加,最终输出一个向量可以理解为已经将上下文进行编码。例如,当前词为“站”这个词时,与“站”密切相关的词对总和的贡献更大(包括“站”这个词本身),而不相关的词几乎不会贡献任何词。由此产生的向量作为“站”一词的新表示,并结合了周围的上下文。在理解这句话的时候,火车站的上下文信息就被编码到最后的输出。

多头注意力

Multi-Head Attention

在Transformer中,大量的使用了多头注意力的模块,它的原理和自注意力差不多。下面来解释下这个模块和自注意力机制的关系。

在刚才提到的点积注意力中,如下图所示,输入序列通过代表查询Q、键K和值V的三个矩阵进行转换然后计算自注意力。其中绿色x(2)为一个Embedding向量。

而在多头注意力的背景下,某种意义三个矩阵可以被看作是一个单独的注意力头。增加单个自注意力头的输出维度和使用多个注意力头之间的区别在于模型如何处理数据并从中学习。虽然这两种方法都增加了模型表示数据不同特征或方面的能力,但它们的方式基本不同。

上面这张图想表达的是一个输入的Embedding可以和多套的QKV协同运算。论文上描述的是多个W变换到子空间,但是实现上一般采用分段的方式。大白话说是将Embedding的长度切分为n段分别做运算。比如原来Embedding是512维,假定32头,那么Embedding 会被切分成512/32=16维,相当于多个子空间。

例如,多头注意力机制中的每个注意力头理论上可以学习集中在输入序列的不同部分,捕捉数据中的各种方面或关系。这种多样性是多头注意力成功的关键,毕竟每一个Embedding基本上都是高维度,通过多头分别捕获数据在各个层面的依赖和关系。

例如有的头专门捕获感情因子,有的头专门捕获地域特征,有的头专门捕获人物关系等等……

多头注意力也可以更高效,特别是在并行计算方面。每个头部可以独立处理,使其非常适合现代硬件加速器,如擅长并行处理的 GPU 或 TPU。简而言之,使用多个注意力头不仅仅是为了增加模型的容量,而是为了增强其学习数据中多样特征和关系的能力。

交叉注意力

Cross-Attention

除输入部分外,交叉注意力计算与自注意力相同。交叉注意力说白了就是Q来至一个序列,而KV来至另一个序列。这些序列都是相同维度的嵌入序列。相比之下,自注意力输入是单个嵌入序列。而交叉注意力则是其中一个序列用作Q输入,而另一个序列用作K和V输入。

读者可以仔细观察上图,在传统的Transformer的架构中,自注意力机制一般在Encoder(下图左),而交叉注意力机制一般在Decoder(下图右)。

其实也很好理解,对大模型的提问输入在Encoder中经过自注意力抽取出查询的上下文信息,然后输入为K和V供给给Decoder,而Decoder一方面不断地工作产生新的Token,一方面不断地将已经输出的序列嵌入输出Q,再次和Encoder的K和V做交叉注意力,供后续的组件吐出下个Token的概率分布。

因果注意力

Causal-Attention

因果自注意的起源来至序列中某个位置的输出仅仅依赖于先前位置的已知输出,而不是基于未来位置。比如说Decoder,它是按照顺序产生Token,先产生的Token肯定无法依赖后产生的Token。因此对于处理的每个Token,因果注意力机制屏蔽了未来的Token。所谓的未来,就是在当前Token之后的尚未生成的Tokens。因此原来的自注意力矩阵则成为上三角矩阵,因为有一半是不需要计算的。

例如life生成的时候只需要计算和自己,当生成到life is的时候,则只需要计算is和life,is和自己,如此类推……

值得一提的是,每次生成的注意力矩阵每一行都需要归一化。这里有个小小的技巧,可以将尚未生成的Token标记为-∞,然后在由softmax进行归一化。

附录:多头注意力的变换过程

全景图

推导步骤1:

推导步骤2:

推导步骤3:

推导步骤4:

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

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

相关文章

在线按模板批量生成文本工具

具体请前往:在线按模板批量生成文本工具

URL的编码解码(一),仅针对ASCII码字符

用十六进制对特定字符编码,利用百分号标识搜索字符串解码十六进制字符。 (笔记模板由python脚本于2024年06月09日 18:05:25创建,本篇笔记适合喜好探寻URL的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free…

Java Set系列集合的使用规则和场景(HashSet,LinkedHashSet,TreeSet)

Set集合 package SetDemo;import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class SetDemo {public static void main(String[] args) {/*Set集合的特点:1.Set系列集合的特点:Set集合是一个存储元素不能重复的集合方…

Vue13-计算属性的简写

一、计算属性的简写 注意: 当计算属性只有get,没有set的时候,才能用简写形式!!!

svn的使用

【图文详解】入职必备——SVN使用教程-CSDN博客 使用SVNBucket作为服务端,来辅助学习. 什么时候会产生冲突呢? 原本A,B,服务器的版本都一致,都是最新版. A修改文件m,向服务器提交 B修改文件m,向服务器提交,这时候出现了冲突 双击冲突的文件,手动修改

---java 抽象类 和 接口---

抽象类 再面向对对象的语言中,所以的对象都是通过类来描述的,但如果这个类无法准确的描述对象的 话,那么就可以把这个类设置为抽象类。 实例 这里用到abstract修饰,表示这个类或方法是抽象方法 因为会重写motifs里的show方法…

【爬虫实战项目一】Python爬取豆瓣电影榜单数据

目录 一、环境准备 二、编写代码 2.1 分页分析 2.2 编码 一、环境准备 安装requests和lxml pip install requests pip install lxml 二、编写代码 2.1 分页分析 编写代码前我们先看看榜单的url 我们假如要爬取五页的数据,那么五个url分别是: htt…

再读高考作文题

新课标I卷:讨论了随着互联网和人工智能的普及,问题是否会变得越来越少,要求考生写一篇文章,表达自己对于这一现象的联想和思考。 从来就没有什么救世主 AI也不是​​​​​ 一直不会写作文,直到高中,才堪堪…

Java Web学习笔记30——打包部署

打包: 到资源管理器中再看下: 将这些文件压缩成一个zip文件,然后到nginx的html目录中执行unzip 解压即可。 部署: Nginx:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代…

使用JMeter软件压测接口配置说明

1、下载完该软件https://blog.csdn.net/wust_lh/article/details/86095924 2.点击bin文件中jmeter.bat脚本https://blog.csdn.net/wust_lh/article/details/86095924 3.官网地址https://jmeter.apache.org/download_jmeter.cgi 通过 【Options】->【Choose Language】变更为…

双列集合底层源码

tips: 竖着的箭头:重写 横着的箭头:继承

张大哥笔记:经济下行,这5大行业反而越来越好

现在人们由于生活压力大,于是就干脆降低自己的欲望,只要不是必需品就不买了,自然而然消费也就降低了,消费降级未必是不好的现象! 人的生物本能是趋利避害,追求更好的生存和发展空间,回避对自己有…

在线渲染3d怎么用?3d快速渲染步骤设置

在线渲染3D模型是一种高效的技术,它允许艺术家和设计师通过互联网访问远程服务器的强大计算能力,从而加速渲染过程。无论是复杂的场景还是高质量的视觉效果,在线渲染服务都能帮助您节省宝贵的时间。 在线渲染3D一般选择的是:云渲染…

生成式人工智能 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

雷电模拟器中控实现,直通源码

目录 前言 开发 需求 初始环境 UI搭建 功能实现 前言 本篇为易语言雷电模拟器中控项目实现操作,一般用于:脚本开发多线程模拟操作等起始模板框架,使用易语言原因为其前后端一体化,对于脚本开发而言更为方便。 开发 需求 以…

C语言详解(联合和枚举)

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥个人主页:奋斗的小羊 💥所属专栏:C语言 🚀本系列文章为个人学习笔记,在这里撰写…

论文阅读KAN: Kolmogorov–Arnold Networks

学习了最近大热的KAN网络 论文地址:https://arxiv.org/pdf/2404.19756 按我个人读论文的习惯总结了如下几点: 1,背景: 1)灵感来源:于Kolmogorov-Arnold表示定理,也就是多变量连续函数可以表…

【人工智能】第七部分:ChatGPT的未来展望

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

LeetCode | 1624.两个相同字符之间的最长子字符串

这道题拿到手想法就是去双重遍历暴力解,对于每个字符,从后往前遍历字符串,找到从后往前一直到本次遍历的这个字符串这段子串中和这个字符串相同的字符位置,然后得到子字符串的长度,和ans存储的值做一个比较&#xff0c…

副业赚钱:10个简单创意,轻松实现财务自由

嗨,我是兰若姐姐,我是从4月26号开始日更博客的,之前一直分享的是技术文档,但是在这个过程中,我发现这些文档只是解决了某一个人当下遇到的某个具体问题,但是对于他升值加薪没有任何帮助,所以我中…