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

欢迎关注我的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.mzph.cn/news/746175.shtml

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

相关文章

52、WEB攻防——通用漏洞弱口令安全服务协议web应用

文章目录 web类——加密&验证码后台服务类——SSH&RDP远程终端猜解应用类——zip&word文件压缩猜解 弱口令没有严格的定义,通常认为容易被别人猜测到或被破解工具破解的口令均为弱口令,通常与管理的安全意识和平台的初始化配置等相关&#x…

LeetCode.2864. 最大二进制奇数

题目 2864. 最大二进制奇数 分析 这道题目其实我们只需要保证最后一位是1,其余的1都放在最前面,这样得到的就是最大二进制奇数。 所以,我们先统计给定的字符串有多少个 1,多少个 0,把其中一个 1 放在最后一位&…

LORA_ LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

paper: https://arxiv.org/pdf/2106.09685.pdf code: https://github.com/microsoft/LoRA 摘要 作者提出了低秩自适应,或称LoRA,它冻结了预先训练的模型权值,并将可训练的秩分解矩阵注入变压器架构的每一层,大大减少了下游任务的…

Python爬虫实战入门:豆瓣电影Top250(保你会,不会来打我)

文章目录 需求所需第三方库requests模块lxml模块了解 lxml模块和xpath语法xpath语法-基础节点选择语法 实战教程完整代码 需求 目标网站: https://movie.douban.com/top250 需求: 爬取电影中文名、英文名、电影详情页链接、导演、主演、上映年份、国籍、类型、评分、评分人数, …

AIGC笔记--关节点6D位姿按比例融合

1--核心代码 6D位姿一般指平移向量和旋转向量,Maya软件中关节点的6D位姿指的是相对平移向量和欧拉旋转向量; 为了按比例融合两个Pose,首先需要将欧拉旋转向量转换为旋转矩阵,在将旋转矩阵转换为四元数,利用球面线性插值…

springboot项目自定义切面增强方法功能(springboot记录日志)

说明 背景:记录系统接口日志入库,包含接口方法、入参、回参、响应时间、操作人、操作时间等信息。 方案:添加自定义切面处理 一、自定义切面注解 package com.gstanzer.supervise.annotation;import com.gstanzer.supervise.enums.Busine…

中宣部防沉迷系统PHP版本(管局防沉迷验证-PHP-全版本-接口测试样例)

现在对接游戏,无论是登录还是支付都是要去对接防沉迷实名认证接口,但前期的话你要登录网络游戏防沉迷实名认证系统进行接口测试,$appid ,$bizId,$key去接口测试页面找(正式上线在密钥管理)&…

基于jsp+mysql+Spring+mybatis的SSM汽车保险理赔管理系统设计和实现

基于jspmysqlSpringmybatis的SSM汽车保险理赔管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐…

vue3速查笔记

文章目录 一、创建Vue3.0工程1.使用 vue-cli 创建2.使用 vite 创建 二、常用 Composition API1.拉开序幕的setup2.ref函数3.reactive函数4.Vue3.0中的响应式原理vue2.x的响应式Vue3.0的响应式 5.reactive对比ref6.setup的两个注意点7.计算属性与监视1.computed函数2.watch函数3…

find_package 总结

本文参考:“轻松搞定CMake”系列之find_package用法详解 原理 find_package 即在指定目录CMAKE_MODULE_PATH 或 CMAKE_PREFIX_PATH查找对应的cmake文件。 find 模式 Module模式(默认):查询Findxxx.cmake配置文件, 在CMAKE_MODULE_PATH 目录Config模式…

[SaaS] 家作->装修设计师

淘宝设计AI,人人都能成为装修设计师构建用户对未来家的想象,是家装家居多年来持续探索的方向,如今我们用AI帮助用户“更快、更好、更简单”看到自己未来的家。https://mp.weixin.qq.com/s/Pk1xztEd17JefXp79FHKNA其实就是个商品白底图inpaint…

SQLiteC/C++接口详细介绍-sqlite3类(一)

快速跳转文章列表:SQLite—系列文章目录 上一篇:SQLiteC/C接口简介 下一篇:SQLiteC/C接口详细介绍(二) 引言: SQLite C/C 数据库接口是一个流行的SQLite库使用形式,它允许开发者在C和C代码中嵌…

WPF布局、控件与样式

视频来源:https://www.bilibili.com/video/BV1HC4y1b76v/ 布局 常用布局属性 HorizontalAlignment:用于设置元素的水平位置VerticalAlignment:用于设置元素的垂直位置Margin:指定元素与容器的边距Height:指定元素的…

解决驱动开发中<stdlib.h> no such file 的问题

前言 在进行驱动开发时&#xff0c;需要使用malloc等函数&#xff0c;导入C库<stdlib.h>出现bug。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xff0c;一起讨论…

深度学习十大算法-快速掌握!

自2006年深度学习概念被提出以来&#xff0c;20年快过去了&#xff0c;深度学习作为人工智能领域的一场革命&#xff0c;已经催生了许多具有影响力的算法。那么&#xff0c;你所认为深度学习的top10算法有哪些呢&#xff1f; 以下是大力哥我心目中的深度学习top10算法&#xff…

案例分析篇09:Web架构设计相关20个考点(7~11)(2024年软考高级系统架构设计师冲刺知识点总结)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

github 中的java前后端项目整合到本地运行

前言: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

ES6:箭头函数中的this指向问题

普通函数中的this指向函数的调用者 例子&#xff1a; 黑马程序员的说法&#xff1a;箭头函数不会创建自己的this&#xff0c;它只会从自己的作用域链的上一层沿用this 尚硅谷的说法&#xff1a;this始终指向函数声明时所在作用域下的this的值 通俗理解就是箭头函数中找this&…

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:…

vue3+ts+element-plus实际开发之统一掉用弹窗封装

vue3tselement-plus实际开发之统一掉用弹窗封装 插槽1. 官网介绍先理解 插槽、具名插槽、 作用域插槽、动态插槽名、具名作用域插槽属性和使用方法 2. 统一调用弹窗封装dome实战- 使用场景&#xff1a;- 对el-dialog进行数据动态设置- 新建一个ts文件用于统一存放组件&#xff…