如何理解transformer中mask多头注意力机制 -masked multi-head attention 详解

1.masked multi-head attention用来干什么?作用是啥?

一句话,需要mask掩码来实现并行训练。

2. 那并行化有什么用?

可以用来加速模型的训练过程。

举个栗子。

假设我们要训练一个翻译模型,将英文"I love you"翻译成德文"Ich liebe dich"。编码器以并行模式工作 - 它可以在恒定数量的步骤内生成输入序列("I love you")的向量表示(步骤的数量不取决于输入序列的长度)。

假设编码器生成了向量表示为11、12、13(分别代表I love you,实际上,这些向量会更长,因为我们忽略了其它标记,如-序列的开始、-序列的结束等),但为简单起见,我们使用了短向量。

在训练期间,我们知道I love you翻译成德语,应该是"Ich liebe dich"(在训练期间我们总是知道期望的输出,也就是监督学习)。假设"Ich liebe dich"这些词的向量表示是21、22、23。

I     love   you

11、12、13

Ich liebe dich

21、22、23

如果我们使解码器的训练在顺序模式下进行,它将类似于循环神经网络的训练。将执行以下顺序步骤:

  1. 顺序操作 #1. 输入:11, 12, 13。尝试预测21。预测的输出不会完全是21,假设它是21.1。
  2. 顺序操作 #2. 输入:11, 12, 13,以及上一个输出21.1。尝试预测22。预测的输出不会完全是22,假设它是22.3。
  3. 顺序操作 #3. 输入:11, 12, 13,以及上一个输出22.3。尝试预测23。预测的输出不会完全是23,假设它是23.5。

这意味着我们需要进行3个操作(通常情况下,每个输入需要执行一个操作)。此外,每次迭代都会有累积误差。

此外,我们不使用注意力机制,因为我们只关注单个先前的输出。

由于我们实际上知道期望的输出(是21、22、23),所以我们可以调整这个过程,直接并行化操作输入。而不用等待前一步的输出。

并行操作 #A. 输入:11, 12, 13。尝试预测21。

并行操作 #B. 输入:11, 12, 13,以及21。尝试预测22。

并行操作 #C. 输入:11, 12, 13,以及21, 22。尝试预测23。

这个算法可以并行执行,而且不会累积误差。这个算法使用了注意力机制(即查看所有先前的输入),因此在进行预测时可以考虑上下文的更多信息。

这就是我们需要掩码的地方。训练算法知道整个期望的输出(21, 22, 23)。它为每个并行操作隐藏(掩码)已知输出序列的一部分。

当执行 #A 时,它会隐藏(掩码)整个输出。

当执行 #B 时,它会隐藏第2和第3个输出。

当执行 #C 时,它会隐藏第3个输出。

掩码本身是通过以下方式实现的(来自原始论文):

我们通过在softmax的输入中屏蔽(设置为-∞)与非法连接对应的所有值来在缩放的点积注意力中实现这一点。

注意:在推理过程中(而不是训练中),解码器以顺序(而不是并行)模式工作,因为它最初不知道输出序列。但这与RNN方法不同,因为Transformer推理仍然使用自注意力并查看所有先前的输出(而不仅仅是最近的一个)。

注意2:对于非翻译应用,掩码可以有不同的用法。例如,对于语言建模,掩码可以用于隐藏输入句子中的某些单词,模型将在训练期间使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值