Commit 539c46de by zengxin

new

parent c540b4c2
#### transformer
Transformer针对长序列问题的改进,主要有两种思路,一种是通过分段递归机制维护长序列的上下文信息,另一种是使用更高效的注意力机制。第一类方法比较有代表性的工作有transformer-xl(2019),该方法虽然为模型赋予了处理长序列的能力,但是此类方法的时间和空间复杂度依然较高。
#### transformer
Transformer针对长序列问题的改进,主要有两种思路,一种是通过分段递归机制维护长序列的上下文信息,另一种是使用更高效的注意力机制。第一类方法比较有代表性的工作有transformer-xl(2019),该方法虽然为模型赋予了处理长序列的能力,但是此类方法的时间和空间复杂度依然较高。
* 代码
第二类方法,即针对注意力机制的改进又可以分为
https://www.bilibili.com/video/BV1vf4y1n7k2?spm_id_from=333.337.search-card.all.click
* 使用低秩矩阵或核函数的思想构建复杂度更低的注意力机制,相关工作有 Linformer(2020)、Linear Transformer(2020)和 Random Feature Attention(2021)。Softmax 注意力机制的复杂度$O (n^2)$来源于softmax函数,因此这类方法的主要思想是使用别的方法来替代softmax函数,降低注意力机制的复杂度。其中 Linformer 对 K 和 V 应用核方法降低序列维度,但该操作同时也把整个序列的信息柔和在了一起,因此没办法对未来信息进行 Mask,无法做语言模型、seq2seq 等任务。而 Random Feature Attention 没有这方面的问题,该方法采用循环神经网络的思想,在模型的每个时间步都维护一个蕴含历史信息的隐层向量,以此达到只使用 prefix 信息的目的【与Mask效果相同】。
* 改进注意力的计算过程,相关工作有 luna (2021) 和 less memory (2022) 。其中 luna 将注意力的过程拆分为两个阶段,第一个阶段先使用一个注意力得到一个固定长度的结果(长度小于句长n,类似于压缩的思想),第二个阶段再使用一次注意力计算对压缩的结果进行注意力计算,该方法可以与别的注意力改进方法相结合。less memory 将 QKV 拆分成子片段,依次对这些片段进行注意力计算,再将结果合并,以降低注意力所需要的内存,该方法的不足是其时间复杂度仍然为$O (n^2)$。
* 此外还有其他改进方法,相关工作有 Reformer(2020) 和 Big bird(2020) 。其中 Reformer 使用局部哈希敏感注意力机制,该方法复杂度高,复现困难,只有当序列长度大于 2048 时才会有效率提升。与Reformer 相较而言,Big bird 更加优秀。
* 论文解析
https://s3.us-west-2.amazonaws.com/secure.notion-static.com/501fb338-a6b0-484a-8a16-713dd40251de/Attention_is_All_You_Need.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220528%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220528T025015Z&X-Amz-Expires=86400&X-Amz-Signature=0b05cc2d12e341759809fda198f1dacfeb2dbafa2465a2203d2956f955ee251b&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Attention%2520is%2520All%2520You%2520Need.pdf%22&x-id=GetObject
* 面临问题:
* 处理长序列时效率低,主要原因是 self-attention的计算(n^2 * d)和内存复杂度(参数量:4 * d^2 + 相关性矩阵 T*T)较高。改进方法包括轻量级注意力模块(例如稀疏注意力),和分而治之的方法(例如循环和分层机制)
- | 论文 | 时间复杂度 | 空间复杂度 | 性能 | 不足 | 思想 |论文信息 |
| :--------: | :--------: | :--------: | :--------: | :--: | :--: | :-----: | ------- |
| softmax-attention | $O (n^2)$ | $O (n^2)$ | / | 相关性矩阵计算的时间与空间复杂度高,序列长度较长时,模型所需要的计算时间会变长,且容易OOM | / |Attention is all you need|/|
| Transformer-xl | $O (n^2)$ | $O (n^2)$ | 可以处理比transformer长4.5倍的序列。在长序列和短序列中的效果都很好。 | 维护上下文会带来额外的计算成本 | 使用分段递归机制增加self-attention的context长度,以此来更好的处理长序列 |ACL 2019, 引用量1728|
| Reformer | $O(nlogn)$ | $O(nlogn)$ | 内存效率更高,对长序列处理时速度更快 | 1) 方法复杂,复现的难度大。 2) 只有当长度大于2048时,才会有效率提升。 | 使用局部敏感哈希(LSH)注意力机制,降低注意力的计算复杂度 |Google research,ICLR 2020,引用量698||
| Linformer | $O(n)$ | $O(n)$ | 相较于Transformer而言,可大大降低长序列所需推理时间 | 没办法对未来信息进行Mask,无法做语言模型、seq2seq等任务 | 使用低秩矩阵近似self-attention |Facebook AI,arxiv 2020,引用量377||
| Linear Transformer | $O(n)$ | $O(n)$ | 在长序列自回归推断时,速度比transformer快了4000倍 | / | 将自我注意表示为核特征映射的线性点积 | ICML 2020,引用量326 ||
| Big bird | $O(n)$ | $O(n)$ | 该方法使得相同硬件可以处理的序列长度增加八倍 | / | 稀疏注意力(同时结合了Random attention、Window attention和Global Attention) | Google research,NeurIPS 2020,引用量461 ||
| Random Feature Attention | $O(n)$ | $O(n)$ | 对于长度为2048的序列,推断速度可提升12倍。该方法适用于需要加速或长序列的任务中。 | / | 使用随机特征函数对softmax进行近似 | ICLR 2021,引用量87 ||
| Luna | $O(n)$ | $O(n)$ | 可以与别的改进注意力的方法叠用 | / | 拆分整个注意力的计算为两个部分,以此达到降低复杂度的目的。先使用一个注意力得到一个固定长度的结果(长度小于句长n,类似于压缩的思想),再使用一次注意力计算对压缩的结果进行注意力计算。 | NeurIPS 2021,引用量19 ||
| Less memory | $O(n^2)$ | $O(logn)$ | 对于长度为16384的序列,自注意机制所需要的内存减少了59倍 | 时间复杂度较高 | 分段式计算,有点归并计算的感觉 |Google research,arxiv 2022,引用量4||
### 注意力改进方面
#### Linformer,2020,arxiv,引用377,Facebook AI
* 低秩注意力机制,o(n)的时间和空间复杂度
*
#### Linear Transformer,2020【**Transformers are RNNs:**Fast autoregressive transformers with linear attention】,326引用,Idiap Research Institute, Switzerland,ICML
* O(N)
* https://zhuanlan.zhihu.com/p/157490738?from_voters_page=true
#### big bird,2020,461引用,NeurIPS,Google Research
* 稀疏注意力机制,降低注意力机制的存储【原注意力存储为n^2,这个稀疏注意力的存储为线性】
#### Random Feature Attention ,2021,ICLR,87引用,华盛顿大学**Hao Peng**
* 线性时间复杂度
*
#### luna,**Linear Unified Nested Attention**,2021,19个引用,NeurIPS,美国南加州大学ISI实验室
* 只产生线性的时间和空间复杂度
#### ABC: Attention with Bounded-memory Control,ACL,2022,华盛顿大学**Hao Peng**,3个引用
#### Long-range Sequence Modeling with Predictable Sparse Attention,ACL,2022,0 引用,中国三星研究院
#### SELF-ATTENTION DOES NOT NEED O(n 2 ) MEMORY, arxiv,2021,google research,4引用
* 提出了一个简单的注意力算法,只需要o(lgn)的内存,对于长度为16384的序列,自注意机制所需要的内存减少了59倍
* 分段式计算
### 模型结构改进方面
#### transformer-xl,2019,ACL,
* 背景(别人怎么做的,有什么局限)
* 具体方法
* 分段递归机制
* 新的位置编码策略
* 效果
* 依赖距离比RNN长80%,比transformer长450%
* 在长序列和短序列中的效果都很好
* 评估时比transformer快1800倍
* 下一步优化方向是什么
#### reformer,2020,ICLR
* 使用局部敏感哈希注意力机制,降低注意力的计算复杂度,时间复杂度和空间复杂度都是O(nlogn)
* 使用可逆的残差网络(可减少参数)
* 内存效率更高,对长序列处理时速度更快
* Linformer,2020描述了该方法的缺点【只有当长度大于2048时,才会有效率提升,此外Reformer的多轮哈希方法实际上增加了顺序操作的数量,这进一步削弱了它们最终的效率收益】
* 为了能够使用LSH, Reformer将key约束为与query相同,因此该方法不能用于解码Key与query不同的任务
#### informer
* ProbSparse注意力机制,将时间和空间复杂度都降低至O(nlogn)
* 自注意力蒸馏(进一步降低参数)
* 生成式decoder
Transformer针对长序列问题的改进,主要有两种思路,一种是通过分段递归机制维护长序列的上下文信息,另一种是使用更高效的注意力机制。第一类方法比较有代表性的工作有transformer-xl(2019),该方法虽然为模型赋予了处理长序列的能力,但是此类方法的时间和空间复杂度依然较高,模型处理长序列的能力受限制于硬件环境。
Transformer针对长序列问题的改进,主要有两种思路,一种是通过分段递归机制维护长序列的上下文信息,另一种是使用更高效的注意力机制。第一类方法比较有代表性的工作有transformer-xl(2019),该方法虽然为模型赋予了处理长序列的能力,但是此类方法的时间和空间复杂度依然较高,模型处理长序列的能力受限制于硬件环境。
第二类方法,即针对注意力机制的改进又可以分为:
* 使用低秩矩阵或核函数的思想构建复杂度更低的注意力机制,相关工作有 Linformer(2020)、Linear Transformer(2020)和 Random Feature Attention(2021)。Softmax 注意力机制的复杂度$O (n^2)$来源于softmax函数,因此这类方法的主要思想是使用别的方法来替代softmax函数,降低注意力机制的复杂度。其中 Linformer 对 K 和 V 应用核方法降低序列维度,但该操作同时也把整个序列的信息柔和在了一起,因此没办法对未来信息进行 Mask,无法做语言模型、seq2seq 等任务。而 Random Feature Attention 没有这方面的问题。
* 改进注意力的计算过程,相关工作有 luna(2021) 和 less memory(2022) 。其中 luna 将注意力的过程拆分为两个阶段,第一个阶段先使用一个注意力得到一个固定长度的结果(长度小于句长n,类似于压缩的思想),第二个阶段再使用一次注意力计算对压缩的结果进行注意力计算,该方法可以与别的注意力改进方法相结合。less memory 将 QKV 拆分成子片段,依次对这些片段进行注意力计算,再将结果合并,以降低注意力所需要的内存,该方法的缺点是其时间复杂度仍然为$O (n^2)$。
* 此外还有其他改进方法,相关工作有 Reformer(2020) 和 Big bird(2020) 。其中 Reformer 使用局部哈希敏感注意力机制,该方法复杂度高,复现困难,只有当序列长度大于 2048 时才会有效率提升,并且为了能够使用局部哈希敏感,Reformer 将 key 约束为与 query 相同,因此该方法不能用于解码 Key 与query 不同的任务。相较之下,Big bird 更加优秀。
- | 论文 | 时间复杂度 | 空间复杂度 | 性能 | 不足 | 思想 |论文信息 |
| :--------: | :--------: | :--------: | :--------: | :--: | :--: | :--: |
| softmax-attention | $O (n^2)$ | $O (n^2)$ | / | 相关性矩阵计算的时间与空间复杂度高,序列长度较长时,模型所需要的计算时间会变长,且容易OOM | / |Attention is all you need|
| Transformer-xl | $O (n^2)$ | $O (n^2)$ | 可以处理比transformer长4.5倍的序列。在长序列和短序列中的效果都很好。 | 维护上下文会带来额外的计算成本 | 使用分段递归机制增加self-attention的context长度,以此来更好的处理长序列 |ACL 2019, 引用量1728|
| Reformer | $O(nlogn)$ | $O(nlogn)$ | 内存效率更高,对长序列处理时速度更快 | 1) 方法复杂,复现的难度大。 2) 只有当长度大于2048时,才会有效率提升。 3)为了能够使用LSH, Reformer将 key 约束为与 query 相同,因此该方法不能用于解码 Key 与 query 不同的任务 | 使用局部敏感哈希(LSH)注意力机制,降低注意力的计算复杂度 |Google research,ICLR 2020,引用量698|
| Linformer | $O(n)$ | $O(n)$ | 相较于Transformer而言,可大大降低长序列所需推理时间 | 没办法对未来信息进行Mask,无法做语言模型、seq2seq等任务 | 使用低秩矩阵近似self-attention |Facebook AI,arxiv 2020,引用量377|
| Linear Transformer | $O(n)$ | $O(n)$ | 在长序列自回归推断时,速度比transformer快了4000倍 | / | 将自我注意表示为核特征映射的线性点积 | ICML 2020,引用量326 |
| Big bird | $O(n)$ | $O(n)$ | 该方法使得相同硬件可以处理的序列长度增加八倍 | / | 稀疏注意力(同时结合了Random attention、Window attention和Global Attention) | Google research,NeurIPS 2020,引用量461 |
| Random Feature Attention | $O(n)$ | $O(n)$ | 对于长度为2048的序列,推断速度可提升12倍 | / | 使用随机特征函数替代softmax | ICLR 2021,引用量87 |
| Luna | $O(n)$ | $O(n)$ | 可以与别的改进注意力的方法叠用 | / | 拆分整个注意力的计算为两个部分,以此达到降低复杂度的目的。先使用一个注意力得到一个固定长度的结果(长度小于句长n,类似于压缩的思想),再使用一次注意力计算对压缩的结果进行注意力计算。 | NeurIPS 2021,引用量19 |
| Less memory | $O(n^2)$ | $O(logn)$ | 对于长度为16384的序列,自注意机制所需要的内存减少了59倍 | 时间复杂度较高 | 分段式计算,有点归并计算的感觉 |Google research,arxiv 2022,引用量4|
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论