文献阅读:Transformers are Multi-State RNNs

  • 文献阅读:Transformers are Multi-State RNNs
    • 1. 内容简介
    • 2. 方法介绍
      • 1. 基础回顾
        • 1. RNN
        • 2. Transformer
      • 2. Transformer解构
        • 1. MSRNN
        • 2. Transformer
      • 3. TOVA
        • 1. 现有转换策略
        • 2. TOVA
    • 3. 实验考察 & 结论
      • 1. 实验设计
      • 2. 实验结果
        • 1. LM
        • 2. 长文本理解
        • 3. 文本生成
      • 3. 细节考察
    • 4. 总结 & 思考
  • 文献链接:https://arxiv.org/abs/2401.06104
  • GitHub链接:https://github.com/schwartz-lab-NLP/TOVA

1. 内容简介

这篇文章是今年1月Meta发表的一篇对Transformer的解构工作。

它对Transformer进行了更深入的解析和考察,发现Transformer的self attention机制等价于一个无限状态的MSRNN(multi-state RNN),并在此基础上对MSRNN进行了优化,提出了一个TOVA的MSRNN压缩策略,使之效果超过了其他的MSRNN,并能够与Transformer本身相提并论。而在内存方面,则显著优于经典的Transformer模型。

在这里插入图片描述

下面,我们就来具体看一下文中对于Transformer的具体考察以及文中提出的TOVA方法究竟是怎样的一个设计思路。

2. 方法介绍

1. 基础回顾

在解构Transformer以及引入TOVA之前,文中首先回顾了一下RNN和Transformer本身,这里,为了保持文章在结构上的完整性,我们也简略的回顾一下RNN和Transformer本身。

1. RNN

首先的话,RNN的话是一个迭代的解构,模型本身维护一个隐态 h t h_t ht,然后根据输入 x t x_t xt进行迭代:

x t l + 1 , h t l = f ( x t l , h t − 1 l ) x_t^{l+1}, h_{t}^{l} = f(x_t^l, h_{t-1}^l) xtl+1,htl=f(xtl,ht1l)

2. Transformer

Transformer的话则是self-attention的解构,具体表达式如下:

X l + 1 = F F N ( A t t n ( X l ) ) = F F N ( S o f t m a x ( Q l ⋅ ( K l ) T ) ⋅ V l ) \begin{aligned} X^{l+1} &= \mathop{FFN}(\mathop{Attn}(X^l)) \\ &= \mathop{FFN}(\mathop{Softmax}(Q^l\cdot (K^l)^T) \cdot V^l) \end{aligned} Xl+1=FFN(Attn(Xl))=FFN(Softmax(Ql(Kl)T)Vl)

2. Transformer解构

有了上面的基础,我们来看一下文中是如何说明Transformer的本质就是一个无线state的MSRNN的。

我们将分两部分来说明这个问题:

  1. MSRNN是什么
  2. Transformer怎么对应到一个MSRNN

下面,我们来看一下文中对于这两个问题的回答。

1. MSRNN

首先,我们来看一下MSRNN是什么,本质上来说,MSRNN还是一个RNN,不过RNN当中的隐态是一个向量,而MSRNN则是用一个矩阵来替代向量,直观上理解就是有多个隐态,即multi-state。

用公式表达即为:

x t l + 1 , H t l = f ( x t l , H t − 1 l ) x_t^{l+1}, H_{t}^{l} = f(x_t^l, H_{t-1}^l) xtl+1,Htl=f(xtl,Ht1l)

2. Transformer

然后,我们再来看一下Transformer,如前所述,Transformer的每一个module可以写为:

X l + 1 = F F N ( S o f t m a x ( Q l ⋅ ( K l ) T ) ⋅ V l ) X^{l+1} = \mathop{FFN}(\mathop{Softmax}(Q^l\cdot (K^l)^T) \cdot V^l) Xl+1=FFN(Softmax(Ql(Kl)T)Vl)

我们可以将其重写为:

x t l + 1 = F F N ( S o f t m a x ( q t l ⋅ ( K t l ) T ) ⋅ V t l ) x_{t}^{l+1} = \mathop{FFN}(\mathop{Softmax}(q_t^l\cdot (K_t^l)^T) \cdot V_t^l) xtl+1=FFN(Softmax(qtl(Ktl)T)Vtl)

亦即:

x t l + 1 , ( K t l , V t l ) = f l ( x t l , ( K t l , V t l ) ) x_{t}^{l+1}, (K_t^l, V_t^l) = f^l(x_t^l, (K_t^l, V_t^l)) xtl+1,(Ktl,Vtl)=fl(xtl,(Ktl,Vtl))

因此,从定义式上来看,Transformer确实可以理解为无限维度的MSRNN。

3. TOVA

综上,我们已经可以发现,在形式上而言,Transformer可以视为一个无限state的MSRNN,但是无限state显然在实现层面并不现实,因此,要想要真正将其对应到MSRNN,我们需要一个无限维转换为有限维的转换策略。

文中的话也是首先讨论了一下现有的几个转换的方法,然后在此基础上提出了他们自己的转换方法,即他们所谓的TOVA方法。

下面,我们来具体看一下这两部分的内容。

1. 现有转换策略

首先,我们来看一下当前已有的一些无限维转有限维的策略,文中主要给出了三种方法:

  1. Window
    • 只保留最后k个token
  2. Window + i
    • 保留最后k个token以及头部的i个token
  3. H 2 O H_2O H2O
    • 保留最后k个token,然后动态通过attention score额外多保留i个token
2. TOVA

然后,我们来看一下文中提出的TOVA方法,其全称为Token Omission Via
Attention (TOVA),思路上其实也很直接,就是直接通过attention score选择attention score最高的k个token进行保留,文中给出示意图如下:

在这里插入图片描述

3. 实验考察 & 结论

下面,我们来考察一下文中的实验结果。

我们将分以下几个部分对文中的内容进行一下整理:

  1. 文中的实验设计
  2. 具体的实验结果
  3. TOVA的拆解实验

1. 实验设计

首先,我们来看一下文中的实验设计,主要包括两部分的内容:

  1. 具体采用的实验
  2. 实验中使用的模型

其中,关于文中具体采用的实验的话,主要是长文本上的实验,包括:

  1. LM的ppl考察
  2. 长文本的理解实验
  3. 文本生成任务

而关于文中使用的模型的话,文中主要使用了以下三类模型:

  1. LLama-2-7B
  2. Mistral-7B
  3. Yi-7B

2. 实验结果

下面,我们来看一下文中给出的具体实验结果。

1. LM

首先,关于Language Model的ppl,文中得到结果如下:

在这里插入图片描述

可以看到:

  • 在各类策略下,TOVA能够获得最好的效果表达,且在各个模型下都有一致的结论。
2. 长文本理解

文中关于长文本当中理解任务的实验结果则如下所示:

在这里插入图片描述

可以看到:

  • 无论是在长文本概括任务还是长文本QA任务当中,TOVA的效果都显著优于其他的转换策略。
  • 同样的,在长文本理解任务当中,TOVA同样在不同的模型当中都有一致的有效性表达。
3. 文本生成

最后,文中还在生成任务当中对TOVA的效果进行了一下考察,具体来说的话,就是令TOVA和GPT4分别进行生成,然后交给人来标注对比结果的好坏,得到结果如下:

在这里插入图片描述

可以看到:

  • 随着文本的增长,TOVA的效果逐步追上GPT4,说明TOVA在长文本下确实有效,且效果拔群。

3. 细节考察

然后,除了对于TOVA效果的基础考察,文中还对TOVA进行了细节的拆解,具体来说,主要就是考察了一下几个问题:

  1. TOVA保留的是哪些位置的token
  2. TOVA对于头部的token的留存度
  3. TOVA保留的具体是哪些token

文中得到的具体实验结果如下:

在这里插入图片描述

在这里插入图片描述

可以看到:

  • 在图7当中,每一行代表对应的step当中参与到生成当中的token,可以看到,整体来说,邻近的token会更重要,当这也不是必然的,有时候长程的token也会参与其中,反而是短程的会被过滤掉。
  • 从图8可以看到,前25个token都悲保留了很长的距离,且第一个token尤为关键;
  • 从图9可以看到,一些标点符号类型的token会被更倾向于保留下来。

4. 总结 & 思考

综上,文中对Transformer进行了一下结构上的解构分析,发现其本质上就是一个无限维的MSRNN,且通过一定的压缩策略,可以用一个有限维的MSRNN对其进行逼近。

基于此,文中给出了一个名为TOVA的压缩策略,碾压了当前已有的其他压缩策略,并在长文本当中的效果逼近了GPT4,而在batch size方面可以扩大8倍,即效率上可以比当前的Transformer结构更好。

这个还是非常厉害的,Meta感觉确实还是做了不少基础方面的工作,不过具体TOVA策略下的MSRNN能不能干掉Transformer估计现在也说不好,毕竟文中也没有给什么直接的比较,估计效果上还是有差。

后面再看看吧,看看能不能有什么工作能够最终干掉transformer框架吧。

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

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

相关文章

一. demo

1. 舞台-场景-控件 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.stage.Stage;import java.util.Arrays;public class Main e…

hive表中的数据导出 多种方法详细说明

​​​​​​文章中对hive表中的数据导出 多种方法目录 方式一:insert导出 方式二:hive shell 命令导出 方式三:export导出到HDFS上 目标: 将hive表中的数据导出到其他任意目录,例如linux本地磁盘,例如hd…

Jenkins设置root权限(13)

1.将 Jenkins 账号加入到 root 组中。 gpasswd -a jenkins root2.修改/etc/sysconfig/jenkins文件,添加如下配置。 JENKINS_USER"root" JENKINS_GROUP"root"3.重启 Jenkins service Jenkins restart4.验证 groups jenkins jenkins : jenkin…

pnpm项目内网迁移技巧

概述 因为公司项目需要,经常要从外网将代码拷贝到内网进行调试,因为pnpm是基于链接的npm管理工具,所以pnpm的项目迁移和普通的npm项目不一样。 步骤 离线安装pnpm # 在互联网设备执行 pnpm 的安装 npm i pnpm --install-strategyshallow …

【C语言】while循环语句

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&…

CS0449

CS 0449 – Project 1: Mastermind and EXIF Viewer Mastermind Implementation (30 points) In this game, the computer chooses 4 pegs each with one of 6 colors. This is the color-based predecessor to Wordle. The player’s job is then to guess the colors that t…

windows IIS 申请和配置https(SSL)的工具 win-acme

win-acme 是一个为Windows平台设计的工具,用于从Lets Encrypt自动获取和续期SSL/TLS证书,特别适合用于IIS(Internet Information Services)服务器。它的使用相对简单,提供了一个用户友好的命令行界面,以及一…

Python + Selenium —— 键盘操作!

Keys 类对键盘按键进行了定义,结合 send_keys() 方法可以向页面元素发送各种键盘按键。 比如在京东首页的搜索框,输入查询的内容后,再按一次回车。这是我们大部分人操作搜索的过程。 from selenium.webdriver.common.keys import Keys # 引…

技术派数据库表自动初始化(学习)

不需要在db中手动创建或者导入相关的schema、data&#xff0c;项目启动自动创建对应的表&#xff0c;并初始化。实现该过程。 Liquibase数据库版本管理 依赖配置 在paicoding-web模块中&#xff0c;pom.xml 文件中添加 <dependency><groupId>org.liquibase</g…

自 JDK 8 到 JDK 21 以来所有 Java 和 JVM 特性的分类列表

请参看文章&#xff1a;自 JDK 8 到 JDK 21 以来所有 Java 和 JVM 特性的分类列表

【ECMAScript语法】讲解

ECMAScript语法介绍 ECMAScript&#xff08;通常缩写为ES&#xff09;是一种由Ecma国际&#xff08;前称为欧洲计算机制造商协会&#xff09;标准化的脚本程序语言的标准化&#xff0c;它被用来创建客户端和服务器端的应用程序&#xff0c;但是它最为人所熟知的应用环境还是作…

python爬虫之协程知识点记录

一、协程 概念 协程 又称微线程(纤程)&#xff0c;是一种用户态的轻量级线程 子程序 在所有的语言中都是层级调用的&#xff0c;比如A中调用B&#xff0c;B在执行过程中调用C&#xff0c;C执行完返回&#xff0c;B执行完返回&#xff0c;最后是A执行完毕。这是通过栈实现的&a…

01 MySQL之连接

1. 连接 1.0 基础认知 多表(主表)和一表(从表的区别): 多表一般是主表&#xff0c;一般存储主要数据&#xff0c;每个字段都可能存在重复值&#xff0c;没有主键&#xff0c;无法根据某个字段定位到准确的记录&#xff1b; 一表一般是从表&#xff0c;一般存储辅助数据&…

2024年腾讯云优惠活动——十大活动TOP10来看看

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

「板块轮动」和「经济周期」的关系

这是 溪踪投研 的第 005 篇文章 初涉股市&#xff0c;如身在山中&#xff0c;丘壑纵横&#xff0c;不知所处。这时不妨把时间拉长、范围拓宽&#xff0c;视野格局大为不同&#xff0c;就更容易找到投资方向&#xff0c;趋利而动、避害而行。 一、逃不开的「经济周期」 如同人…

阿里云4核16G服务器多少钱?幻兽帕鲁配置报价

2024阿里云幻兽帕鲁专用服务器价格表&#xff1a;4核16G幻兽帕鲁专用服务器26元一个月、149元半年&#xff0c;默认10M公网带宽&#xff0c;8核32G幻兽帕鲁服务器10M带宽价格90元1个月、271元3个月。阿里云提供的Palworld服务器是ECS经济型e实例&#xff0c;CPU采用Intel Xeon …

Android使用AtomicReference

AtomicReference 是 Java 中用来提供原子操作的类之一&#xff0c;它可以在多线程环境下安全地对对象引用进行读取和更新操作。在 Kotlin 中&#xff0c;我们也可以直接使用 AtomicReference 来实现线程安全的参数。 以下是一个简单的示例&#xff0c;演示了如何在 Kotlin 中使…

迎接2024年3月5-7日国际生物发酵展-华运机械

参展企业介绍 合肥华运机械制造有限公司初创于1995年&#xff0c;系国内专业性流体机械设备制造的高新技术企业、安徽省专精特新企业&#xff0c;公司位于国家级开发区合肥双凤工业园&#xff0c;拥有15000㎡现代化厂房&#xff0c;几十台精密数控机床和焊接机器人&#xff0c…

vue3使用echarts绘制地图

vue3使用echarts绘制地图 安装echarts npm install echarts下载地图的json数据【我这里是把json数据单独粘出来然后新建了一个文件china.json】 下载中国及各个省份的地图数据引入 import chinaJson from ./china.json绘制地图 <template><div ref"myChart&q…

msql 查询json类型数据

模糊查询数组类型数据 SELECT * FROM table_name WHERE JSON_EXTRACT(column_name, $) LIKE %value%;# table_name 表名 # column_name:字段名 # $ 固定写死模糊查询键值对类型数据 SELECT * FROM table_name WHERE JSON_EXTRACT(column_name, $.key) LIKE %value%;# table_n…