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

news2024/10/6 16:24:35

欢迎关注我的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.coloradmin.cn/o/1509647.html

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

相关文章

后端八股笔记------微服务篇

注册中心的主要作用:根据服务进行负载均衡,服务的健康监控。 服务雪崩,因为一个服务D的宕机,导致很多服务崩掉。 达到失败阈值----Closed_to_Open 服务降级------某一个接口 服务熔断------整个服务 限流常见的算法可以是令牌…

代理IP如何应对自动化测试和爬虫检测

目录 一、代理IP在自动化测试和爬虫中的作用 二、代理IP的优缺点分析 1.优点 2.缺点 三、应对自动化测试和爬虫检测的策略 1.选择合适的代理IP 2.设置合理的请求频率和间隔 3.模拟人类行为模式 4.结合其他技术手段 四、案例与代码示例 五、总结 在自动化测试和爬虫开…

Docker笔记-进入运行中的镜像,查看日志等操作

docker搭建好后&#xff0c;查看运行的docker镜像&#xff1a; docker ps -a 进入运行的容器&#xff0c;命令如下&#xff1a; docker exec -it <容器ID> /bin/bash # 或者&#xff0c;直接用容器里面的命令&#xff0c;比如mysql镜像 docker exec -it <容器ID>…

RuoYi-Vue前后端部署

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

MacOS - 在 Mac 上自定义“访达”边栏(快捷方式)

将文件添加到边栏&#xff1a;按住 Command 键&#xff0c;然后将文件拖到“个人收藏”部分。如果没有看到“个人收藏”部分&#xff0c;请选取“访达” > “设置” > “边栏”&#xff0c;然后在“个人收藏”部分中选择至少一个项目。 将文件添加到“访达”边栏仅会创建…

C语言——简易版扫雷

目录 前言 ​编辑 游戏规则 游戏结构的分析 游戏的设计 使用多文件的好处有以下几点&#xff1a; 游戏代码实现 框架&#xff08;test.c&#xff09; game函数&#xff08;test.c&#xff09; InitBoard初始化&#xff08;game.c&#xff09; Print打印棋盘&#xff08;g…

【C++初阶】第六站 : 模板初阶

前言&#xff1a; 本章知识点&#xff1a;泛型编程、函数模板、类模板 专栏&#xff1a; C初阶 目录 泛型编程 函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 如何实现一…

Flink实时数仓同步:实时表、流水表、快照表整合实战详解

一、背景 在大数据领域&#xff0c;数据分析、实时数仓已经成为平台上常见的功能之一。无论是进行实时分析还是离线分析&#xff0c;都离不开数仓中的表数据。 特别是在实时分析领域&#xff0c;查阅实时数据、历史数据以及历史变更数据是非常常见的需求。而这些功能的实现主…

基于android的物业管理系统的设计与实现19.8

目录 基于android的物业管理系统的设计与实现 3 摘 要 3 Android property managemengt system 5 Abstract 5 1 绪论 6 1.1 选题背景 6 1.2 课题研究现状 6 1.3 设计研究主要内容 7 1.4 系统主要设计思想 8 2 开发环境 8 2.1 Android系统的结构 8 图2-1 Android系统架构图 9 2…

【C++精简版回顾】21.迭代器,实现迭代器

1.什么是迭代器&#xff1f; 用来遍历容器&#xff0c;访问容器数据。 2.迭代器使用 1.初始化 //初始化 list<int> mylist;//list的整数对象 list<int>::iterator iter;//list内部类&#xff0c;迭代器对象(正向输出) list<int>::reverse_iterator riter;//…

详解数据挖掘

数据挖掘&#xff08;Data Mining&#xff09;&#xff0c;又译为资料探勘、数据采矿&#xff0c;是数据库知识发现&#xff08;Knowledge-Discovery in Databases&#xff0c;简称&#xff1a;KDD&#xff09;中的一个步骤。数据挖掘主要是指从大量的数据中&#xff0c;通过算…

如何选择软文推广渠道?媒介盒子分享

想要做好一个品牌&#xff0c;除了软文文案、推广方式要不断更新外&#xff0c;软文推广渠道也十分重要。有许多企业在创立之初容易踩平台没选好的坑。渠道是品牌触达用户的关键点&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;如何选择软文发布平台。 一、 了解平台用户…

Java项目:47 ssm007亚盛汽车配件销售业绩管理统+jsp(含文档)

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 亚盛汽车配件销售业绩管理系统根据调研&#xff0c;确定管理员管理客户&#xff0c;供应商&#xff0c;员工。 管理配件和配件的进货以及出售…

Python中的异常处理及最佳实践【第125篇—异常处理】

Python中的异常处理及最佳实践 异常处理是编写健壮、可靠和易于调试的Python代码中不可或缺的一部分。在本文中&#xff0c;我们将深入探讨Python中的异常处理机制&#xff0c;并分享一些最佳实践和代码示例&#xff0c;以帮助您更好地处理错误情况和提高代码的稳定性。 异常…

VUE3项目学习系列--Axios二次封装(五)

Axios中文文档 | Axios中文网 (axios-http.cn) Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequ…

【SpringCloud微服务实战01】Eureka 注册中心

前言 在 Eureka 架构中,微服务角色有两类: EurekaServer :服务端,注册中心 记录服务信息 心跳监控 EurekaClient :客户端 Provider :服务提供者,例如案例中的 user-service 注册自己的信息到 EurekaS…

java SSM在线学习网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM在线学习网站系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

ubuntu搭建HTTP/3 协议的 Nginx QUIC

ubuntu搭建HTTP/3 协议的 Nginx QUIC 什么是 HTTP/3 和 QUIC&#xff1f; HTTP/3 是一种基于 QUIC (Quick UDP Internet Connections) 协议的 HTTP 协议版本&#xff0c;它是 HTTP/2 的后继者&#xff0c;旨在改进 Web 性能和安全性。 HTTP/3 与之前的 HTTP 协议有很大的不同…

谷粒商城实战(004 整合elasticSearch(es)搜索引擎)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第125p-第p127的内容 整合es 最好使用Eleasticsearch-Rest-Client 24年改用Java API Client 其实可以直接用js直接调用es 进行查询&#xff0c;这…

力扣大厂热门面试算法题 12-14

12. 整数转罗马数字&#xff0c;13. 罗马数字转整数&#xff0c;14. 最长公共前缀&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.11 可通过leetcode所有测试用例。 目录 12. 整数转罗马数字 解题思路 完整代码 Java Pytho…