SqueezeLM 的想法,压缩输入句子潜变量,生成下一句子

news2024/11/16 7:36:38

又搞了一段时间。还是感觉LongNet那种空洞注意力做编码器有搞头。
RetNet等AFT方法,直接生成太长的句子感觉有点难度,不过可以一句句生成,每次生成短句,这样感觉比较合适。

启发

受 MemroyTransformer 和 GLM 启发
想了一个类似T5的设计,包含编码器和解码器
只使用拼接和 CausalSelfAttention ,不使用 CrossAttention
可以等价省去 T5的解码器 里面的交叉注意力层

设计思路

流程文字

设定x输入为 1234567890
设定y目标为 0987654321
每个数字都是一个 token

预先设定压缩比例为 0.3,即输入长度为10的token,后面会附加上3个压缩token
------------------

编码器部分
输入序列
1234567890
在后面填入3个c压缩token,
得到1234567890ccc
经过 GPT2_Layer xN,使用ROPE绝对位置编码
取出后面3个c压缩的潜变量,作为编码器输出

------------------
解码器部分
设定序列
0987654321
在前面填入s开始token,作为解码器输入序列
s0987654321
在后面填入e结束token,作为解码器输出序列
0987654321e

获得 s0987654321 的 emb,然后在前面拼接上编码器的输出 c压缩潜变量
得到 cccs0987654321 的潜变量
经过 GPT2_Layer xN,使用ROPE绝对位置编码
移除前面的c压缩潜变量
得到 s0987654321 的潜变量
经过 output_embedding,获得解码器输出概率
将 解码器输出概率 与 解码器输出序列 0987654321e 计算Loss

对 Loss 计算 Backward

流程图
在这里插入图片描述

已进行试验

也做了一些简单的实验,在不成方圆的 中日互译任务上。
与PF6(GPT_style)24层模型做对照。

PF6
ck44,1024维度,24层Decoder,验证准确率是 0.8251

SqueezeLM
ck47,1024维度,16层Encoder,8层Decoder,压缩率1/4,验证准确率是 0.8095
ck48,1024维度,12层Encoder,12层Decoder,压缩率1/5,验证准确率是 0.8050
ck49,1024维度,6层Encoder,6层Decoder,压缩率1/5,验证准确率是 0.8006
ck50,1024维度,6层Encoder,6层Decoder,压缩率1/10,验证准确率是 0.7896

其中,这几个权重拥有几乎相同的参数量ck44,ck47,ck48
参数量为260M

不过确实,相同参数量下,验证分数相比GPT类的,确实差了一点点

如果是训练过程中,使用随机压缩率,在大的区间,例如0.1-0.9之间随机变化,收敛会非常慢
如果让使用小区间,0.3-0.5,收敛速度也有点慢。
如果使用固定压缩率,例如0.3,收敛速度是最快的

扩展想法

  1. Encoder 上使用CausalAttention,每一个C压缩token可能包含了层级的关系,可能像矩阵的奇异值分解的那样。保留的奇异值越多,就越能还原原始矩阵
  2. C压缩token里面,可能储存了一部分答案,而不只是输入序列的压缩向量。如果把Encoder层设置为16,Decoder层数设置为8,可能可以让Decoder更多地负责生成句子能力,Encoder更加地负责生成目标句子的意义。
  3. 可以像DeepFake双头解码器那样。实现一对多翻译器,一个Encoder接着多个Decoder。实现另外一种多语言翻译模式,可以有效隔离不同语言,避免混淆。
  4. 解码器修改,或许可以换成RWKV或RetNet之类的AFT模型,从而实现O(1)自循环预测。
  5. 解码器目的修改,不要求解码器生成长篇大论,只需要生成一句话,然后再把生成这句话附加到编码器输入,再生成压缩潜变量,再由解码器生成下一句话。

变体

更之前,有设计过一个变体,是编码器和解码器并行的,每个编码器层的输出都会收集起来。
然后在解码器部分,每层解码器输入都会拼接上 来自编码器的输出。每经过一个解码器层后,就把之前的拼接上的编码器输入的给切掉,再拼接下一个编码器层的输出。数据处理非常麻烦。
不过幸好,初步训练后,发现这个很麻烦的操作,并不能增加分数,训练速度和分数都不够直接把编码器输出拼接到第一层解码器输入那样高。
所以该变体被存档了。

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

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

相关文章

大会第二日,精彩不停!LiveVideoStackCon 2023 上海站

历时四个月的精心筹备,LiveVideoStackCon 组委会与联席主席、出品人及评审团通力合作,90余位讲师对演讲内容的反复琢磨……只为呈现最专业的音视频技术盛会。 今日,以「沉浸新视界」为主题的LiveVideoStackCon 2023 上海站 音视频技术大会继续…

ACL原理

ACL原理 ACL是一种用于控制网络设备访问权限的技术,可以通过配置ACL来限制特定用户、应用程序或网络设备对网络资源的访问。 1、ACL(Access Control List) 2、ACL是一种包过滤技术。 3、ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、…

Flowable-服务-微服务任务

目录 定义图形标记XML内容界面操作 定义 Sc 任务不是 BPMN 2.0 规范定义的官方任务,在 Flowable 中,Sc 任务是作为一种特殊的服务 任务来实现的,主要调用springcloud的微服务使用。 图形标记 由于 Sc 任务不是 BPMN 2.0 规范的“官方”任务…

WebAgent-基于大型语言模型的代理程序

大型语言模型(LLM)可以解决多种自然语言任务,例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近,LLM在自主网络导航方面也取得了巨大成功,代理程序助HTML理解和多步推理的能力,通过控制计算…

【Linux多线程】详解线程控制、线程分离

线程互斥与同步 👸 理解线程🤴pthead_t🥷关于线程🦸‍♀️线程控制POSIX线程库线程ID及进程地址空间布局 🦸线程分离__thread关键字🦸‍♂️pthread_detach函数🦹‍♀️pthread_exit函数&#x…

[JavaWeb]SQL介绍-DDL-DML

SQL介绍-DDL-DML 一.SQL简介1.简介2.SQL通用语法3.SQL语言的分类 二.DDL-操作数据库与表1.DDL操作数据库2.DDL操作表①.查询表(Retrieve)②.创建表(Create)③.修改表(Update)④.删除表(Delete) 三.Navicat的安装与使用四.DML-操作表数据1.添加(Insert)2.修改(Update)3.删除(Del…

【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

文章目录 前言一、反向迭代器封装(reverseiterator)1.构造函数1解引用操作.3.->运算符重载4.前置,后置5.前置--,后置--6.不等号运算符重载7.完整代码 二、rbegin()以及rend()1.rb…

[nlp] TF-IDF算法介绍

(1)TF是词频(Term Frequency) 词频是文档中词出现的概率。 (2) IDF是逆向文件频率(Inverse Document Frequency) 包含词条的文档越少,IDF越大。

01-导数的定义_左导数和右导数

微积分 导数的定义 左导数与右导数、可导函数 趋近于 0 有两个方向,从左边趋向于 0 是左导数,反之是右导数 下面的绝对值函数的左导数和右导数不相同,一个-1 一个1,0 位置不可导 f(x)|x|, 导数可以理解为某点的斜率…

生命在于学习——指纹混淆技术学习

一、前言 本篇文章仅为学习笔记记录,不得用于违规用途。 本篇文章为安全社公众号的Poker安全所发,本文仅为学习复现。 二、介绍 指纹混淆技术,顾名思义,就是迷惑指纹扫描识别技术。 三、思路 作者的思路: 1、伪…

代码随香录day31

今天开始贪心算法了! 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心算法一般分为如下四步: 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 455. 分发饼干 这里的思路…

openEuler?搭建java开发环境的详细过程

目录 1. 初始化环境2. 安装jdk83. 安装SVN4. 安装Git5. 安装Node.js6. 下载并激活IntelliJ IDEA7. 下载并激活Navicat 本文操作系统及版本号:↓ openEuler release 22.03 LTS Linux version 5.10.0-60.35.0.64.oe2203.x86 _64 1. 初始化环境 ? 1 2 3 4 # 1. 更新…

Spring事务的传播机制与隔离级别

目录 前言事务的隔离级别事务特性Spring 中设置事务隔离级别MySQL的隔离级别Spring中的隔离级别 Spring的传播机制事务传播机制是什么?为什么需要事务传播机制?事务传播机制有哪些? 事务的隔离级别 与 传播机制 解决的问题 前言 无论对于那个…

2020年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

四、写作第56~57小题,共65分。其中论证有效性分析30分,论说文35分。 56. 论证有效性分析:分析下述论证中存在的缺陷和漏洞,选择若干要点,写一篇600字左右的文章,对该论证的有效性进行分析和评论。( 论证有…

自动装配再次理解

随便点进去一个自动装配类,也就是spring.factories 文件下的一个全限定名指定的一个配置类 里面有个内部类 Encoding 类 这个注解是绑定了yaml文件,通过前缀可以往里面赋值,来实现自定义配置Springboot 了解完自动装配的原理后,我…

<C语言> 预处理和宏

1.预定义符号 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是C语言内置的。 举个例子&…

如何高效维护电脑

电脑维护技巧:让你的电脑始终高效稳定 电脑维护技巧:让你的电脑始终高效稳定引言方向一:介绍你的电脑方向二:介绍一下你的日常维护措施方向三:给出一些你觉得有用的维护技巧方向四:其他你想补充的方向五&am…

苍穹外卖学习心得与总结【对比瑞吉】【如何获得铁粉】

对于苍穹外卖项目,从学习课程加复习已经13天了。 对于一名已经学习过SSMLinuxRedis数据库的Java练习生来说,这个项目相对于之前学习的《瑞吉外卖》新增了很多功能和技术,是很值得练手和提升的课程,下面给出自己的一些见解。&#…

【点云处理教程】02从 Python 中的深度图像估计点云

一、说明 这是“点云处理”教程的第二篇文章。“点云处理”教程对初学者友好,我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。在本教程中,我们将学习如何在不使用 Open3D 库的情况下从深度图像计算点云。我们还将展示如何优化代码以获…

调整数组顺序使奇数位于偶数前面——剑指 Offer 21

文章目录 题目描述法一 两次遍历法二 双指针一次遍历法三 原地交换 题目描述 法一 两次遍历 class Solution{ public:vectro<int> exchange(vector<int>& nums){vector<int> res;for(auto & num : nums){if(num%21){res.push_back(num);}}for(auto &…