【LLM】浅谈 StreamingLLM中的attention sink和sink token

前言

Softmax函数

SoftMax ( x ) i = e x i e x 1 + ∑ j = 2 N e x j , x 1 ≫ x j , j ∈ 2 , … , N \text{SoftMax}(x)_i = \frac{e^{x_i}}{e^{x_1} + \sum_{j=2}^{N} e^{x_j}}, \quad x_1 \gg x_j, j \in 2, \dots, N SoftMax(x)i=ex1+j=2Nexjexi,x1xj,j2,,N

Softmax 通常用于多类别分类问题中的输出层。在这个公式中,给定一个输入向量 ( x = [ x 1 , x 2 , … , x N ] x = [x_1, x_2, \ldots, x_N] x=[x1,x2,,xN] ),Softmax 函数将其转化为一个概率分布 ($ p = [p_1, p_2, \ldots, p_N]$ )。每个元素 $p_i KaTeX parse error: Can't use function '\(' in math mode at position 10: 表示该样本属于第 \̲(̲ i KaTeX parse error: Can't use function '\)' in math mode at position 1: \̲)̲ 类的概率。 e^{x_i}$ 表示输入向量中第 ($ i $) 个元素的指数,而分母部分是所有元素的指数之和。这样的设计确保了输出概率分布的归一性,因为指数函数的性质使得所有元素都为正数,而分母的和则确保了概率总和为 1。

x 1 ≫ x j , j ∈ 2 , … , N x_1 \gg x_j, j \in 2, \ldots, N x1xj,j2,,N 时,输入向量的第一个元素 x 1 x_1 x1 往往会远远大于其他元素,这可以帮助模型在分类时更明确地选择一个主要的类别。

attention sink

文中提到:语言模型(LLMs)在注意力机制中存在过度关注初始令牌(initial tokens)的现象。从以下两个角度探索下。

softmax角度

在SoftMax函数中, e x i e^{x_i} exi是指数函数,这意味着即使输入的初始令牌 ( x 1 x_1 x1) 在语义上与语言建模不相关,由于指数函数的存在,SoftMax 函数的输出中它仍然会有一个非零的值。因此,模型在进行自注意力机制时,即使当前的嵌入已经包含了足够的自包含信息用于预测,模型仍然需要从其他头和层中的其他令牌中汇聚一些信息。结果,模型倾向于将不必要的注意力值“倾泻”到特定的令牌上,这就是所谓的attention sink(注意力汇聚)。

在这里插入图片描述

  1. 局部模式在前两层中的呈现: 在第一层和第二层(layers 0 和 1),注意力图呈现出“局部”模式,即对最近的令牌给予更多的关注。这表明模型在初步的处理阶段更注重周围的令牌,强调了局部上下文的重要性。
  2. 模型跨所有层和头部(heads)都强烈关注初始令牌: 在底部两层之外,也就是深层网络中,模型在所有层和头部都倾向于强烈关注初始令牌。这与“attention sink”现象相吻合,即模型在处理过程中过度关注初始令牌,而 SoftMax 函数的特性是导致这种现象的原因之一。

自回归模型角度

由于自回归语言建模的顺序性质初始令牌对所有后续令牌都是可见的,而后续令牌只对一组有限的后续令牌可见。因此,初始令牌更容易被训练成注意力的聚焦点,捕捉到不必要的关注(在训练中可能导致模型过度集中注意力,捕捉到一些在语言建模任务中并不重要的信息。)。如何理解呢?

  1. 自回归性质: 这些模型是自回归的,即它们根据之前生成的令牌来生成下一个令牌。在这个过程中,初始令牌是最早生成的令牌,因此在生成整个序列的过程中,它对所有后续令牌都是可见的。

  2. 可见性的不对称性: 由于模型是按顺序生成令牌的,初始令牌在生成序列的整个过程中一直是可见的,而后续令牌只能被生成的一小部分令牌所看到。这种不对称性导致了对初始令牌更强烈的关注。

  3. 训练中的注意力聚焦点: 由于模型在训练过程中学会了将注意力集中在初始令牌上,这些令牌更容易成为“attention sink”,即吸引不必要的注意力。这可能是因为初始令牌在训练中更频繁地与后续令牌发生交互,从而更容易捕捉到一些模型认为重要的信息。

sink token

Q:如何卸载模型过度关注初始令牌的注意力得分?

A:引入一个专门的“汇聚标记(可学习的占位符令牌)”(sink token)来卸载过多的注意力得分。由于这一点,模型无意中将全局可见的令牌,主要是初始令牌,作为注意力的聚焦点。提出的潜在解决方案有两个:

  1. 引入全局可训练的注意力汇聚标记(Sink Token): 有意地引入一个全局可训练的注意力汇聚标记,即“Sink Token”。这个标记的作用是作为一个储存不必要注意力分数的仓库。通过这种方式,模型可以有一个指定的位置,用于处理额外的注意力,避免过度关注全局可见的令牌,特别是初始令牌。

  2. 替代传统的 SoftMax 函数: 用 变体函数( S o f t M a x 1 SoftMax_1 SoftMax1 )替代传统的 SoftMax 函数。变体的公式如下:
    SoftMax 1 ( x ) i = e x i 1 + ∑ j = 1 N e x j \text{SoftMax}_1(x)_i = \frac{e^{x_i}}{1+\sum_{j=1}^{N} e^{x_j}} SoftMax1(x)i=1+j=1Nexjexi
    与传统的 SoftMax 不同, S o f t M a x 1 SoftMax_1 SoftMax1 不要求所有上下文令牌的注意力分数总和为一(具体而言: S o f t M a x 1 SoftMax_1 SoftMax1 通过修改分母中的求和项,使其不再求和到所有元素,而是到 ( N N N)(元素总数)前一个元素。具体而言,公式中的 ( 1 + ∑ j = 1 N e x j 1+\sum_{j=1}^{N} e^{x_j} 1+j=1Nexj) 不再求和到 ( j = N j=N j=N),而是求和到 ( j = N − 1 j=N-1 j=N1)。)。那么这种修改有什么效果?

    • 减缓数值爆炸的风险: 通过避免对所有元素的指数求和, S o f t M a x 1 SoftMax_1 SoftMax1在一定程度上减缓了数值爆炸的风险,使模型在数值上更加稳定。

    • 降低对其他元素的依赖: 这个修改使得最大的元素不再对分母的求和贡献,减少了其他元素相对于最大元素的影响,使模型对其他元素的变化更为鲁棒。

    这种变体可能也是一种有效的解决方案。文中将其标记为“Zero Sink”,因为它相当于在注意力计算中使用具有全零关键(Key)和值(Value)特征的令牌。

在这里插入图片描述

这些可视化结果基于 256 个句子,每个句子包含 16 个令牌。左边是使用 Sink Token 的模型,右边是没有使用 Sink Token 的模型。两个图表显示相同的层次和头部。

  1. 没有 Sink Token 的情况: 在没有 Sink Token 的模型中,底层显示出局部关注,而在更深层次上,模型更加关注初始令牌。即模型容易在深层次上过度集中注意力在初始令牌上。

  2. 有 Sink Token 的情况: 在有 Sink Token 的模型中,可以清晰地看到在所有层次上都有关注它的明显现象,有效地聚集冗余的注意力。这表明 Sink Token 成功地成为一个注意力的集中点。

  3. 有 Sink Token 时对其他初始令牌的关注减少: 在存在 Sink Token 的情况下,相对较少的注意力被分配给其他初始令牌,支持了将 Sink Token 指定为提高流式性能的设计优势。

总结

本文介绍了关于 StreamingLLM中提到的关于attention sinks和sink token的原理。在原文中提到,通过引入“attention sinks”与最近的令牌配对,能够高效地处理长度达 4 百万令牌的文本。还通过使用具有专门的 sink token 的预训练模型,以此提高流式应用部署的性能。

更多实验细节有兴趣关注原文。

参考文献

【1】Efficient Streaming Language Models with Attention Sinks,https://arxiv.org/abs/2309.17453

【2】code:https://github.com/mit-han-lab/streaming-llm

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

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

相关文章

【爬虫实战】python微博热搜榜Top50

一.最终效果 二.项目代码 2.1 新建项目 本文使用scrapy分布式、多线程爬虫框架编写的高性能爬虫,因此新建、运行scrapy项目3步骤: 1.新建项目: scrapy startproject weibo_hot 2.新建 spider: scrapy genspider hot_search "weibo.com" 3…

揭秘元宇宙背后最炫科技风:数字经济时代,元宇宙发展解决方案及核心技术

文章目录 前言一、关于“元宇宙”业界趋势1.1、元宇宙的概念与发展历程1.2、行业应用体验向虚实融合和实时互动演进1.3、数字内容成为各行业 3D 数字世界入口 二、对于元宇宙发展的解决方案和实践2.1、MetaStudio 构建场景化全栈能力2.2、企业 3D 空间,围绕 4 类场景…

最新ai创作系统CHATGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

【Python从入门到进阶】39、使用Selenium自动验证滑块登录

接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能,首先我们来讲解如何进行滑块自动验证的操作。 一、测试用例介绍 我们要通过sel…

MyBatis底层源码分析

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理MyBatis底层源码分析 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下🫰&#x1f…

oracle创建数据库,导入dmp操作全家桶

背景:小明在一家IT公司就职,通过查看项目,公司使用的是oracle,几天后,经理要求他从服务器导入数据库到公司服务器,聪明的小明就开始干了起来,整理如下教程。 说明:此次演示环境oracl…

C语言 —— 指针

目录 1. 指针是什么? 2. 指针和指针类型的关系 2.1 指针的解引用 2.2 指针-整数 3. 野指针 3.1 野指针成因 1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 3.2 如何规避野指针 4. 指针运算 4.1 指针-整数 4.2 指针-指针 指针-指针的使用 4.3 指针的关系运…

代码更换了目录,没有任何变更,但Idea编辑器却提示所有代码都变更了?

开发环境: springboot 2.4.3idea 2020 问题描述: 1、代码copy到U盘了,今天用idea打开U盘代码,却提示所有代码都被修改了 2、diff 文件看了,其实并没有任何修改,因为就算不小心误改了,也不能全…

Stable Diffusion绘画,卡通,教室

1 girl, parted lips, blush, makeup, light smile, school uniform, classroom, light rays, glow, thighs, collarbone, narrow waist, (masterpiece), wallpaper 1个女孩,双唇,腮红,化妆,浅笑,校服,教室…

单链表经典OJ题

目录 ​编辑 题目: 一、移除链表元素: 本质: 解题思路: 本题分为两种解法: 我们使用解法二: 注意事项: 完整代码: 题目: 一、移除链表元素: 本质&…

C++11智能指针

目录 一、什么是智能指针?二、为什么需要智能指针?三、内存泄漏3.1 什么是内存泄漏?内存泄漏的危害是什么?3.2 内存泄漏的分类3.3 如何检测内存泄漏?3.4 如何避免内存泄漏? 四、智能指针的使用及原理4.1 RA…

Kotlin vs Java:为什么Springboot官方教程选择了Kotlin?

导语 作为Java开发者的你,是否在为寻找Java的替代品而烦恼?担心受知识产权问题困扰?别担心,Kotlin来了!它是你的救星,也是Springboot官网教程的选择。想知道为什么吗?那就往下翻吧!…

NeurIPS 2023 | MQ-Det: 首个支持多模态查询的开放世界目标检测大模型

目前的开放世界目标检测模型大多遵循文本查询的模式,即利用类别文本描述在目标图像中查询潜在目标。然而,这种方式往往会面临“广而不精”的问题。一图胜千言,为此,作者提出了基于多模态查询的目标检测(MQ-Det&#xf…

傅里叶变换和其图像处理中的应用

以下部分文字资料整合于网络,本文仅供自己学习用! 一、为什么要在频域进行图像处理? 一些在空间域表述困难的增强任务,在频率域中变得非常普通 滤波在频率域更为直观,你想想嘛,所谓滤波,就是…

KOSMOS-2.5:密集文本的多模态读写模型

Overview 总览摘要1 引言2 KOSMOS-2.52.1 模型结构2.1 图像和文本表征2.3 预训练数据2.4 数据处理2.5 过滤与质量控制 3 实验3.1 评估3.2 实现细节3.3 结果3.4 讨论 4 相关工作4.1 多模态大语言模型4.2 图文理解 5 总结与展望 总览 题目: KOSMOS-2.5: A Multimodal Literate M…

通过jsoup抓取谷歌商店评分

文章目录 背景实现是否下架预警评分 总的工具类,测试 背景 在谷歌上面发布包,有时候要看看评分,有时候会因为总总原因被下架,希望后台能够对评分进行预警,和下架预警 实现 测试地址: https://play.google.com/store/apps/details?idcom.tencent.mm 通过jsoup解析页面,然后获…

Python学习----Day07

函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做…

苍穹外卖(五) 微信小程序

项目应用: 使用微信小程序完成客户端开发并基于微信登录实现小程序的登录功能如果是新用户需要自动完成注册 微信小程序开发 介绍 小程序是一种新的开放能力,开发者可以快速地开发一个小程序。可以在微信内被便捷地获取和传播,同时具有出色的使用体验…

C# 图解教程 第5版 —— 第3章 C# 编程概述

文章目录 3.1 一个简单的 C# 程序(*)3.2 标识符3.3 关键字3.4 Main:程序的起始点(*)3.5 空白3.6 语句(*)3.7 从程序中输出文本3.7.1 Write(*)3.7.2 WriteLine&#xff08…

【C++进阶】:C++类型转换

C类型转换 一.C语言里的类型转换二.C语音类型转换的一些弊端三.C的四种类型转换1.static_cast2.reinterpret_cast3.const_cast4.dynamic_cast 一.C语言里的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者…