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

news2024/11/24 11:23:21

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者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.coloradmin.cn/o/1806365.html

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

相关文章

[ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(3)

1.需求分析: 我们现在已经能够让这片地形出现在任意地方,只要角色走在这片地形上,就能够产生痕迹,但这片区域总是需要人工指定,又无法把这片区域无限扩大(显存爆炸),因此尝试使角色无…

【BUG】已解决:Could not find a version that satisfies the requirement tensorflow

已解决:Could not find a version that satisfies the requirement tensorflow 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,同时是武汉城市开发者社区主理人 擅长.net、C…

Java抽象队列同步器AQS

AQS介绍 AQS是一个抽象类,主要用来构建锁和同步器。 public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { }AQS为构建锁和同步器提供了一些通用功能的实现,因此,使用…

基于STM32开发的智能语音助理系统

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取,感谢支持!⬇ 点击领取更多嵌入式详细资料 问题讨论,stm32的资料领取可以私信! 目录 引言环境准备智能语音助理系统基础代码实现&#xff…

BFS实现图的点的层次-java

加强对广度优先搜索的理解,其实就是主要的3个步骤,外加数组模拟单链表是基础,要搞懂。 目录 前言 一、图中点的层次 二、算法思路 1.广度优先遍历 2.算法思路 三、代码如下 1.代码如下(示例): 2.读入…

【Python教程】2-函数、逻辑运算与条件判断

在整理自己的笔记的时候发现了当年学习python时候整理的笔记,稍微整理一下,分享出来,方便记录和查看吧。个人觉得如果想简单了解一名语言或者技术,最简单的方式就是通过菜鸟教程去学习一下。今后会从python开始重新更新&#xff0…

0基础学习区块链技术——入门

大纲 区块链构成区块链相关技术Hash算法区块链区块链交易 参考资料 本文力求简单,不讨论任何技术细节,只是从简单的组成来介绍区块链技术,以方便大家快速入门。同时借助一些可视化工具,辅助大家有直观的认识。 区块链构成 顾名思…

一文掌握Vue3:深度解读Vue3新特性、Vue2与Vue3核心差异以及Vue2到Vue3转型迭代迁移重点梳理与实战

每次技术革新均推动着应用性能与开发体验的提升。Vue3 的迭代进步体现在性能优化、API重构与增强型TypeScript支持等方面,从而实现更高效开发、更优运行表现,促使升级成为保持竞争力与跟进现代前端趋势的必然选择。本文深度解读Vue3 响应式数据data、生命…

④-1单细胞学习-cellchat单数据代码补充版

目录 1,数据输入及处理 ①载入包和数据 ②CellChat输入数据准备 ③构建CellChat对象 ④数据预处理 2,细胞通讯预测 ①计算细胞通讯概率 ②提取配受体对细胞通讯结果表 ③提取信号通路水平的细胞通讯表 ④细胞互作关系可视化 1)细胞…

服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了

echo off set pathC:\Program Files\Java\jre1.8.0_191\bin START "YiXiangZhengHe-8516" "%path%/java" -Xdebug -jar -Dspring.profiles.activeprod -Dserver.port8516 YiXiangZhengHe-0.0.1-SNAPSHOT.jar 将set path后面改成jre的bin文件夹 START 后…

数据:人工智能的基石 | Scale AI 创始人兼 CEO 亚历山大·王的创业故事与行业洞见

引言 在人工智能领域,数据被誉为“新石油”,其重要性不言而喻。随着GPT-4的问世,AI技术迎来了新的浪潮。众多年轻创业者纷纷投身这一领域,Scale AI的创始人兼CEO亚历山大王(Alexander Wang)就是其中的佼佼…

推荐4个好用有趣的软件

MyComic——漫画聚合软件 MyComic是一款界面简洁、分类详尽的漫画阅读软件,专为动漫爱好者设计。它提供了丰富的高清漫画资源,支持在线免费阅读,并且可以一键下载到书架,方便随时离线观看,节省流量。用户可以轻松找到喜…

5分钟快速带了解fl studio21破解汉化版安装激活指南

随着数字音乐制作的快速发展,越来越多的音乐制作软件涌现出来,而FL Studio无疑是其中的佼佼者。作为一款功能强大、易于上手的音乐制作软件,FL Studio V21中文版在继承了前代版本优秀基因的基础上,进一步提升了用户体验&#xff0…

电脑回收站清空了怎么恢复回来?分享四个好用数据恢复方法

电脑回收站清空了还能恢复回来吗?在使用电脑过程中,很多小伙伴都不重视电脑的回收站,,有用的没用的文件都往里堆积。等空间不够的时候就去一股脑清空回收站。可有时候会发现自己还需要的文件在回收站里,可回收站已经被清空了……那…

IC元器件

1.电阻: 电阻的作用: 1.与负载串联:做限流分压 2.电阻并联:将小功率电阻并联成大功率,防烧毁 2.电容: 电容就是两块导体+中间的绝缘材料(相当于两个人坐在一起加上中间的空…

基于vue的音乐播放器的设计与实现(论文+源码)_kaic

摘 要 当下,如果还依然使用纸质文档来记录并且管理相关信息,可能会出现很多问题,比如原始文件的丢失,因为采用纸质文档,很容易受潮或者怕火,不容易备份,需要花费大量的人员和资金来管理用纸质文…

【Apache Doris】周FAQ集锦:第 5 期

【Apache Doris】周FAQ集锦:第 5 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

Python第二语言(六、Python异常)

目录 1. 捕获异常(try: except: else: finally:) 1.1 概念 1.2 基础语法(try: except:) 1.3 捕获异常(异常也有类型) 1.4 捕获多个异常(try:except(Name…

详解 Flink 的 ProcessFunction API

一、Flink 不同级别的 API Flink 拥有易于使用的不同级别分层 API 使得它是一个非常易于开发的框架最底层的 API 仅仅提供了有状态流处理,它将处理函数(Process Function )嵌入到了 DataStream API 中。底层处理函数(Process Func…

Flutter项目开发模版,开箱即用

前言 当前案例 Flutter SDK版本:3.22.2 每当我们开始一个新项目,都会 引入常用库、封装工具类,配置环境等等,我参考了一些文档,将这些内容整合、简单修改、二次封装,得到了一个开箱即用的Flutter开发模版…