Selective attention improves transformer详细解读
Selective attention improves transformer Google 2024.10.3
一句话:简单且无需额外参数的选择性注意力机制,通过选择性忽略不相关信息并进行上下文剪枝,在不增加计算复杂度的情况下显著提升了Transformer模型的语言建模性能和推理效率。
论文链接:https://arxiv.org/pdf/2410.02703v1
1.为什么引入selective attention
Transformer的记忆负担
Transformer,核心self-attention关注输入序列中的所有部分,不仅仅是局部信息(也是RNN、LSTM改进可以关注更长字符串,但是也引入了更高计算量),所有信息都保存在上下文缓冲区,计算所有上下文信息的相关性
Selective attention高效信息筛选器
自动删除不再有用的信息,从上下文缓冲区中移除不必要的元素,提高模型性能,减少计算和内存需求

标记token b无法影响标记c从标记a中读取信息的程度,标记b确定标记a对于后续标记c是不相关甚至是误导性的
Selective attention允许一个标记决定另一个标记不再被需要,从而减少后续标记对该标记的关注度
2.selective attention可视化剔除token过程
(1)变量赋值
y=7; x=1; x=3; z=5; x=? 则:x=3,即不管前面x=1赋值是多少,都与之无关

红色线代表对前面token的掩蔽程度,在变量赋值中,掩蔽程度非0即1(一般为[0,1])
变量赋值中,绿色箭头处,当出现第二次 ‘Z=’ token时,前面Z=、177直接掩蔽掉
(2)自然语言模型
序列:Bar,##ack, Obama

##ack直接掩蔽了bar,这里红色线有深浅,代表掩蔽程度不同,比如day对a的掩蔽程度比较浅,说明保留了部分a的信息
3.选择函数
selection matrix SNxN,Sij表示标记xi对标记xj的掩蔽程度

S矩阵限制条件:1.通过ReLU限制负值为0,只降低注意力,不增强注意力 2. Begin of Sentence标记,初始句首不屏蔽,本身不关注不屏蔽







第一行:QK/sqrt(dk)
第二行:mask引入设置
第三行:选定head 0
第四行-第六行:S的三个约束条件
第七行:右移,且右移后对角线为0?
第八行:S累加得到F,为什么累加?
第九行:从标准attention中减去F
第十行:归一化权重
文心一言代码解读

4.context pruning 上下文剪枝
上下文缓冲区修剪元素来减少注意力模块的内存和计算需求。每层的稀疏性在样本之间是稳定的(本文实验有验证),为每一层设定各自固定的内存预算。
上下文剪枝步骤:
1.初始化K = K1, . … , KL= N,为每层内存预算,其中N的上下文缓冲区大小
2.前Kl个token保持,后续每个token和前面对比,丢弃最高F值对应token
3.贪婪迭代方法分配总的内存预算,迭代直到模型性能达到预定义阈值,即标准attention模型性能
5.loss

每层内存之和/层数token数,我们希望M(内存)越小越好,M越小,L越小,相关性一致,同时Ln≠pad即同aqrt(dk)限定范围一样,将分子大小限定一定范围内

内存计算, τ= 1限定F矩阵范围不超过1
Lppl: standard log-perplexity loss 标准对角困惑度损失函数
ϵ is a small weight factor: ϵ = 0.1, τ= 1,固定数值
L表示层数,n≠pad表示非填充标记的数量(字符串输入固定,缺失填充padding,对应token来说即非填充token,实际有效信息token)
6.selective attention改进及其效果
(1)简单且无需额外参数
(2)减小注意力机制的上下文缓冲区大小,推理过程中显著减少内存和计算需求
(3)标准Attention模型拥有约两倍多的头数和参数与selective attention效果相当
(4)上下文大小为512、1024和2048时,内存分别比未采用选择性注意力的相同验证困惑度的模型减少16倍、25倍和47倍
7.待改进
(1)Decoder-only
(2)上下文减少提高推理效率,但并不能提高训练效率,探索在训练过程中迭代减少上下文缓冲区的大小
(3)移除元素后,没有对模型进行进一步的训练,在上下文减少后进行一些额外的训练可能会实现进一步的改进
(4)仅对具有选择性注意力的预训练模型进行了实验,微调步骤中将其应用于现有模型
8.实验
相关文章:
Selective attention improves transformer详细解读
Selective attention improves transformer Google 2024.10.3 一句话:简单且无需额外参数的选择性注意力机制,通过选择性忽略不相关信息并进行上下文剪枝,在不增加计算复杂度的情况下显著提升了Transformer模型的语言建模性能和推理效率。 论…...
git配置用户信息
在 Git 中配置用户信息,主要是设置你的用户名和电子邮件地址,这些信息会被 Git 用来记录提交的作者信息。以下是配置用户信息的步骤: 打开命令行工具。 设置你的用户名: git config --global user.name "你的名字"例如…...
【eNSP】路由基础与路由来源——静态路由实验
路由是数据包从源地址到目的地址的传输路径,静态路由是指网络管理员手动配置的路由条目,用于指定数据包从源地址到目的地址的固定路径。以下是关于静态路由的详细介绍。 一、路由的基础知识点 路由的定义: 路由是指在计算机网络中ÿ…...
Python Web 应用开发基础知识
Python Web 应用开发基础知识 引言 随着互联网的快速发展,Web 应用程序的需求日益增加。Python 作为一种简单易学且功能强大的编程语言,已经成为 Web 开发中广受欢迎的选择之一。本文将深入探讨 Python Web 开发的基础知识,包括常用框架、基…...
STM32 标准库函数 GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_Write 区别
GPIO_SetBits: 使用例: GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);意思是将GPIOA1和GPIOA2设为高电平 GPIO_SetBits(GPIOA, 0x0003);意思也是将GPIOA1和GPIOA2设为高电平 实际上当选中GPIOA时,它会按位遍历,在哪一位有1说…...
【Redis_Day4】内部编码和单线程模型
【Redis_Day4】内部编码和单线程模型 五大数据类型内部编码object encoding key1:查询key1对应值的内部编码 redis中的单线程模型 redis中的数据都是以键值对的方式存的,redis内部用哈希表组织这些键值对。 五大数据类型 站在用户角度, 在一…...
Vue模块化开发的理解
Vue模块化是指在Vue.js开发中,将代码按功能拆分成多个独立的模块,以提高代码的可维护性、可读性和复用性。以下是对Vue模块化的详细理解: 一、Vue模块化的实现方式 组件化开发: Vue组件是模块化的基本单元,每个组件封…...
在Ubuntu22.04上源码构建ROS noetic环境
Ubuntu22.04上源码构建ROS noetic 起因准备环境创建工作目录并下载源码安装编译依赖包安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本编译安装ROS noetic和ros_test验证 起因 最近在研究VINS-Mono从ROS移植到ROS2,发现在编写feat…...
算法--解决二叉树遍历问题
第一 实现树的结构 class Node(): # 构造函数,初始化节点对象,包含数据和左右子节点 def __init__(self, dataNone): self.data data # 节点存储的数据 self.left None # 左子节点,默认为None self.rig…...
[刷题]入门1.矩阵转置
博客主页:算法歌者本篇专栏:[刷题]您的支持,是我的创作动力。 文章目录 1、题目2、基础3、思路4、结果 1、题目 链接:洛谷-B2106-矩阵转置 2、基础 此题目主要考察二维数组的掌控能力。 3、思路 观察,可知&#…...
Flutter开发之flutter_local_notifications
flutter_local_notifications 消息通知 flutter_local_notifications地址 flutter_local_notifications: ^18.0.1class NotificationHelper {//工厂模式调用该类时,默认调用此方法,将实例对象返回出去static NotificationHelper? _instance null;sta…...
Gradle和maven
大家好,我是风筝 作为Java 开发者,你平时用 Maven 还是 Gradle? 我一直用的都是 Maven,但是前几天做了一个小项目,用的是 Gradle,因为项目创建出来默认就是用的 Gradle,而且功能足够简单&#x…...
RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)
文章目录 RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)一、引言二、简介三、准备工作3.1 说明3.2 生成项目 四、实战4.1 交换机(Exchanges)4.2 临时队列(Temporary Queues&am…...
服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
服务器被挂马(即被植入恶意软件)是一个常见的网络安全问题,可能导致数据泄露、服务中断和经济损失。本文将详细介绍如何检测和清除服务器上的恶意软件,并提供实用的代码示例,帮助读者解决服务器被挂马的问题。 一、什…...
Qt 项目架构设计
在开发一个 Qt 项目时,合理的文件夹结构和清晰的构建流程是非常重要的。Qt 项目通常需要管理源代码、UI 文件、资源文件、构建脚本等。下面我会给出一个详细的文件夹结构示例,并解释每个部分的作用及如何设计 Makefile 或使用 Qt 的 qmake 来自动化构建过…...
Elasticsearch:管理和排除 Elasticsearch 内存故障
作者:来自 Elastic Stef Nestor 随着 Elastic Cloud 提供可观察性、安全性和搜索等解决方案,我们将使用 Elastic Cloud 的用户范围从完整的运营团队扩大到包括数据工程师、安全团队和顾问。作为 Elastic 支持代表,我很乐意与各种各样的用户和…...
高级java每日一道面试题-2024年11月07日-Redis篇-Redis有哪些功能?
如果有遗漏,评论区告诉我进行补充 面试官: Redis有哪些功能? 我回答: Redis 是一个开源的、基于键值对的 NoSQL 数据库,以其高性能、丰富的数据结构和多种功能而闻名。在高级 Java 面试中,了解 Redis 的核心功能和高级特性是非常重要的。以下是 Redi…...
实用且免费的 IP 地域查询 API 接口推荐
实用且免费的 IP 地域查询 API 接口推荐 在日常开发中,IP 地域查询是一个常见需求。最近无意间发现一个实用的 IP 地域查询 API,目前是免费的,未来是否收费尚不可知,但在当前情况下非常值得推荐。 API 地址示例: ht…...
STM32学习笔记----SPI协议
STM32的SPI(串行外设接口,Serial Peripheral Interface)是一种常见的同步串行通信协议,广泛应用于与传感器、显示屏、存储设备等外设的通信。SPI通过主从模式(Master/Slave)来实现数据交换,其中…...
Ceph的pool有两种类型
Replicated Pool(拷贝型Pool,默认) 概述: 这是Ceph的默认存储池类型。它通过生成对象的多份拷贝来确保数据的冗余和高可用性。 工作原理: 每个存入的对象(Object)都会被存储为多个副本…...
NotebookLM文献管理到底靠不靠谱?——基于372篇实证论文的引用准确率压力测试报告
更多请点击: https://intelliparadigm.com 第一章:NotebookLM文献管理到底靠不靠谱?——基于372篇实证论文的引用准确率压力测试报告 为验证Google NotebookLM在学术场景下的引用可靠性,我们对372篇跨学科实证论文(含…...
iOS设备激活锁绕过全指南:AppleRa1n离线解锁解决方案
iOS设备激活锁绕过全指南:AppleRa1n离线解锁解决方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾遇到过这样的情况:购买了一台二手iPhone,却发现设备被…...
5步构建智能建筑通信系统:BACnet4J纯Java协议栈的架构师指南
5步构建智能建筑通信系统:BACnet4J纯Java协议栈的架构师指南 【免费下载链接】BACnet4J BACnet/IP stack written in Java. Forked from http://sourceforge.net/projects/bacnet4j/ 项目地址: https://gitcode.com/gh_mirrors/ba/BACnet4J 在智能建筑和工业…...
为你的 AI Agent 项目选择并接入性价比更高的多模型服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为你的 AI Agent 项目选择并接入性价比更高的多模型服务 在构建 AI Agent 应用时,开发者常常面临一个两难选择…...
SmartDock:如何在Android设备上构建高效桌面环境
SmartDock:如何在Android设备上构建高效桌面环境 【免费下载链接】smartdock A user-friendly desktop mode launcher that offers a modern and customizable user interface 项目地址: https://gitcode.com/gh_mirrors/smar/smartdock 当Android设备从手机…...
HunterPie完全指南:3分钟掌握《怪物猎人世界》终极覆盖层工具
HunterPie完全指南:3分钟掌握《怪物猎人世界》终极覆盖层工具 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/Hunte…...
保姆级教程:在NVIDIA TX1上搞定万集WLR-716激光雷达的ROS驱动与RVIZ可视化
保姆级教程:在NVIDIA TX1上搞定万集WLR-716激光雷达的ROS驱动与RVIZ可视化 当机器人开发者第一次拿到万集WLR-716激光雷达和NVIDIA Jetson TX1开发板时,最迫切的需求就是快速搭建测试环境,验证硬件功能。本文将提供一份从零开始的详细指南&am…...
基于CircuitPython与NeoPixel的桌面俄罗斯方块游戏机DIY全攻略
1. 项目概述与核心思路几年前,我在麻省理工学院(MIT)的校园里第一次看到那座著名的“绿楼”(Green Building)外墙上的巨型俄罗斯方块游戏时,就被深深震撼了。那不仅仅是一个游戏,更是一种将冰冷…...
基于本地大模型的字幕翻译:LM Studio集成方案与实战优化
1. 项目概述:当本地大模型遇上字幕翻译最近在折腾本地大模型应用时,发现了一个挺有意思的场景:字幕翻译。很多朋友喜欢看海外影视剧或学习资料,但苦于没有高质量的中文字幕。在线翻译工具要么有字数限制,要么担心隐私泄…...
Qt Scene Graph渲染管线深度解析:从QML到GPU像素的奇幻之旅
揭开Qt Quick高性能渲染的黑盒,掌握60fps丝滑界面的核心秘密一、为什么Scene Graph是Qt Quick的灵魂? 当你用QML写一个流畅的动画界面,轻松跑到60fps,有没有想过背后的渲染引擎到底做了什么?传统的QWidget走的是CPU软件…...
