[NLP] REFORMER: THE EFFICIENT TRANSFORMER
1.现状
(1) 模型层数加深
(2) 模型参数量变大
(3) 难以训练
(4) 难以fine-tune
2. 单层参数量和占用内存分析
| 层 | 参数设置 | 参数量与占用内存 |
|---|---|---|
| 1 layer | 0.5Billion | 0.5Billion * 4Byte = 2GB |
| embedding layer |
64K tokens 1024 emb_size 8 batch_size |
参数量 64K × 1K × 8 = 0.5B 内存 2GB |
3. Transformer 模型内存占用的问题以及Reformer相应解决方案
| Transformer 内存占用的问题 | Reformer采用的方案 | 实现的效果 | 对模型的影响 | |
|---|---|---|---|---|
| memory(N layer) > N * memory(1 layer) → 需要为反向传播保留值 |
Reversible layers |
保留N层activations → 保留1层 |
negligible |
|
| feed-forward 层 d_ff >> d_model, 占据大量内存 |
split activation && process in chunks |
d_ff → 每个chunk中处理的维度 |
numerically identical |
|
| Attention 运算: O(L^2):存储 && 计算开销都很大 |
Locality-Sensitive Hashing 局部敏感哈希,简称 LSH |
O(L^2) → O(L log L) 可以更好的处理长序列 |
major change |
4. Attention → LSH
4.1 Recall Attention && Thoughts
(1) dot-product attention && multi-head attention

Q, K, V [batch_size, length, d_model]
QK^T → [batch_size, length, length]
ex. length = 64K → 64K * 64K * 4Byte = 16GB → 该部分占用内存过大
(2) 对公式 (1) 的优化思路:
(a) 优化QK^T
→ 4.2 把大矩阵运算降低为向量矩阵运算;
→ 4.3 Q = K
(b) 优化 softmax(x)
→ 4.4 softmax更关注x中数值大的那些元素,在这里也就是只找和q_i 相似的那些 k_j,它们点积值更大,而其他元素被忽略不参与计算节省开销。
→ 4.5 但是如何判断哪些k_j 和 q_i 更相近呢? 这里引入LSH的思想。
→ 4.6 如何将LSH应用于Attention? LSH Attention
→ 4.7 用一轮hash,有些相近元素并不能hash到一个桶里 → 多来几轮hash取并集 Multi-round LSH attention
4.2 优化QK^T → Memory-efficient attention
QK^T → q_iK^T => 对每个query单独计算,而无需计算整个大矩阵乘积
4.3 优化QK^T → Shared-QK Transformer (Q = K)
| Transformer | Reformer (LSH attention) |
|---|---|
|
A → linear projection 1 → Q A → linear projection 2 → K A → linear projection 3 → V |
A → linear projection 1 → Q A → linear projection 1 → K A → linear projection 3 → V |
4.4 优化softmax(x) → Hashing Attention
QK^T只是一个中间值,我们最关注的还是softmax之后的这个结果。
softmax 更关注大数值的元素,对于length = 64K, 我们找到和q_i 最相近的32/64个 k_j,即可 大大降低计算消耗。
4.5 优化softmax(x) → Locality sensitive hashing 


(1) LSH
相近的向量vectors被hash到同一个bucket的概率大。

![]()
(2) hash函数如何选?

为了得到b个hash值,我们首先固定一个随机矩阵R [d_k, b/2]
定义:h(x) = arg max([xR; −xR])
LSH scheme Alexandr Andoni, Piotr Indyk, Thijs Laarhoven, Ilya P. Razenshteyn, and Ludwig Schmidt. Practical and optimal LSH for angular distance. CoRR, abs/1509.02897, 2015. URL http://arxiv. org/abs/1509.02897.
4.6 优化softmax(x) → LSH Attention 




有了LSH机制,如何应用于Attention?

→ 
→ 
其中,

Figure 2
(a) Normal → sparse
(b) Bucketed → q, k 根据它们hash值是否相同进行排序。颜色相同的hash值相同。
因为hash值相同的vector接近,所以将(a)中对所有vector两两点积可以近似替换为只对bucket内部vector计算点积。
(c) Q = K
→ 问题:每个bucket中q, k 个数可能不相等,不好计算。
→ 解决方法:
首先通过设定 kj = q_j / ||q_j|| 来保证:h(k_j) = h(q_j)
根据bucket number 来sort bucket
在bucket 内部根据 seqence position 来sort。i → s_i
→ 效果:bucket中的pair 集中在对角附近。
(d) Chunked
如何chunk?

chunk个数: m = 2l / n_{buckets} 其中l是序列长度
每个bucket平均size = l / n_{buckets} → 认为size变为2倍大不太容易 → 不容易超过chunk大小
4.7 优化softmax(x) → Multi-round LSH attention

用一轮hash,有些相近元素并不能hash到一个桶里 → 多来几轮hash取并集
并行来做
4.8 Causal masking for shared-QK attention

Transformer中原有的mask: mask后面的元素
LSH attention中元素顺序变化,公式(3)mask如何实现?
为每个query, key加入position index,根据与原来一样的排列重新排序,用一个比较的操作来实现mask.
4.9 复杂度分析

4l?
4.10 实验效果

5. Reversible Transormer
5.1 Recall RevNets 




反向传播求导:F = AX^T
F对A求梯度:X → 每层的输入
所以获取每层的输入值很重要~~
~ The Reversible Residual Network: Backpropagation Without Storing Activations
| residual layer 类型 | 输入输出 | form | 反向传播计算梯度时输入值来源 |
|---|---|---|---|
| Normal residual layer | x → y | y = x + F(x) | 正向传播时每层保留 |
| reversible residual layer | (x1, x2) → (y1, y2) |
y1 = x1 + F(x2) y2 = x2 + G(y1) |
根据上一层activations推理获得 x2 = y2 −G(y1) x1 = y1 − F(x2) |
5.2 Reversible Transformer 




如何将reversible residual layer思想应用于Transformer?
~ Attention is all you need
| reversible residual layer | Transformer |
|---|---|
| y1 = x1 + F(x2) | Y1 = X1 + Attention(X2) |
| y2 = x2 + G(x1) | Y2 = X2 + FeedForward(Y1) |
5.3 Chunking
→ 问题:5.2 是对各个残差层进行的优化,但是在每个残差层内部,FeedForward占用内存也很高。
ex. Attention is all you need 中 dff = 2048 >> d_model = 512
→ 解决方法:由于FeedForward层对于sequence的各个position是独立的,所以可以分解为c个chunk
在5.2中FeedForward层:

→ 这里对FeedForward层进行chunk,相应的也要对reversible的正向和反向计算都要chunk。
→ 对于vocab非常大的情况,对output的log概率计算也chunk,并且会计算那个section sequence的loss.
5.4 复杂度分析

6. 他山之石
Reformer中并没有提出一种全新的算法,但是却对以往算法提出了适合Transformer模型的应用。
LSH本来用于大规模向量中求相近向量,reformer中用于softmax中 找与qi 相近的 kj向量,并根据attention计算的需要,设计了LSH attention。
Reversible resnet 本来用于ResNet, 这里替换了F, G函数为 Attention 和 FeedForward;
Chunk思想也广为人知,这里用于 FeedForward 矩阵的分解。
综合起来,这些技术对于Transformer模型降低存储与计算开销有非常大的帮助。
7. 参考文献
(1) Reformer:Kitaev, Nikita, Łukasz Kaiser, and Anselm Levskaya. "Reformer: The efficient transformer." arXiv preprint arXiv:2001.04451 (2020).
(2) LSH相关:Andoni, Alexandr, et al. "Practical and optimal LSH for angular distance." Advances in neural information processing systems. 2015.
(3) LSH相关:CS369G: Algorithmic Techniques for Big Data. Lecture 16: Approximate Nearest Neighbor Search. Spring 2015-2016
(4) LSH相关:CS369G: Algorithmic Techniques for Big Data. Lecture 17: Locality Sensitive Hashing and Dimension Reduction. Spring 2015-2016
(5) Reversible ResNet: Gomez, Aidan N., et al. "The reversible residual network: Backpropagation without storing activations." Advances in neural information processing systems. 2017.
(6) Transformer: Vaswani, Ashish, et al. "Attention is all you need." Advances in neural information processing systems. 2017.
(7) Reformer Pytorch Github: https://github.com/lucidrains/reformer-pytorch
[NLP] REFORMER: THE EFFICIENT TRANSFORMER的更多相关文章
- [笔记] Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
原文地址:https://arxiv.org/abs/2012.07436 源码地址:https://github.com/zhouhaoyi/Informer2020
- X-former:不止一面,你想要的Transformer这里都有
原创作者 | FLPPED 参考论文: A Survey of Transformers 论文地址: https://arxiv.org/abs/2106.04554 研究背景: Transforme ...
- Bert不完全手册9. 长文本建模 BigBird & Longformer & Reformer & Performer
这一章我们来唠唠如何优化BERT对文本长度的限制.BERT使用的Transformer结构核心在于注意力机制强大的交互和记忆能力.不过Attention本身O(n^2)的计算和内存复杂度,也限制了Tr ...
- 模型压缩95%:Lite Transformer,MIT韩松等人
模型压缩95%:Lite Transformer,MIT韩松等人 Lite Transformer with Long-Short Range Attention Zhanghao Wu, Zhiji ...
- (zhuan) Recurrent Neural Network
Recurrent Neural Network 2016年07月01日 Deep learning Deep learning 字数:24235 this blog from: http:/ ...
- MindSpore应用目标
MindSpore应用目标 以下将展示MindSpore近一年的高阶计划,会根据用户的反馈诉求,持续调整计划的优先级. 总体而言,会努力在以下几个方面不断改进. 1. 提供更多的预置模型支持. 2. ...
- AAAI 2021 最佳论文公布
作者:Synced 翻译:仿佛若有光 第三十五届 AAAI 人工智能会议 (AAAI-21) 以虚拟会议的形式拉开帷幕.组委会在开幕式上公布了最佳论文奖和亚军.三篇论文获得了最佳论文奖,三篇被评为 ...
- [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer
对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...
- NLP学习(5)----attention/ self-attention/ seq2seq/ transformer
目录: 1. 前提 2. attention (1)为什么使用attention (2)attention的定义以及四种相似度计算方式 (3)attention类型(scaled dot-produc ...
随机推荐
- Java实现 蓝桥杯VIP 算法训练 单词接龙
问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...
- Java实现 洛谷 P2141 珠心算测验
import java.util.LinkedList; import java.util.Scanner; public class Main { private static Scanner ci ...
- java实现第四届蓝桥杯振兴中华
振兴中华 题目描述 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比 ...
- Linux帮助命令man详解
命令man详解 命令man,可以获得命令(使用whatis命令可以得到一个命令的简短介绍,可以使用:命令 --help 来获得命令的选项说明)或配置文件的帮助信息(可以使用apropos命令仅查看配置 ...
- 性能测试中TPS上不去的原因
TPS(Transaction Per Second):每秒事务数,指服务器在单位时间内(秒)可以处理的事务数量,一般以request/second为单位. 压测中为什么TPS上不去的原因: .网络带 ...
- Linux笔记(第二天)
tail -1 /etc/passwd 显示最后一行 一.用户类型: 超级用户:root 超级管理员 ID=0 普通用户:系统用户:uid:1~999(centos7) 1~499(centos6 ...
- mysql基础之-mysql锁和事务(七)
0x01 MySQL锁: 执行操作时施加锁的模式 读锁:用户在读的时候施加的锁,为防止别人修改,但是用户可以读,还被称为共享锁 不会对其他用户进行阻塞 理解: ----->(这里的不阻塞,是可以 ...
- 温故知新-java多线程&深入理解线程池
文章目录 摘要 java中的线程 java中的线程池 线程池技术 线程池的实现原理 简述 ThreadPoolExecutor是如何运行的? 线程池运行的状态和线程数量 任务执行机制 队列缓存 Wor ...
- Markdown入门学习202004
Markdown入门学习202004 推荐使用Typora这款轻量级markdown编辑软件 标题 # 一级标题(井号后面有空格) ## 二级标题 ### 三级标题 ...... ###### 最多到 ...
- 数值格式化 NumberFormat、 DecimalFormat、 RoundingMode
NumberFormat [简介] java.text.NumberFormat extends java.text.Format extends java.lang.Object 实现的接口:Ser ...