为什么香草变压器有固定长度的输入?

数据挖掘 nlp 变压器
2021-09-23 11:21:04

我知道在变压器所基于的数学中,输入的长度没有限制。但我仍然不明白为什么我们应该在框架(PyTorch)中修复它。由于这个问题,Transformer-XL 被创建了。

你能解释一下这个问题隐藏在哪里吗?

2个回答

转换器输入的最大长度的限制是由于计算自注意力所需的内存量。

Transformer 中的 self-attention 所需的内存量是输入长度的二次方这意味着增加输入的最大长度会大大增加自我注意所需的内存。最大长度是使模型至少在一个句子中占用 GPU 的整个内存的长度(一旦模型的其他元素也被考虑在内,例如占用大量内存的嵌入)。

Transformer-XL无疑是一种在语言建模中尽可能多地考虑上下文的​​方法(它的作用类似于 LSTM 语言模型中随时间截断的反向传播)。但是,梯度不会通过注意力在内存段上传播,而只会通过当前段传播。

已经有几种架构尝试来减少转换器所需的内存量,例如在注意力中使用局部约束动态卷积模型)或使用局部敏感散列Reformer 模型)。

还有其他实现尝试,例如梯度检查点(例如this),这是一种运行无法立即放入 GPU 内存的计算的通用技术

首先,固定模型的输入大小更多的是架构决策而不是问题。通过固定输入大小,我们:

  1. 训练时限制 GPU 内存使用
  2. 减少每个 epoch 的训练时间
  3. 减少每个输入样本的评估时间

如果您愿意,您可以通过增加输入的大小或增加注意力头的数量或增加隐藏状态的大小来训练自己的转换器模型。

其次,Transformer-XL 没有解决固定长度输入的问题,而是解决了由于固定长度上下文大小引起的问题。在 Vanilla 转换器中,上下文大小是固定的,因此有时会生成次优输出。

为了更好地理解问题,假设您正在阅读一本书,您可以一次只关注一页,您需要在下一页寻找答案。鉴于您的注意力只有一页,您能否将当前页面上的问题与下一页的答案联系起来?

答案是不。因此,要解决问题,您需要增加注意力大小或使其可以浏览更多页面来寻找答案。

在 Transformer-XL [1]中,上下文大小通过在注意力头上添加递归概念来动态化,因此模型可以更准确地预测。

我希望这能消除你的疑问。更多详细信息,您可以浏览 Transformer-XL [1]论文的介绍部分。