注意力

Note

注意力在我们的环境中是稀缺的,而环境中信息却不少。
在整个人类历史中,那种只将注意力引向感兴趣的一小部分信息的能力,使我们的大脑能够更明智地分配资源来生存、成长和社交。
注意力机制希望能模仿人类的这种能力。

Bahdanau注意力

在上一章我们探讨了机器翻译问题,在那里我们设计了一个基于两个循环神经网络的编码器-解码器结构,用于序列到序列的学习。

编码器的RNN将可变长度的序列转化为固定形状的上下文变量 \(\mathbf{h}_{T}\)。在解码器的任意时间步 \(t'\),它都将作为输入的一部分:

\[\mathbf{c}_{t'} = \mathbf{h}_{T}\]

jupyter

但是在解码器的每一个时间步,我们所需要的编码器上下文变量都是不同的,比如”regardent”的输出主要依赖于”watch”的信息。

假设解码器在时间步\(t'\)本来的输入为\(\mathbf{s}_{t'-1}\)(比如说”IIs”的Embedding),我们挑选能够吸引它注意力的 \(\mathbf{h}_{t}\) 作为当前的编码器上下文:

\[\mathbf{c}_{t'} = \sum_{t=1}^{T}\alpha(\mathbf{s}_{t'-1}, \mathbf{h}_{t})\mathbf{h}_{t}\]

现在 \(\mathbf{c}_{t'}\) 可以说是专为 \(\mathbf{s}_{t'-1}\) 特化的编码器上下文。这就是Bahdanau注意力的思想。

jupyter

查询、键和值

我们再仔细分析Bahdanau注意力的公式,它输出的是一个加权和。

权重 \(\alpha(\mathbf{s}_{t'-1}, \mathbf{h}_{t})\)\(\mathbf{s}_{t'-1}\) 的功能类似于数据库查询语句,被称为查询(query)。

查询 \(\mathbf{s}_{t'-1}\) 与各个 \(\mathbf{h}_{t}\) 进行匹配,通过注意力评分函数 \(\alpha\)(下一节会讲)得到权重,这些被匹配的项被称为键(key)。

每一个键匹配一个值(value),这些值是加权的主体,在Bahdanau注意力中,键和值都是 \(\mathbf{h}_{t}\)

我们关注的都是这种有查询、键和值的注意力。