NLP论文笔记:Compressive Transformers

这篇是DeepMind基于transformer-XL 方法进行改进,通过压缩memory 使得模型可以处理更长的序列 可长达一个本书。
同时他们 在一个目标匹配任务上发现 该算法可以有效地模拟高频语音,并可作为RL的记忆机制。
论文的另外一个贡献是提出一个基于Project Gutenberg 书的长序列的benchmark PG-19 这个序列是目前语言模型的长度的两倍,并且也包含更长的上下文信息。

前面提到来目前改进transformer的模型有 Transformer - XL , Sparse Transformer, 以及 span Transformer。

Compressive Transformer 的具体实现

本模型是 Transformer 的改进版本,借鉴Transformer-XL的思想,但是transformer-XL 会丢掉 记忆窗口以外的信息,而本文的 Compress transformer 不会丢掉,而是把他们压缩并且存储到一个额外的记忆模块。
压缩函数如下,其中d是隐藏层的维度,c是压缩比例,c越大 压缩越多。
在这里插入图片描述

在这里插入图片描述

具体步骤如下:
首先 有 2个memory: 一个是存放正常的前几个segment的hidden state 下图中计做 m, 一个是存放压缩的记忆模块 cm。
假设原始序列为S ( x 1 , x 2 , . . . x ∣ s ∣ x_1, x_2,...x_{|s|} x1,x2,...xs),我们将S 切割成长度为 n s n_s ns大小的片段,那么在t时刻的输入片段为 X = x t , x t + 1 . . . x t + n s X=x_t,x_{t+1}...x_{t+n_s} X=xt,xt+1...xt+ns, 在t时刻得到的hidden 放到FIFO memory(m)中,把最早的hidden 从 m中去除,然后通过一个压缩方法 将被去除的hidden 压缩成更小的单元 存放到cm中。
在t+1时刻时,先将cm和m进行拼接得到第i层的记忆模块mem, 然后通过当前segment的当前层的hidden 和 mem 来计算多头注意力a, 后面接着layer norm, 然后再处理记忆模块,将m中前ns个记忆单元 放到old_mem中,并通过压缩函数生成新的new_cm,然后再更新当前的memory 和 压缩记忆单元。
在这里插入图片描述

关于 Compression Function 和 loss

对于压缩函数 f c f_c fc 考虑以下4种方式:

  • max/mean pooling: kernel 和步长设置为 压缩比例 c。 这个是最快最简单的baseline。
  • 1D convolution :kernel和步长也是设置为c.
  • dilated convolutions :膨胀卷积。卷积压缩方法 包含需要训练的参数。
  • most-used :memories 存储 通过他们的平均attention 和最常使用来存储。这个来源于垃圾回收机制,不常用的记忆模块被删除掉。

我们可以通过损失的梯度来训练 压缩网络。但是对于每个 old memory 这个需要BPTT(通过长时间的反向传播)。所以这里我们也考虑 局部辅助 压缩损失。

  • auto-encoding 损失 :从压缩记忆模块中重建原始记忆,然后计算auto-encoding损失 L a e = ∣ ∣ o l d m e m ( i ) − g ( n e w c m i ) ∣ ∣ 2 L^{ae} = ||old_mem^{(i)} - g(new_cm^{i})||_2 Lae=oldmem(i)g(newcmi)2, 其中 g : R n s c ∗ d − > R n s ∗ d g: R^{\frac{n_s}{c} * d} -> R^{n_s * d} g:Rcnsd>Rnsd. 这个是试图从所有的记忆模块中恢复信息 , 这个是无损的压缩目标函数。
  • attention-reconstruction 损失:注意力重建损失。重建memory的上下文注意力损失,这个是有损失的目标函数,因为没有被关注的信息已经丢失了。we found this worked best。

我们没有让压缩损失的梯度 进入主网络,因为这个会妨碍学习。相反,ttransformer的优化任务目标,压缩网络优化压缩目标函数。没必要把这两个损失用常熟项加和起来。

下面Algorithm2 就是论文说的效果好的 压缩损失函数流程 attention-reconstruction loss。
在这里插入图片描述

Temporal Range 时序窗口大小

我们知道Transformer -XL 在记忆窗口大小为n时,最大的temporal range 为 l ∗ n l * n ln 时 注意力消耗的空间大小为 O ( n s 2 + n s ∗ n ) O(n^2_s+n_s*n) O(ns2+nsn). Compressive Transformer temporal range 为 l x ( n m + c ∗ n c m ) l x (n_m + c*n_{cm}) lx(nm+cncm)时,attention cost 是 O ( n s 2 + n s ( n m + n c m ) ) O(n^2_s + n_s(n_m+n_{cm})) O(ns2+ns(nm+ncm)). 比如 当设置 n c m = n m = n / 2 c = 3 n_{cm} = n_m = n/2 c=3 ncm=nm=n/2c=3时,compressive transformer的 temporal range是 transformer-xl 的2倍,但是attention cost 是一样的。只要我们学到c>1 模型的temporal range 就可以增加很多。

PG-19 benchmark

该数据集包含 28752本书(11GB文本)是目前BookCorpus 和 Billion Word Benchmark的2倍长。
在这里插入图片描述

PG-19 这个数据集的构造动机

word-level 语言模型的数据集:

  • Billion Word Benchmark 是单独句子的模型
  • Penn Treebank 是新闻的小片段
  • WikiText-103 是英文维基百科论文的一个高质量的子集
    以上都是平均3600个单词长。这些数据集在LM 模型非常受欢迎,因为这个有可以探索长距离依赖的可能性。
    但是最近的Transformer 模型 比如Transformer-XL很明显已经可以很好地处理几千字的文本。所以我们提出更长的上下文数据集。

基于书籍的数据集 如 Childen’s Book Test 和 LAMBADA 这些都是从Project Gutenberg 里面提取的文本,Book- Corpus 之前的一个数据集有11K 未公布的书。 CBT 和 LAMBADA 从书籍里面提取文本,主要是为了特定的预测保留单词的任务(阅读理解)。这两个数据集对于语言理解模型很有用,但是对于长句子依赖语言模型不是很好,因为他们只是抓取了书中的片段 删掉了大量的内容。 之前有模型直接在BookCorpus上训练(bert),但是现在BookCorpus由于版权问题无法再使用。
The NarrativeQA Book Compreshension Task也是使用Project Gutenberg texts 与维基百科内容 结合 可用于总结摘要。由于需要一些总结,这个数据集里面也是只包含了一小部分书。 1527 versus the 28752 books in PG-19.

Statistics

Tabel-2 里面是训练验证和测试比例, Table-3是困惑度,可以看出Compressive Transformer 的比 Transformer-XL的要好一些。Table-4是在Enwik8上的结果比较,Table-5是不同的压缩方法在Enwik8 上的效果,可以看出attention 压缩效果比较好。
在这里插入图片描述
作者还在pg-19上 用LDA 主题模型做了个分类:
在这里插入图片描述
对attention weight 的分析, 看看模型是否真正用到了压缩的记忆模块,并且在各个模块的attention 权重大小分布。下图可以看出 大部分的attention是放在当前sequence,对当前序列的前面的单词关注更多 因为我们mask后面的单词。同时也可以看出 attention 在memory 里面靠前的attention 低于compressed memory 的权重,这与越老的记忆访问权重越低的趋势相反, 这也正说明了模型确实在学习 compress memory 中的重要的信息。
在这里插入图片描述

在其他领域的应用

语音模型上:
在这里插入图片描述
强化学习上:
在这里插入图片描述

总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值