注意力机制
Last updated
Was this helpful?
Last updated
Was this helpful?
attention函数的本质可以被描述为一个查询query到一系列键值对(key-value)的映射,类似一个寻址(addressing)的过程。
为了从 𝑁 个输入向量[𝒙1, ⋯ , 𝒙𝑁 ] 中选择出和某个特定任务相关 的信息,我们需要引入一个和任务相关的表示,称为查询向量(Query Vector), 并通过一个打分函数来计算每个输入向量和查询向量之间的相关性。
可以分为两步
计算注意力分布。注意力分布可以解释为在给定任务相关的查询 𝒒 时,第 𝑛 个输入 向量受关注的程度.
加权平均
相关性打分函数有四种形式:
加性模型 $s(x, q)=v^{\top} \tanh (w x+\boldsymbol{U} q)$
点积模型 $s(x, q)=x^{\top} q$
缩放点积模型 $s(x, q)=\frac{x^{\top} q}{\sqrt{D}}$
双线性模型 $s(x, q)=x^{\top} w q$
其中 $W , U , v$ 为可学习的参数,$D$ 为输入向量的维度
当输入向量的维度 𝐷 比较高时,点积模型的值通常有比较大的方差,从而导致Softmax函数的梯度会比较小.因此,缩放点积模型可以较好地解决这个问题。
软性注意力选择的信息是所有输入向量在注意力分布下的期望.此外,还有一种注意力是只关注某一个输入向量,叫作硬性注意力(Hard Attention)。
硬性注意力有两种实现方式:
一种是选取最高概率的一个输入向量,即$att(X, q)=x_{\hat{n}}$,其中$\hat{n}$为概率最大的输入向量的下标
另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现
用键值对(key-value pair)格式来表示输入信息,其中“键”用来计算注意力分布,“值”用来计算聚合信息.
当k=v时,就是普通的注意力机制。
多头注意力(Multi-Head Attention)是利用多个查询 𝑸 = [𝒒1 , ⋯ , 𝒒𝑀 ],来并行地从输入信息中选取多组信息.每个注意力关注输入信息的不同部分.
$\operatorname{att}((\boldsymbol{K}, \boldsymbol{V}), \boldsymbol{Q})=\operatorname{att}\left((\boldsymbol{K}, \boldsymbol{V}), \boldsymbol{q}{1}\right) \oplus \cdots \oplus \operatorname{att}\left((\boldsymbol{K}, \boldsymbol{V}), \boldsymbol{q}{M}\right)$
其中 $\oplus$ 表示向量拼接
不同的输入长度,其连接权重的大小也是不同的. 这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(Self-Attention Model)。可以处理变长序列。