Please enable JavaScript.
Coggle requires JavaScript to display documents.
Reformer(2020) - Coggle Diagram
Reformer(2020)
原理
-
理论基础
局部敏感哈希(LSH)
定义
将原始数据空间中的两个相邻数据点通过相同的映射或投影变换(projection)后,这两个数据点在新的数据空间中仍然相邻的概率很大,而不相邻的数据点被映射到同一个桶的概率很小
作用
经过哈希映射变换后,原始空间中相邻的数据落入相同的桶内的话,那么我们在该数据集合中进行近邻查找就变得容易了
哈希函数
Angular LSH
将平面坐标系分为四个象限,以原点为中心,随机转动3次,对应点落在哪个象限,当前位hash就是几
-
-
解释
- 因为b分为正负,所以除以2
- argmax是取映射后b维度的最大值作为index,并得出hash
步骤
1. 令query=key
原因
- 因为LSH Attention把不同位置的token哈希后放到一个bucket,就意味着q_i->k_j等于q_j->k_i,所以q和k不一样已经没有意义
- 另外,因为q=k所以q*k会得到一个很大的值,softmax后会压制其他注意力, 所以这里不会计算自身的注意力全中,除非只有自己
-
-
-
4. 进行chunk拆分
原因
- 每个bucket中的q的个数并不固定,而且不固定不利于批量处理,所以需要切割成固定长度
- 论文中假设很少有bucket会是bucket平均大小的两倍,所以需要attention的k很大可能将落在q当前位置的前一个chunk内
实现
- 设置每个chunk最大的个数为m
- 以m作为每个chunk的大小对keys进行切分
- 每个query只attention到当前chunk和上一个chunk中相同bucket的key
公式
-
-
$$\tilde P_i=\{j:
\lfloor \frac{s_i}{m} \rfloor - 1
\leq \lfloor \frac{s_j}{m} \rfloor
\leq \lfloor \frac{s_i}{m} \rfloor
\}$$
解释
第一个公式的每个bucket的平均大小,m是实际设置的chunk大小,P代表key 落在 query的同一个和上一个chunk中
原因
softmax之后,一个 query 和其他的所有的token的计算 attention score主要是取决于高相似度的几个tokens,所以采用这种方式将近似算得最终的attention score
-
RevTransformer
实现
概述
ttention layer和 FFN layer是通过ResNET 相连的,所以我们就可以将这个转化为RevNet,从而减少内存的消耗,令F 函数作为我们的attention 层,G 函数作为FFN 层
-
原因
不需要我们记录中间层的activations,而只需要我们储存最后一层的输出,从而通过模型的特定结构,反推出中间层的结果
Chunking FFN layers
原因
FN中的输入之间互相独立,进行分段的处理可以降低空间消耗。
-
-