LLM - 大语言模型的自注意力(Self-Attention)机制基础 概述

news/2024/7/27 2:43:23/文章来源:https://blog.csdn.net/u012515223/article/details/136623432

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/136623432

Attention

注意力(Attention)机制是大型语言模型中的一个重要组成部分,帮助模型决定在处理信息时,所应该关注的部分。在自然语言处理中,一个序列由一系列的元素组成。注意力机制通过为序列中的每个元素分配一个权重来工作,这个权重反映了每个元素对于任务的重要性。模型会更加关注权重高的元素。自注意力(Self-Attention)是一种特殊的注意力机制,不是将输入序列与输出序列关联起来,而是关注序列内部元素之间的关系。

1. Transformer

Transformer

Transformer是一种重要的神经网络架构,在2017年由Google的研究者在论文“Attention Is All You Need”中提出。这个架构特别适用于处理序列数据,能够捕捉到输入数据中长距离的依赖关系。Transformer的核心是自注意力(Self-Attention)机制,这使得模型能够在序列中的任何位置关注到其他位置的信息,从而更好地理解文本的上下文。

Transformer架构主要由两部分组成,即编码器(Encoder)和解码器(Decoder)。每个部分都包含多个相同的层,每层都有自注意力和前馈神经网络。Transformer模型的一个关键创新是位置编码(Positional Encoding),给模型提供了单词在序列中位置的信息。由于模型本身不像RNN那样逐个处理序列,位置编码对于保持序列的顺序信息至关重要。

编码器负责处理输入序列,每个编码器层都包含2个子层:

  1. 多头自注意力机制(Multi-Head Self-Attention):允许模型同时关注序列中的不同位置,这有助于捕捉文本中的多种关系。
  2. 前馈神经网络(Feed-Forward Neural Network):对于自注意力层的输出进行进一步的处理。

解码器负责生成输出序列,每个解码器层除了包含编码器层中的2个子层外,还增加了1个子层:

  1. 编码器-解码器注意力机制(Encoder-Decoder Attention):交叉注意力,允许解码器关注编码器的输出,这有助于解码器在生成序列时利用输入序列的信息。

Transformer架构的这些特点使其在NLP领域取得了巨大的成功,不仅在机器翻译等任务中取得了突破性的表现,而且还催生了BERT、GPT等一系列强大的后续模型。

Transformer

2. GPT

GPT

在GPT模型中,位置编码是一个关键部分,为输入序列的每个位置添加额外的信息。位置编码的目的是向模型提供每个词在句子中的相对位置信息,因为Transformer的自注意力机制并不关心词的顺序。在GPT模型中,位置编码通过将正弦和余弦函数应用于输入序列的每个位置来实现。

具体来说,GPT中的位置编码采用了三角式位置编码,这种编码方式在计算注意力分数时直接考虑两个Token之间的相对位置。这种编码方式利用了三角恒等变换公式,将位置T对应的位置向量 P E t + k PE_{t+k} PEt+k 分解为一个与相对距离k有关的矩阵 R k R_k Rk P E t PE_t PEt 的乘积:

这样的性质使得三角式位置编码在处理相对位置信息时非常有效。请注意,这里的位置编码是相对位置编码,与绝对位置编码不同,不需要学习可学习的位置向量,而是直接利用了位置之间的相对关系。GPT中的位置编码通过三角函数的方式将相对位置信息融入到模型中,帮助模型更好地理解输入序列的顺序和结构。

GPT

3. LLaMA

LLaMA

LLaMA 中的 旋转式位置编码(RoPE) 是专门为 Transformer 架构设计的嵌入方法,将相对位置信息集成到 self-attention 中并提升模型性能,比较一下 RoPE 和 Transformer 中的 绝对位置编码(Positional Encodings):

  1. 基本概念:

    • RoPE 是能够将相对位置信息,依赖集成到 self-attention 中的位置编码方式。
    • Transformer 中的位置编码,主要是为了捕捉输入序列中元素的绝对位置信息。
  2. 计算方式:

    • RoPE 通过定义一个函数 g 来表示 query 向量 qm 和 key 向量 kn 之间的内积操作,该函数的输入是词嵌入向量 xm 和 xn ,以及之间的相对位置 m - n。
    • Transformer 中的绝对位置编码则是在计算 query、key 和 value 向量之前,将一个位置编码向量 pi 加到词嵌入向量 xi 上,然后再乘以对应的变换矩阵 W。
  3. 位置编码向量:

    • RoPE 中的位置编码向量的计算方式与复数相关,利用欧拉公式来表示实部和虚部。
    • Transformer 中的位置编码向量通常采用经典的方式,如 sin 和 cos 函数。
  4. 外推性:

    • RoPE 具有更好的外推性,即在训练和预测时输入长度不一致时,模型的泛化能力更强。

总之,RoPE 在处理相对位置信息方面具有优势,而 Transformer 的绝对位置编码则更关注捕捉绝对位置信息。

LLaMA

4. Attention优化

Attention

ReFormer 是一种高效的 Transformer 架构,专为处理长序列建模而设计。结合了两个关键技术,以解决 Transformer 在长上下文窗口应用中的注意力和内存分配问题。其中之一就是 局部敏感哈希(LSH),用于降低对长序列的注意力计算复杂度。ReFormer 中的 局部敏感哈希 加速原理:

  1. ReFormer 自注意层:

    • ReFormer 使用两种特殊的自注意层:局部自注意层和局部敏感哈希自注意层。
    • 局部自注意层:这一层允许模型只关注输入序列中的局部区域,而不是整个序列。这有助于减少计算复杂度。
    • 局部敏感哈希自注意层:这是 ReFormer 的创新之处。使用局部敏感哈希技术,将输入序列划分为不同的桶,每个桶包含一组相似的位置。然后,模型只需关注同一桶内的位置,从而减少了计算量。
  2. 可逆残差层:

    • ReFormer 还使用了可逆残差层,以更高效地利用可用内存。
    • 可逆残差层允许在训练过程中显著减少内存消耗。通过巧妙的残差架构实现。

总之,ReFormer 利用局部敏感哈希技术和可逆残差层,使得模型能够处理长达数十万标记的序列,而不会过度消耗内存,成为长序列建模的一种强大工具。

ReFormer

5. FlashAttention

FlashAttention
FlashAttention是用于Transformer模型的加速算法,降低注意力机制的计算复杂度和显存占用,通过优化 Softmax 计算和减少显存访问次数,来实现快速且节省内存的精确注意力计算。传统的 Softmax 计算,需要减去 Score 矩阵中的最大值,然后,进行指数运算和归一化,这会增加计算量。在FlashAttention中的增量Softmax计算避免了减去最大值这一步骤,而是在局部块中进行弥补计算,这样可以减少计算量。其中,FlashAttention算法有两个循环:外部循环j和内部循环i。在外部循环中,对K和V矩阵进行分块计算。在内部循环中,对于Q矩阵进行分块计算。

FlashAttention

参考:从 OnlineSoftmax 到 FlashAttention2 技术

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

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

相关文章

QT 如何防止 QTextEdit 自动滚动到最下方

在往QTextEdit里面append字符串时,如果超出其高度,默认会自动滚动到QTextEdit最下方。但是有些场景可能想从文本最开始的地方展示,那么就需要禁止自动滚动。 我们可以在append之后,添加如下代码: //设置编辑框的光标位…

锂矿开采污废水处理需要哪些工艺设备

锂矿开采是一项重要的工业活动,但同时也会产生大量污废水。为了保护环境,及时有效地处理这些污废水至关重要。下面将介绍一些常用的工艺设备,用于锂矿开采污废水处理。 首先,对于锂矿开采产生的废水中的悬浮物和颗粒物的去除&…

C# OpenCvSharp 图片批量改名

目录 效果 项目 代码 下载 C# OpenCvSharp 图片批量改名 效果 项目 代码 using NLog; using OpenCvSharp; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; namespace OpenCvSharp_Demo { publi…

【蓝桥杯】map和vector的简单练习

一.题目描述 二.问题分析 使用嵌套的容器 时间复杂度为O(NlogN)&#xff0c;O(logN)是map查找的时间复杂度。 #include <iostream> #include <map> #include <vector> using namespace std;const int N1e510; int n,m; map <int,vector<int> >…

SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】

目录 任务调度 分布式任务调度 分布式任务调度存在的问题以及解决方案 使用SpringTask实现单体服务的任务调度 XXL-job分布式任务调度系统工作原理 XXL-job系统组成 XXL-job工作原理 使用XXL-job实现分布式任务调度 配置调度中心XXL-job 登录调度中心创建执行器和任务 …

Linux第77步_处理Linux并发的相关函数

了解linux中的“原子整形数据”操作、“原子位数据”操作、自旋锁、读写锁、顺序锁、信号量和互斥体&#xff0c;以及相关函数。 并发就是多个“用户”同时访问同一个共享资源。如&#xff1a;多个线程同时要求读写同一个EEPROM芯片&#xff0c;这个EEPROM就是共享资源&#x…

基于udp协议的网络通信(windows客户端版+简易聊天室版),重定向到终端

目录 和windows通信 引入 思路 WSADATA 代码 运行情况 简单的聊天室 思路 重定向 代码 terminal.hpp -- 重定向函数 服务端 客户端 运行情况 和windows通信 引入 linux和windows都需要联网,虽然他们系统设计不同,但网络部分一定是相同的,所以套接字也是一样的 这…

sqllab第二十二关通关笔记

知识点&#xff1a; cookie注入报错注入 直接抓取对应的数据包&#xff0c;发现还是一个cookie注入 参数值被base64加密了 测试这里使用什么手段读取输入 构造payload:uname1 base64加密&#xff1a;MSc 出现了hacker的页面&#xff0c;说明信息错误但是单引号没起作用 使…

01_04_JavaWEB03_XML、Tomcat、http

XML_Tomcat10_HTTP 参考尚硅谷再总结复习 一 XML XML是EXtensible Markup Language的缩写&#xff0c;翻译过来就是可扩展标记语言。所以很明显&#xff0c;XML和HTML一样都是标记语言&#xff0c;也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义…

七、软考-系统架构设计师笔记-数据库设计基础知识

1、数据库基础概念 数据库基本概念 数据(Data)数据库(Database)数据库管理系统(DBMS)数据库系统(DBS) 1.数据(Data) 是数据库中存储的基本对象&#xff0c;是描述事物的符号记录。 数据的种类&#xff1a; 文本、图形、图像、音频、视频等。 2.数据库(Database, DB) 数据库…

Linux:kubernetes(k8s)Deployment的操作(13)

创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…

python爬虫 Appium+mitmdump 京东商品

爬虫系列&#xff1a;http://t.csdnimg.cn/WfCSx 前言 我们知道通过Charles进行抓包可以发现其参数相当复杂&#xff0c;Form 表单有很多加密参数。如果我们只用 Charles 探测到这个接口链接和参数&#xff0c;还是无法直接构造请求的参数&#xff0c;构造的过程涉及一些加密…

Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程

Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器&#xff0c;MC开服教程&#xff0c;All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&#xff1a;https:…

Linux下的第一个C++小程序——进度条

一、进度条小程序 1.行缓存区 printf函数的输出&#xff0c;会先进入缓存区&#xff0c;而Linux下的缓存区刷新机制是按行刷新&#xff08;根据不同系统机制不同&#xff09;&#xff0c;例如用printf函数去调试时&#xff0c;可以看到如果printf语句中不带换行&#xff0c;则…

lspci详解

lspci的作用 lspci是一个Linux命令&#xff0c;用于列出系统中的PCI总线设备信息。PCI&#xff08;Peripheral Component Interconnect&#xff09;是一种常见的计算机总线标准&#xff0c;用于连接各种外部设备&#xff08;如网卡、显卡、声卡等&#xff09;到计算机主板上。…

嵌入式3-14

1、整理思维导图 2、重写链表的代码 3、实现链表&#xff0c;按值查找返回位置的功能&#xff0c;按位置查找返回值&#xff0c;释放单链表&#xff0c;链表逆置 node_p create_link_list()//创建头结点 { node_p p(node_p)malloc(sizeof(node)); if(pNULL) { …

巨控GRM560远程模块即将上市

在自动化和工业控制领域&#xff0c;通信模块的作用至关重要。它们是实现设备间通信&#xff0c;以及与上位系统交换数据的桥梁。近年来&#xff0c;随着工业4.0的不断推进&#xff0c;对通信模块的要求也越来越高&#xff0c;不仅需要高效稳定的通信能力&#xff0c;还需要兼容…

【SpringBoot3】整合SpringMVC

文章目录 一、实现过程1.1 创建程序1.2 引入依赖1.3 启动类1.4 Controller 二、web相关配置三、静态资源处理3.1 默认路径3.2 覆盖路径 四、自定义拦截器(SpringMVC配置)4.1 拦截器声明4.2 拦截器配置4.2 拦截器测试 一、实现过程 springboot-part - GitHub 1.1 创建程序 模…

pip 配置镜像加速安装

在使用pip安装Python第三方库时&#xff0c;默认是使用pip官网的非常慢&#xff0c;可通过配置国内镜像源加速下载速度&#xff0c;以下是如何使用国内镜像源安装Python库的两种常见方式&#xff1a; 临时使用镜像源安装 如果你只是想临时使用某个镜像源安装单个或几个库&…

Hadoop大数据应用:Yarn 节点实现扩容与缩容

目录 一、实验 1.环境 2.Yarn 节点扩容 3.Yarn 节点缩容 二、问题 1.yarn启动服务报错 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;已部署&#xff09; SecondaryNameNode &#xff08;已部署&…