LLM的基础模型6:注意力机制

news2024/9/8 15:51:32

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

本模块的核心目标之一是掌握如何构建和训练基础的Transformer模型。在我们深入讨论模型之前,有必要先来探讨一下注意力机制,这是Transformer模型中至关重要的组成部分。Transformer块在处理完输入序列后,会生成一系列不同的向量,这些向量实际上是用于所谓的“交叉注意力”机制的。本文分为两大部分,前部分则是通俗易懂的解释,后面的部分则是采用数学的视野去阐述。

小白解读(数学免疫)

给没有数学或者计算机背景的人解释注意力机制其实也不难。大模型某种意义上相当于人脑,很多模型的结构设计都来源于人脑。打个不恰当的比方,任何人看到一幅画面,或多或少都会被某个部分吸引,而且这个吸引点因人而异。这个被吸引的部分就是注意力机制。在大模型的训练过程中,通过样本不断地训练注意力机制相关的参数,让大模型能够快速的抓住上下文的重点,以便生成最妥当的后续内容。

从上图中可以看到注意力机制是任何自然语言处理的核心基石。

再举个例子,图书馆(语料)里有藏书(Value)。为了方便检索,每一本书都被做了标记(Key)。当任何人想要了解“漫威”(Query),系统(参数矩阵)会给根据要求给出相关条目以及条目的优先级,例如动漫有所关联,电影也有关联及乃至二战历史也有关联。

这时候大模型为提高效率,并不是所有的书都会仔细看。而是将一些关联度高的条目认真阅读,而关联度低的条目做概要扫描,然后就就对检索内容有全面的了解,之后就可以开始自动生成相关的内容。而注意力机制则是对应落地实现的一种高效算法。

注意力机制很早其实就有了,但是最有影响力的论文是2017年《Attention Is All You Need》,里面展示了如何将样例提炼最重要的信息。

注意力机制数学推理

首先,我们需要明确我们所使用的向量是什么,它代表了我们当前正在处理的标记。假设我们处于模型的第一层,那么输入的词嵌入向量就是我们所说的注意力向量。

注意力机制是通过三种类型的向量构建的:查询向量(Query)、键向量(Key)和值向量(Value)。对于当前处理的每个标记,我们都有一个查询向量;对于序列中的每个标记,我们都有一系列的键向量和值向量。通过将输入的词嵌入向量与特定的权重矩阵相乘,我们得到了查询向量。而查询向量(Q)、键向量(K)和值向量(V)都是通过模型学习得到的,这些权重在训练过程中不断调整。

文中有三个输入向量,每个向量4维。输入乘以权重矩阵之后得到各自的K和V向量。然后查询Q分别和K做点积运算(如图第1个蓝色框框的值为1*0+0*1+2*1=2)

分别求出每个蓝色框框的值之后,则将三个蓝色框架的值根据softmax归一化,即0+0.5+0.5=1

在注意力的计算公式中,使用查询向量(Q)与键向量(K)的转置进行点积运算,并应用softmax函数来获取每个键向量与查询向量的相关性得分。这样,我们就得到了一个与序列长度相同的注意力分数向量。然后用这些注意力分数对相应的值向量进行加权求和,得到最终的输出向量。

紧接着将蓝色框架的数值和V相差,然后累加得到第一个输出向量

注意力机制的关键在于,使用一个查询向量与序列中所有其他标记的键向量进行比较,以判断它们之间的相关性。这个过程在序列中的每个标记都可以并行计算,速度快,效果好。因此,在每次计算注意力时,我们会关注当前的查询向量,并将这个查询向量与所有的键向量进行比较,从而确定每个键向量与查询向量的相关程度。

以此类推,三个Q输入的时候,依次输出三个结果向量。注意的是,注意力机制可以多层,也就是这只是中间的某层。输出的结果可以作为下一层的输入。

总结一下,注意力机制其实要学习的就是三个矩阵,Q矩阵,K矩阵和V矩阵。它们用于和输入相乘,然后提炼出有效的信息存储于矩阵。

注意力机制的关键在于,使用一个查询向量与序列中所有其他标记的键向量进行比较,以判断它们之间的相关性。这个过程在序列中的每个标记都可以并行计算,速度快,效果好。

因此在每次计算注意力时需要关注当前的查询向量,并将这个查询向量与所有的键向量进行比较,从而确定每个键向量与查询向量的相关程度。

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

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

相关文章

【问题复盘】第三方接口变慢导致服务崩溃

一、事件经过 -1、一个不在公司的下午,接到客户投诉,说平台不能访问了。 0、介入调查,发现服务器http请求无法访问,https请求却可以正常访问,一时有些无法理解;(后来发现,http和htt…

Java核心: 为图片生成水印

今天干了一件特别不务正业的事,做了一个小程序用来给图片添加水印。事情的起因是需要将自己的身份证照片分享给别人,手边并没有一个趁手的工具来生成图片水印。很多APP提供了水印的功能,但会把我的图片上传到他们的服务器,身份证太…

离散数学期末复习题库(含答案)

目录 1.判断题 1-1 1-2 1-3 1-4 2.选择题 2-1 2-2 2-3 3.多选题 3-1 4.填空题 4-1 4-2 4-3 4-4 4-5 5.主观题 5-1 5-2 5-3 5-4 1.判断题 1-1 ϕ⊆{ϕ} (对) 1-2 {a,b}∈{a,b,c,{a,b}} (对) 1-3 {a,b…

【Selenium+java环境配置】(超详细教程常见问题解决)

Seleniumjava环境配置 windows电脑环境搭建-chrome浏览器1. 下载chrome浏览器2. 查看chrome浏览器版本3. 下载chrome浏览器驱动4.配置系统环境变量PATH 验证环境是否搭建成功1. 创建java项目,添加pom文件中添加依赖2. 编写代码运行 常见问题&解决办法1.访问失败…

opencv进阶 ——(十二)基于三角剖分实现人脸对齐

三角剖分概念 三角剖分(Triangulation)是一种将多边形或曲面分解为一系列互不相交的三角形的技术,它是计算几何、计算机图形学、地理信息系统、工程和科学计算中的一个基本概念。通过三角剖分,复杂的形状可以被简化为基本的三角…

【蓝桥杯2025备赛】分巧克力

【蓝桥杯2025备赛】分巧克力 [蓝桥杯 2017 省 AB] 分巧克力 题目描述 儿童节那天有 K K K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N N N 块巧克力,其中第 i i i 块是 H i W i H_i \times W_i Hi​Wi​ 的方格组成的长方形…

达梦 执行查询语句时报[-544]:Out of sort buf space

达梦数据库有时执行SQL中有时报[-544]:Out of sort buf space, try to adjust SORT_BUF_GLOBAL_SIZE, SORT_BUF_SIZE, SORT_BLK_SIZE. 第一反应是这条语句占用排序区太大。但真实原因是前面执行的语句耗光了全局排序区,后面SQL任何小的排序操作都会报这个错误从而执…

YOLO系列模型 pt文件转化为ONNX导出

文章目录 啥是onnx怎么导出导出之后 啥是onnx Microsoft 和合作伙伴社区创建了 ONNX 作为表示机器学习模型的开放标准。许多框架(包括 TensorFlow、PyTorch、scikit-learn、Keras、Chainer、MXNet 和 MATLAB)的模型都可以导出或转换为标准 ONNX 格式。 在…

RxSwift - 实现一个MVVM架构的TableView

文章目录 RxSwift - 实现一个MVVM架构的TableView前沿MVVM架构的Tableview目录结构1、模型(Model)2、视图模型(ViewModel)3、视图(View) 界面效果 RxSwift - 实现一个MVVM架构的TableView 前沿 MVVM架构在…

敏捷开发:拥抱变化,持续交付价值的艺术

目录 敏捷开发:拥抱变化,持续交付价值的艺术 引言 第一部分:敏捷开发是什么? a.定义:敏捷开发的基本概念和核心原则 b.历史:敏捷宣言的诞生和敏捷开发的历史背景 c.价值观:敏捷宣言的12条…

python的优势有哪些?

python的优点很多,下面简单地列举一些: 简单 Python的语法非常优雅,甚至没有像其他语言的大括号,分号等特殊符号,代表了一种极简主义的设计思想。阅读Python程序像是在读英语。 易学 Python入手非常快,学习…

for深入学习

目录 练习&#xff1a; 例1&#xff1a; 求解0-100中整除3的数有哪些 例2&#xff1a; 求0-100中含数字9个个数 作业&#xff1a; 练习&#xff1a; 例1&#xff1a; 求解0-100中整除3的数有哪些 代码&#xff1a; #include<stdio.h> int main() {printf("整…

Ubuntu系统中Apache Web服务器的配置与实战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

封装了一个仿照抖音评论轮播效果的iOS轮播视图

效果图 原理 就是我们在一个视图里面有两个子视图&#xff0c;一个是currentView, 一个是willShowView,在一次动画过程中&#xff0c;我们改变current View的frame&#xff0c;同时改变willShowView的frame&#xff0c;同时&#xff0c;需要改变currentVIew 的transform.y不然…

【数据结构】链式二叉树详解

个人主页~ 链式二叉树基本内容~ 链式二叉树详解 1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQueue.c层序…

(echarts)图上数值显示单位

&#xff08;echarts&#xff09;图上数值显示单位 series: [{name: 比例,type: bar,...label: {show: true,position: top,formatter: (params) > params.value % //图上数值显示格式},tooltip: { //鼠标移入图上数值显示格式valueFormatter: function(value) {return val…

电源设计01

嵌入式电源设计 电池容量的计算电路充电时的选择&#xff1a; 科普硬件知识&#xff0c;写写关于电路板电源的事情。各类电源模块实物但为什么硬件工程师又必须要了解电源并且在板内自己设计电源呢&#xff1f;首先是DCDC的降压芯片下面推荐几个升压芯片&#xff1a;LDO 电池容…

Unity 自定义编辑器根据枚举值显示变量

public class Test : MonoBehaviour {[HideInInspector][Header("数量")][SerializeField]public int num;[Header("分布类型")][SerializeField]public DistributionType distType;[HideInInspector][Header("位置")][SerializeField]public Li…

数据结构 | 超详细讲解七大排序(C语言实现,含动图,多方法!)

目录 ​编辑 排序的概念 常见排序算法 ​编辑 1.冒泡排序 &#x1f379;图解 &#x1f973;代码实现 &#x1f914;时间复杂度 2.插入排序 &#x1f379;图解 &#x1f334;深度剖析 &#x1f34e;代码思路 &#x1f973;代码实现 &#x1f914;时间复杂度 3.希尔…