[Linformer]论文实现:Linformer: Self-Attention with Linear Complexity

文章目录

    • 一、完整代码
    • 二、论文解读
      • 2.1 介绍
      • 2.2 Self-Attention is Low Rank
      • 2.3 模型架构
      • 2.4 结果
    • 三、整体总结

论文:Linformer: Self-Attention with Linear Complexity
作者:Sinong Wang, Belinda Z. Li, Madian Khabsa, Han Fang, Hao Ma
时间:2020

模型结构较于简单,证明有点难,有时间可以做一下文章的证明分析;

一、完整代码

这里我们使用python代码进行实现

# 完整代码在这里
# 模型结构较于简单,有时间再弄

二、论文解读

2.1 介绍

这是一篇介绍transformer的优化模型的论文,其对普通的transformer模型进行了优化,把时间复杂度和空间复杂度都从 O ( n 2 ) O(n^2) O(n2)降低为了 O ( n ) O(n) O(n);论文推出的模型叫Linformer,其主要思想利用到了两个思想,一个是the distributional Johnson–Lindenstrauss lemma, the Eckart–Young–Mirsky Theorem;这两个思想一同证实了利用降维去构造一个低秩矩阵来降低复杂度的可行性;

为什么要改进transformer模型:计算量太大,价格昂贵,操作复杂度为 O ( n 2 ) O(n^2) O(n2);部署困难,并不容易进行推理;

目前的其他降维方法Sparse transformer利用Sparse matrixReformer利用locally-sensitive hashing (LSH),并且只有序列长度大于2048的时候才有用;

不同模型架构方法对比如下:

相比于图中的模型,Linformer在复杂度和操作上是最佳的;

在这里提一下Transformer的自注意力机制,这都是非常基础了;

提高transformer的效率有很多种办法,下面简单介绍几种:

Mixed Precision:使用半精度或混合精度表示,即采用量化的方式加快计算;

Knowledge Distillation:和DistillBERT一样,利用学生模型去学习教师模型的分布预测;

Sparse Attention:只计算对角线部分的注意力权重;

该技术通过在上下文映射矩阵P中添加稀疏性来提高自我注意的效率。例如,sparse transformer只计算矩阵P的对角线附近的Pij(而不是所有的Pij)。同时,block-wise self-attentionP划分为多个块,只计算所选块内的Pij。然而,这些技术也遭受了很大的性能下降,同时只有有限的额外加速,即下降2%,加速20%。

LSH Attention:操作复杂,有效果但是有限制;

Locally-sensitive hashing(LSH)注意在计算点积注意时采用了多轮哈希方案,在理论上将自注意复杂度降低到O(n log(n))。然而,在实践中,它们的复杂度项有一个很大的常数1282,并且只有当序列长度非常长时,它才比普通的变压器更有效。

Improving Optimizer Efficiency:没注意过,不出名;

Microbatching将一批分成小的微批(可以放入内存),然后通过梯度积累分别向前和向后运行。Gradient checkpointing仅通过缓存一个图层子集的激活来节省内存。在从最新的检查点进行反向传播期间,将重新计算未缓存的激活。这两种技术都可以利用时间来换取内存,而且都不能加快推理的速度。

2.2 Self-Attention is Low Rank

如标题,这节主要证明了self-attention其实是一个低秩矩阵;

作者使用了两个预训练的transformer模型,RoBERTa-baseRoBERTa-large,前者是12层的模型,后者是24层的模型;

作者通过对每一层的特征值进行分解,然后做图如下,纵坐标代表归一化的累积特征值,由于序列长度是512维的,所以一个有512个特征值;

通过观察发现,当取前面128个较大的特征值时,累积特征值已经到达了95%,通过主成分可以直到,前面128个较大的特征值可以表示整体的95%的信息,所以我们可以对其使用奇异值分解的方式降低维度从而达到降低复杂度的目的;

下图是不同层次的累积贡献度的谱分布,如下:

从上图中我们可以发现:高层的谱分布比下层更倾斜,这意味着在高层,更多的信息集中在最大奇异值,导致了P的秩相较于底层较低;

这里利用两个思想,一个是the distributional Johnson–Lindenstrauss lemma, the Eckart–Young–Mirsky Theorem;前者证明出现高维矩阵是低秩矩阵这种现象是正常的,后者表示奇异值分解在相同的维度下获得低秩矩阵的绝大部分信息;而奇异值分解是相当需要计算量的,高维矩阵分解操作起来很复杂,这里论文中使用投影的方式解决了这一问题;

2.3 模型架构

直接看下面这张图,就知道作者做了什么处理:

Linear层得到了 Q , K , V Q,K,V Q,K,V后,为了降低 K , V K,V K,V的维度,其使用了投影到低维的方式,具体公式如下:

之前 Q W , K W , V W QW,KW,VW QW,KW,VW都是一个n·d_model的矩阵,在这里有 E i , F i E_i,F_i Ei,Fi都是一个k·n的矩阵,有前面的softmax变成了一个 n·k的矩阵,后者是一个k·d的矩阵,这里的空间复杂度为 O ( k n + 2 k d ) O(kn + 2kd) O(kn+2kd),把平方项降低为一次项;如果我们可以选择一个非常小的投影维数k,即kn,那么我们就可以显著地减少内存和空间消耗;

从下图,我们可以发现设置的k越小,推理速度越快;

这和预期一致;

继续优化可以采用方法

Parameter sharing between projections:即共享投影层的参数,

  • 头之间共享:在每一层中的投影矩阵 E , F E,F E,F中,我们共享两个投影矩阵 E i E_i Ei F i F_i Fi,确保在每一个头 i i i中,有 E i = E , F i = F E_i=E,F_i=F Ei=E,Fi=F
  • K , V K,V K,V之间共享:在每一层中的投影矩阵 E , F E,F E,F中,我们共享两个投影矩阵 E i E_i Ei F i F_i Fi并化为一个矩阵,确保在每一个头 i i i中,有 E i = F i = E E_i=F_i=E Ei=Fi=E
  • 层与层之间共享:在所有的层中,对于所有的头部,对于所有的键和值,都使用一个投影矩阵 E E E

Nonuniform projected dimension:不均匀投影,意思是结合不同层的低秩矩阵的秩,如上文我们可以得到高层的秩要比底层的秩要小,所以我们可以在高层设置较小的k在低层设置较大的k

General projections: 我们可以采用其他的机制来缩小维度,而不是利用一个简单的投影的方式,例如均值池化,最大池化,卷积等等方式来缩小维度代替简单投影;

2.4 结果

论文中的结果可视化如下:

接下来对结果做一些解释:

a,b两图作者做了ppl曲线来判断模型的效果,在 n = 512 n=512 n=512时,随着k的增加,模型越来越贴近standard transformer曲线,有的模型甚至超过了;在 n = 1024 n=1024 n=1024时,表现了相同的趋势,但是同时可以发现,效果是非常贴近于标准模型的;

c图中,使用了三种参数共享策略来检验模型结果,可以发现参数共享并不会产生较大的影响,所以我们可以在模型中使用参数贡献,在保存相同的效果下,减少模型的参数;

d图中随着序列长度的增加,投影维数保持不变,收敛后的最终ppl仍然保持大致相同。而且不同曲线之间的间隔大小似乎相等,说明这是线性的;

下游任务模型效果,可以发现模型效果有些甚至超过了BERTDistillBERT

从模型 n = 1024 , k = 256 n = 1024,k = 256 n=1024k=256和模型 n = 512 , k = 256 n = 512,k = 256 n=512k=256效果一致可以看出来,模型的效果由预测维度k而不是比率n/k决定;

这是推理时间效果和空间复杂度效果的对比,可以看到Linformer可以在保持效果的情况下,大大优化时间和空间复杂度;

三、整体总结

这是一篇介绍transformer的优化模型的论文,其对普通的transformer模型进行了优化,把时间复杂度和空间复杂度都从 O ( n 2 ) O(n^2) O(n2)降低为了 O ( n ) O(n) O(n);论文推出的模型叫Linformer,其主要思想利用到了两个思想,一个是the distributional Johnson–Lindenstrauss lemma, the Eckart–Young–Mirsky Theorem;这两个思想一同证实了利用降维去构造一个低秩矩阵来降低复杂度的可行性;

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

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

相关文章

浏览器输入URL再按下回车会经历哪些过程

目录 前言 一、解析URL 二、解析域名(DNS) 三、TCP三次握手建立连接 1.seq、syn、ack含义 2.三次握手 四、发送http/https请求 五、服务器响应请求 六、浏览器解析渲染页面 七、TCP四次挥手断开连接 总结 前言 看各种面经发现这个问题是一个高频出现的面试问题,但…

每日一题SQL

以下题目来源微信公众号【SQL数据库开发】 1、编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔…

四十五、Redis主从

目录 1、数据同步原理 (1)全量同步 (2)增量同步 (3)优化Redis主从集群 (4)什么时候执行全量同步 (5)什么时候执行增量同步 2、流程 1、数据同步原理 &…

Salesforce“卷土重来”:对中国CRM市场影响在哪?

于本土CRM而言,Salesforce是一面镜子,也更是催化剂。 长期来看,Salesforce的加入,从某种程度上将会加速中国CRM赛道的合理价值曲线的走向,通过带动外界对于CRM整个赛道的关注和热度,进而加速本土CRM的成长…

在vue项目中,数据已经在页面渲染,但在后续操作时获取不到数据

如下图 产生这个问题的原因 异步问题 如何解决 方法一:可以将其存放在一个setTimeout里面(利用一个极小的延迟来获取数据),如下图 效果 方法二:将操作放入axios里面,如下图

心理学效应

条柠檬心理马太效应飞轮效应酸葡萄效应凡勃伦效应登门槛效应糖果效应南风效应野马效应聚光灯效应毛毛虫效应曝光效应

【Matlab】如何使用MATLAB可视化二重积分(附完整MATLAB代码)

可视化二重积分 前言正文完整代码代码实现可视化结果 前言 二重积分是指在二维空间中对函数进行积分。二重积分的公式如下: ∫ a b ∫ c d f ( x , y ) d x d y ∫_a^b ∫_c^d f(x, y) dx dy ∫ab​∫cd​f(x,y)dxdy 其中, a a a 和 b b b 是 x x x…

Docker-consule 服务发现与注册

consul服务更新和服务发现 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&…

7-8 报销

年底,报销都挤在一堆,财务忙得不可开交。每个报销表包括姓名,各项费用的金额。对于每个报销单,这里规定按如下要求处理: 金额高的优先处理;若金额相等时,则姓名字典序小的优先处理;…

Linux出击之网络环境设置

Linux中如果想要设置静态IP,这就需要我们进行自己去设置。 首先想知道是否有网络,我们就可以查看我们的网卡信息呀,ping 外网地址试试。 比如, ping www.baidu.com ip addr show, 这两个命令都可以让我们对网络有一个了解。 …

豪腾四海×实在RPA丨最懂财务的数字员工,为企业节省人天2000+

企业数字化转型,财务是一个重要的切入点。随着豪腾四海数字化业务不断展开,新的系统、流程和数据源被不断引入,财务部门面临的是不断暴增的对账、数电票处理、审计等日常工作。 “如此大的工作量,即使是经验丰富的资深财务&#…

设置一个vue文件的全局模板

VsCode在新建一个.vue文件的时候是空白的,需要我们自己输入片段,可这些在每次新建.vue文件都需要自己手敲,所以创建一个模板方便使用 设置vue模板 导入 {"生成 vue 模板": {"prefix": "vue","body"…

柯桥西班牙语里最“好用”的脏话:一些关于cojones的表达

Creo que una de las palabras con ms contextos donde se puede utilizar y que adems pronto es conocida por los estudiantes de espaol es esta que est en el ttulo. 相信标题中的这个单词“cojones”,使用时总是包含很多含义,同时也是西语学习者最…

Power BI - 5分钟学习增加索引列

每天5分钟,今天介绍Power BI增加索引列。 什么是增加索引列? 增加索引列就是向表中添加一个具有显式位置值的新列,一般从0或者从1开始。 举例: 首先,导入一张【Sales】样例表(Excel数据源导入请参考每天5分钟第一天)…

SuperMap iManager 11i(2023) SP1新特性汇总

作者:ls 【目录】 (一)GIS云套件支持发布聚合服务(二)GIS云套件支持自定义/修改服务接口信息(三)GIS云套件管理界面支持批量修改镜像(四)GIS云套件管理界面可调整服务节点…

【ChatGLM3】第三代大语言模型多GPU部署指南

关于ChatGLM3 ChatGLM3是智谱AI与清华大学KEG实验室联合发布的新一代对话预训练模型。在第二代ChatGLM的基础之上, 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、…

三年没回家过年,你的羽绒服准备好了吗?

2023进入尾声,这一年,我们在“阳康”之后重新出发,找回了烟火气,和错过几年的山水重逢,向往远方的同时也更爱眼前的点滴,逐渐重建起对美好生活的期待。 把生活态度投射到社媒上,出圈的热点话题…

Notepad++插件:格式化JSON

一、问题描述 最近有这么一串json字符串: 你想看吗? 是不是觉得密密匝匝滴,很不想看呢? 下面是经过处理的json字符串: 你喜欢哪种格式的json字符串展示呢? 反正我喜欢已经格式化的,也就是第二…

金蝶云星空和旺店通·企业奇门单据接口对接

金蝶云星空和旺店通企业奇门单据接口对接 对接源平台:旺店通企业奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级,实…

基于单片机的电阻、电容、电感测试仪(论文+源码)

1.系统设计 1)控制部分:本设计以单片机为核心,采用89C52单片机,利用其管脚的特殊功能以及所具备的中断系统,定时/计数器和LCD显示功能等。在本设计中,采用LCD1602液晶显示:本设计中有1个CD4502、3个LM555、…