我一直在尝试理解 self-attention,但我发现的所有东西都不能很好地解释这个概念。
假设我们在 NLP 任务中使用自注意力,所以我们的输入是一个句子。
然后self-attention可以用来衡量句子中每个单词对于其他单词的“重要性”。
问题是我不明白如何衡量“重要性”。重要的是什么?
训练自注意力算法中权重的目标向量到底是什么?
我一直在尝试理解 self-attention,但我发现的所有东西都不能很好地解释这个概念。
假设我们在 NLP 任务中使用自注意力,所以我们的输入是一个句子。
然后self-attention可以用来衡量句子中每个单词对于其他单词的“重要性”。
问题是我不明白如何衡量“重要性”。重要的是什么?
训练自注意力算法中权重的目标向量到底是什么?
将语言与潜在含义联系起来称为接地。像“球在桌子上”这样的句子会生成一张可以通过多模态学习重现的图像。多模式意味着可以使用不同类型的词,例如事件、动作词、主题等。自注意机制将输入向量映射到输出向量,它们之间是一个神经网络。神经网络的输出向量参考接地情况。
让我们举一个简短的例子。我们需要一个 300x200 的像素图像,我们需要一个自然语言的句子,我们需要一个解析器。解析器双向工作。他可以将文本转换为图像,这意味着“球在桌子上”这句话被转换为 300x200 的图像。但是也可以解析给定的图像并提取自然句子。自注意力学习是一种学习和使用接地关系的引导技术。这意味着要验证现有的语言模型,学习新的语言模型并预测未来的系统状态。
这个问题现在很老了,但我遇到了它,所以我想我应该更新其他人,因为我自己的理解有所增加。
注意力只是指一些将输出与其他信息结合起来的操作。通常,这只是通过将输出的点积与其他一些向量相乘而发生的,因此它可以以某种方式“参与”它。
自注意力将输出与输入的其他部分结合起来(因此是自我部分)。同样,组合通常通过向量之间的点积发生。
最后,注意力(或自我注意力)是如何训练的?
让我们称 Z 为输出,W 为权重矩阵,X 为输入(我们将使用 @ 作为矩阵乘法符号)。
Z = X^T @ W^T @ X
在 NLP 中,我们会将 Z 与我们想要的结果输出进行比较。例如,在机器翻译中,它是另一种语言的句子。我们可以将两者与预测的每个单词的平均交叉熵损失进行比较。最后我们可以用反向传播更新 W。
我们如何看待重要的事情?我们可以查看 Z 的大小,以查看注意力后哪些词最“关注”。
这是一个稍微简化的示例,因为它只有一个权重矩阵,并且通常嵌入了输入,但我认为它仍然突出了一些关于注意力的必要细节。
这是一个有用的资源,其中包含有关注意力的更多信息的可视化。这是另一个具有可视化的资源,以了解有关 Transformer 中注意力的更多信息,特别是self-attention。