专栏介绍:本栏目为 “2021秋季中国科学院大学胡玥老师的自然语言处理” 课程记录,不仅仅是课程笔记噢~ 如果感兴趣的话,就和我一起入门NLP吧🥰
目录
- 传统注意力机制
- 注意力结构
- 软注意力机制
- 硬注意力机制
- 注意力机制优势与不足
- 注意力模块应用
- 注意力👉编码👈机制
- 单一向量编码
- 不同序列间编码
- 同一序列自编码:
- 自注意力
- 多头注意力
- 注意力机制实际上是一个🌼加权求和模块🌼
- 加权求和模块 :神经网络中的一个组件,可以单独使用,但更多地用作网络中的一部分。
传统注意力机制
注意力结构
- 输入:Q,K(集合)
- 输出:Att-V。
- Attention要回答的问题是:对于Q来说,每一个K有多重要?,重要性由输出V描述。
Attention机制主要分为三个步骤,对应上图中的三个阶段。
- 计算F(Q,Ki):F为注意力打分函数,本质上该打分函数描述Q和Ki之间的关系,它可以是一个小型的神经网络。常见的打分函数有点积模型,缩放点积模型,双线性模型等
- softmax(f(Q,Ki)):经过softmax之后会形成一个概率分布,也就是得到了对于Q 各个 Ki 的权重。
- 加权求和:Att-V = 𝑎1ⅹK1+𝑎2ⅹK2+𝑎3ⅹK3+𝑎4ⅹK4+𝑎5ⅹK5
软注意力机制
Soft AM:在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布。
硬注意力机制
Hard AM:直接从输入句子里面找到某个特定的单词,然后把目标句子单词和这个单词对齐,而其它输入句子中的单词硬性地认为对齐概率为0。
除此之外还有全局注意力和局部注意力,此处不做过多介绍
注意力机制优势与不足
优势:
- 让任务处理系统找到与当前任务相关显著的输入信息,并按重要性进行处理,从而提高输出的质量。
- 不需要监督信号,可推理多种不同模态数据之间的难以解释、隐蔽性强、复杂映射关系,对于先验认知少的问题,极为有效。
- 解决长距离依赖问题 ,提升任务性能
不足:
- 对RNN有注意力偏置问题(Coverage机制可以缓解注意力偏置问题)
coverage向量表示过往时刻的所有注意力机制的累加,其告诉模型,输入中哪些部分是已经被注意力关注过的,哪些没有。为了使得模型不过多地关注已经关注过的区域,所以将coverge向量作为下一步的注意力的构成部分,这样下一步生成的注意力分布就会有意识地减少已经关注过的区域的概率。
注意力模块应用
应用场景:
- 网络中有“求和”的地方都可以用,如 图卷积, 机器翻译等
优点:
- 根据不同场景动态选择不同的关注对象
- 不考虑词之间的距离直接计算依赖关系,提升任务性能
作用:
- 等权处理 → 加权处理 →提升任务效果
注意力👉编码👈机制
注意力机制可以作为一种编码机制,即:通过建立序列各元素之间的关联关系形成一种序列表示(按元素之间关系对序列进行编码);或通过不同序列元素之间的关联关系形成不同序列间的融合表示。注意力机制作为编码机制有以下几种:
- 单一向量编码:将输入序列按规则编码成单一向量表示。如,句表示/篇章表示 ,某词的上下文表示 等
- 不同序列间编码:将2个序列编码成二者的融合的表示序列, 如,匹配任务和阅读理解任务常用的融合层表示
- 同一序列自编码:利用多头自注意力编码对一个句子编码可以起到类似句法分析器的作用。如Transformer的编码端。
单一向量编码
通过建立序列K各元素与Q之间的关联关系形成单一向量表示(按元素之间关系对序列进行编码)
🍓应用:对序列中某元素的真正上下文编码
双向RNN语言模型实际是单独的两个相反方向的语言模型,并不能同时观察到上下文。采用注意力机制编码词的上下文是可以同时观察到的真正的上下文。
不同序列间编码
将二个序列编码成二者的融合的表示序列(如,匹配任务和阅读理解任务常用的融合层表示)
- 例:对K序列和Q序列编码
同一序列自编码:
利用多头自注意力编码对一个句子编码可以起到类似句法分析器的作用。
自注意力
Attention(Q,K,V),其中Q=K=V,其含义为在序列内部做Attention计算,寻找序列内部词与词之间的关联关系。
多头注意力
多头(Multi-Head)就是做多次同样的事情(参数不共享),然后把结果拼接。
多头自注意力编码对一个句子编码可以起到类似句法分析器的作用。注意力机制典型应用是Transformer,这部分内容会在后续的博客中更新。
这里有关于Attention的实验:NLP作业四:RNN+Attention实现Seq2Seq中英文机器翻译(Pytorch)【代码+报告】