线性化注意力

原文:towardsdatascience.com/linearizing-attention-204d3b86cc1e?source=collection_archive---------3-----------------------#2024-12-26

打破二次方限制:softmax 注意力的现代替代方案

https://medium.com/@shitanshu273?source=post_page---byline--204d3b86cc1e--------------------------------https://towardsdatascience.com/?source=post_page---byline--204d3b86cc1e-------------------------------- Shitanshu Bhushan

·发布于 Towards Data Science ·阅读时间 8 分钟·2024 年 12 月 26 日

大型语言模型非常强大,但它们有一个小缺点,即使用 softmax 注意力,这可能会导致计算开销较大。在本文中,我们将探索是否有办法通过某种方式替换 softmax,从而实现线性时间复杂度。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/50f35225ca8cbf1bf38bd25730c93110.png

作者提供的图片(使用 Miro Board 创建)

注意力机制基础

我假设你已经了解 ChatGPT、Claude 之类的内容,以及 Transformer 在这些模型中的工作原理。那么,注意力就是这些模型的核心。如果我们考虑普通的 RNN,我们会将所有过去的状态编码到一个隐藏状态中,然后使用这个隐藏状态与新的查询一起得到输出。一个明显的缺点是,你不能把所有信息都存储在一个小小的隐藏状态中。这就是注意力机制的作用,想象一下,对于每一个新的查询,你可以找到最相关的过去数据,并使用这些数据来做出预测。这就是注意力机制的本质。

Transformer 中的注意力机制(大多数当前语言模型背后的架构)涉及键、查询和值的嵌入。Transformer 中的注意力机制通过将查询与键进行匹配来检索相关值。对于每个查询(Q),模型计算与所有可用键(K)的相似度分数,然后利用这些分数创建相应值(Y)的加权组合。这个注意力计算可以表达为:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5870d932c2be4a2fc1e72f7aa70610e8.png

来源:作者提供的图片

这一机制使模型能够在做出预测时,有选择性地从整个上下文中提取和利用信息。我们在这里使用 softmax,因为它能有效地将原始相似度分数转换为标准化的概率,类似于 k 最近邻机制,其中更高的注意力权重会分配给更相关的键。

好的,现在让我们看一下 1 层注意力的计算成本,

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/27ae64c14ed6ad42627ca549439893ec.png

来源:图片由作者提供

Softmax 缺点

从上面的内容可以看出,我们需要计算一个 NxN 矩阵的 softmax,因此,我们的计算成本随着序列长度的增加呈二次增长。对于较短的序列,这没问题,但对于长序列,N=100k+ 时,它变得极其低效。

这给了我们动机:我们能否减少计算成本?这就是线性注意力的作用所在。

线性注意力

由 Katharopoulos 等人提出,线性注意力使用了一种巧妙的技巧,将 softmax 指数表示为一个核函数,表现为特征映射 φ(x) 的点积。利用矩阵乘法的结合律,我们可以将注意力计算重写为线性。下图展示了这一转换:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/70f502833c91b302822149c0fd21321a.png

来源:图片由作者提供

Katharopoulos 等人使用 elu(x) + 1 作为 φ(x),但任何能够有效逼近指数相似度的核特征映射都可以使用。上述计算成本可以表示为:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b740cb795e4fa6ec78b71883366e4021.png

来源:图片由作者提供

这样就不再需要计算完整的 N×N 注意力矩阵,并将复杂度降低到 O(Nd²)。其中 d 是嵌入维度,当 N >>> d 时,这实际上是线性复杂度,这通常适用于大规模语言模型。

好的,让我们来看一下线性注意力的递归视角,

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6a09502fb6c072b1d70ebad0657866a3.png

来源:图片由作者提供

好的,为什么我们可以在线性注意力中做这个,而不能在 softmax 中做呢?嗯,softmax 不是可分离的,因此我们无法将其写成独立项的乘积。这里值得注意的是,在解码过程中,我们只需要跟踪 S_(n-1),每生成一个 token 就能达到 O(d²) 的复杂度,因为 S 是一个 d × d 的矩阵。

然而,这种效率带来了一个重要的缺点。由于 S_(n-1) 只能存储 d² 信息(它是一个 d × d 的矩阵),我们面临着一个根本的限制。例如,如果原始上下文长度需要存储 20d² 的信息,你将实际上在压缩过程中丢失 19d² 的信息。这展示了线性注意力中的核心内存效率权衡:通过仅保持固定大小的状态矩阵,我们获得了计算效率,但这种固定大小限制了我们可以保留的上下文信息量,这也给我们提供了引入门控机制的动机。

门控线性注意力

好的,我们已经确定,在使用固定大小的状态矩阵优化效率时,我们不可避免地会遗忘信息。这引出了一个重要的问题:我们能否聪明地选择记住什么信息?这就是门控机制的作用——研究人员将其作为一种选择性地保留重要信息的机制,通过战略性地选择保留哪些信息来尽量减少记忆丧失的影响。门控并不是一个新概念,它在像 LSTM 这样的架构中已经得到广泛应用。

这里的基本变化在于我们如何公式化 Sn,

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1218754c71d1ac1d9a55cc83d6bab4b3.png

来源:作者提供的图片

有许多选择可以决定 G,这些选择会导致不同的模型,

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c2dbaef9d3546d4c51e87f39b5e1565a.png

来源:Yang, Songlin, et al. “Gated linear attention transformers with hardware-efficient training.”arXiv preprint arXiv:2312.06635(2023).

这种架构的一个关键优势是,门控函数仅依赖于当前标记 x 和可学习的参数,而不是整个序列历史。由于每个标记的门控计算是独立的,这使得在训练过程中能够高效地进行并行处理——整个序列的所有门控计算可以同时执行。

状态空间模型

当我们想到处理像文本或时间序列这样的序列时,我们的大脑通常会跳到注意力机制或 RNN。但如果我们采取完全不同的方法呢?如果我们不把序列当作序列来处理,而是像 CNN 处理图像一样,通过卷积来处理它们呢?

状态空间模型(SSMs)通过离散线性时不变系统形式化了这种方法:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/27fbbd16083eb182a5315c4fd43e4988.png

来源:作者提供的图片

好的,现在让我们看看这与卷积有什么关系,

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5d1b96244bda4a4eec0b5ba784afb2f2.png

来源:作者提供的图片

其中 F 是我们从参数(A, B, c)中学习到的滤波器,*表示卷积。

H3通过一种新颖的结构化架构实现了这种状态空间公式,该架构由两个互补的 SSM 层组成。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/31a7169dee8d15099468da32187db1d1.png

来源:Fu, Daniel Y., et al. “Hungry hungry hippos: Towards language modeling with state space models.”arXiv preprint arXiv:2212.14052(2022).

在这里,我们将输入分解为 3 个通道,以模仿 K、Q 和 V。然后,我们使用 2 个 SSM 和 2 个门控来模仿线性注意力,事实证明,这种架构在实践中效果相当不错。

选择性状态空间模型

早些时候,我们看到门控线性注意力如何通过使信息保持过程数据依赖,改进了标准的线性注意力。状态空间模型中也存在类似的限制——控制状态转移和输出的参数 A、B 和 c 是固定的且与数据无关。这意味着每个输入都通过相同的静态系统进行处理,而不考虑其重要性或上下文。

我们可以通过引入时变动态系统,使 SSM(状态空间模型)成为数据依赖的,从而扩展 SSM:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ad558a2c2bf96272a731f0f55067b4fd.png

来源:作者提供的图片

关键问题变成了如何将 c_t、b_t 和 A_t 参数化为输入的函数。不同的参数化方式可以导致接近线性或门控注意力机制的架构。

Mamba通过选择性 SSM 模块实现了这种时变状态空间的表达。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2b64c4a6ce7a210625f0df6475ec1bc2.png

来源:Gu, Albert, and Tri Dao. “Mamba: Linear-time sequence modeling with selective state spaces.”arXiv preprint arXiv:2312.00752(2023).

在这里,Mamba 使用了选择性 SSM 代替了 SSM,并通过输出门控和额外的卷积来提高性能。这是一个非常高层次的思想,解释了 Mamba 如何将这些组件组合成一个高效的序列建模架构。

结论

在本文中,我们探讨了高效序列建模架构的演变。从传统的 softmax 注意力开始,我们识别出其二次复杂度限制,这促使了线性注意力的发展。通过使用核函数重写注意力,线性注意力实现了 O(Nd²)的复杂度,但由于固定大小的状态矩阵,它面临着内存限制。

这种限制促使了门控线性注意力的提出,通过门控机制引入了选择性信息保持。我们接着从状态空间模型的角度进行了探讨,展示了它们如何通过类似卷积的操作来处理序列。从基础 SSM 到时变系统,再到选择性 SSM 的进展,与我们从线性到门控注意力的历程相似——在这两种情况下,使模型更加适应输入数据对于性能至关重要。

通过这些发展,我们看到了一个共同的主题:计算效率与内存容量之间的基本权衡。Softmax 注意力通过保持对整个序列的完全关注,擅长于上下文学习,但代价是二次复杂度。线性变体(包括 SSM)通过固定大小的状态表示实现了高效计算,但这种优化限制了它们保持过去上下文详细记忆的能力。这个权衡继续成为序列建模中的核心挑战,推动着对能够更好平衡这些竞争需求的架构的探索。

想要了解更多相关主题,我建议阅读以下论文:

线性注意力: Katharopoulos, Angelos 等. “Transformers are rnns: Fast autoregressive transformers with linear attention.”国际机器学习会议. PMLR, 2020.

GLA: Yang, Songlin 等. “Gated linear attention transformers with hardware-efficient training.”arXiv 预印本 arXiv:2312.06635(2023).

H3: Fu, Daniel Y. 等. “Hungry hungry hippos: Towards language modeling with state space models.”arXiv 预印本 arXiv:2212.14052(2022).

Mamba: Gu, Albert 和 Tri Dao. “Mamba: Linear-time sequence modeling with selective state spaces.”arXiv 预印本 arXiv:2312.00752(2023).

Waleffe, Roger 等. “An Empirical Study of Mamba-based Language Models.”arXiv 预印本 arXiv:2406.07887(2024).

致谢

这篇博客文章的灵感来源于我在 2024 年秋季于密歇根大学研究生课程中的学习。尽管这些课程提供了探索这些主题的基础知识和动机,但本文中的任何错误或误解完全是我个人的责任。这代表了我对这些材料的个人理解和探索。

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

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

相关文章

线性规划优化:基础

原文:towardsdatascience.com/linear-programming-optimization-foundations-2f12770f66ca 线性规划是一种强大的优化技术,它被用于许多领域的决策改进。这是关于线性规划的多部分系列的第一部分,将涵盖与线性规划相关的重要主题。这篇文章将…

数据标准管理实践指南(2.0)

扫描下载文档详情页: https://www.didaidea.com/wenku/16315.html

优化数据点值的自动化方案

在数据分析和优化领域中,如何高效地处理和优化大量数据点是一个常见的挑战。尤其是当涉及到多属性数据点时,问题变得更加复杂。今天我们将探讨如何利用Python中的SciPy库来解决一个实际问题:如何自动化调整数据点的"新值"以满足一系列约束条件,同时最小化旧值与新…

LibGDX中的多边形绘制优化

在游戏开发中,绘制多边形是常见的任务之一。特别是当我们需要处理复杂的形状或大量的点时,性能和错误处理就显得尤为重要。本文将通过一个具体的实例,讨论如何在LibGDX中优化多边形的绘制,并避免常见的IndexOutOfBoundsException错误。 问题背景 当使用LibGDX的ShapeRend…

Hive与Doris整合:MPP引擎加速大数据分析

Hive与Doris整合:MPP引擎加速大数据分析关键词:Hive, Doris, MPP, 大数据分析, 数据整合, 向量化执行, 实时查询加速摘要:本文深入探讨Apache Hive与Apache Doris的整合技术,解析如何通过MPP(大规模并行处理&#xff0…

这是一份简洁的PHP开发速成手册

好的,这是一份简洁的PHP开发速成手册,涵盖核心概念和常用操作:PHP开发速成手册1. 环境搭建推荐工具包: XAMPP (包含Apache服务器、MySQL数据库、PHP)。代码编辑器: VS Code (推荐安装PHP相关扩展) 或 PhpStorm。2. 基础…

解决Gradle中NPM命令失效问题

在使用IntelliJ IDEA进行项目开发时,尤其是在处理前端资产(assets)构建的任务中,我们可能会遇到一些奇异的问题。今天我们来讨论一个常见但不易解决的错误:在Gradle脚本中调用npm命令时失败,报错信息为“Cannot run program ‘npm’… No such file or directory”。 问…

Agentic AI提示工程可解释性增强:重要方法与实际应用

Agentic AI提示工程可解释性增强:重要方法与实际应用 一、引入与连接:当AI Agent学会"说清楚" 凌晨2点,急诊室的李医生盯着电脑屏幕上的诊断报告,眉头紧皱。 “患者高烧39℃、咳嗽伴呼吸困难,AI Agent建议诊…

Flutter购物车界面优化实战

在开发移动应用时,用户界面(UI)的美观和功能性是成功的关键之一。今天我们来探讨一个实际案例,关于如何优化一个购物车界面的布局问题,特别是当遇到内容溢出问题时的解决方案。 问题描述 在Flutter开发中,RenderFlex溢出错误是常见的UI布局问题之一。当我们设计一个购物…

键盘码探秘:C#中无限循环键盘监听的实现与优化

在日常的编程学习中,了解键盘按键的ASCII码或键码是非常有用的技能。这不仅能够帮助我们更好地处理用户输入,还能让我们在开发用户界面时更具创造性。今天我们来探讨一下如何使用C#编写一个能够持续监听键盘输入的程序,并解决一些常见的编程问题。 基本概念介绍 在C#中,键…

Shiny App与PostgreSQL的无缝对接:动态查询的实现

在开发Shiny应用时,常见的挑战之一是如何有效地从数据库中动态获取数据。尤其是当用户的输入需要动态地插入到SQL查询中时,问题就会变得复杂。本文将通过一个实例,展示如何在Shiny应用中实现与PostgreSQL数据库的无缝对接,并解决动态查询的问题。 背景 假设我们正在开发一…

前后端分离网上购物商城系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着电子商务的快速发展,网上购物商城系统已成为现代商业的重要组成部分。传统的前后端耦合架构在开发效率、维护成本和用户体验方面存在诸多局限性,难以满足日益增长的市场需求。前后端分离架构通过解耦前端展示与后端逻辑,显著提升了系…

深入探讨Blazor组件的布局与实践

在现代Web开发中,Blazor作为一种新的Web框架,结合了服务端渲染和WebAssembly的优势,提供了强大的前端开发体验。今天我们来讨论一个常见但重要的主题:Blazor组件的布局问题。特别是,当涉及到可路由和不可路由的组件时,我们应该如何决定它们的放置位置? 什么是Blazor组件…

SpringBoot+Vue 甘肃非物质文化网站平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 甘肃非物质文化遗产作为中华优秀传统文化的重要组成部分,承载着丰富的历史文化信息和民族智慧。随着信息技术的快速发展,传统的非遗保护方式已难以满足现代社会的需求,数字化保护与传承成为重要趋势。本项目旨在构建一个基于SpringBoot和…

【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock

【Java 开发日记】我们来说一下 synchronized 与 ReentrantLock 的二、详细区别分析 1. 实现层面 synchronized: Java 关键字,由 JVM 底层实现(通过 monitorenter/monitorexit 字节码指令)。 锁信息记录在对象头的 Mark Word 中。…

Java Web 教师工作量管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着教育信息化的快速发展,高校教师工作量管理逐渐成为提升教学效率和管理水平的重要环节。传统的人工记录和统计方式效率低下,容易出错,且难以实现数据的实时更新和共享。教师工作量管理系统通过数字化手段,能够有效整合教学…

串口通信学习

串口道信抗干扰能力低——>RS232(提升了电平大小增加抗干扰能力)——>RS485(差分线形式增加抗干扰能力)

springboot集成Jasypt实现配置文件启动时自动解密-ENC

SpringBoot本身并没有自动加解密的功能&#xff0c;平时项目启动时&#xff0c;自动解密配置文件里ENC( )包含的数据&#xff0c;原因是使用了Jasypt&#xff08;Java Simplified Encryption&#xff09;。一、前置条件&#xff0c;maven引入依赖<!-- Spring Boot集成Jasypt…

webstrom提交git时总是会自动格式化,导致页面报错Expected no line breaks before closing bracket, but 1 line break found

开发的时候明明都是好的&#xff0c;最后提交的时候因为编辑器的自动格式化&#xff0c;导致页面一堆报错、Expected no line breaks before closing bracket, but 1 line break found 。气死了发现都是某一行的代码写的特别的长&#xff0c;他在提交时自动格式化&#xff0c;换…

SpringBoot+Vue 小徐影城管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着数字化时代的快速发展&#xff0c;影院管理系统的智能化需求日益增长。传统影院管理方式依赖人工操作&#xff0c;效率低下且易出错&#xff0c;难以满足现代影院的高效运营需求。小徐影城管理系统管理平台旨在通过信息化手段解决这一问题&#xff0c;实现影院的自动化…