注意力机制

1. Seq2Seq模型加入注意力机制

1.1 Seq2Seq模型

  1. 编码器: 将长度可变的输入序列转换成形状固定的上下文变量c,并将输入序列的信息在该上下文变量中进行编码。
  2. 解码器:
    • 解码器的输入序列的第一个词元为: 特定的序列开始词元< bos >
    • 使用RNN编码器的最终隐状态来初始化解码器的隐状态
    • 编码器的最终隐状态都作为解码器输入序列的一部分。这样做的好处是防止随着时间的传递经过复杂的运算,原始的代表上下文的隐状态被遗忘。
      注意力机制_第1张图片

1.2. Bahdanau注意力

1.2.1 模型

(1)上下文变量c在任何解码时间步 t ′ t^{\prime} t都会被 c t ′ \boldsymbol{c}_{t^{\prime}} ct替换。假设输入序列中有T个词元,解码时间步 t ′ t^{\prime} t的上下文变量是注意力集中的输出:
c t ′ = ∑ t = 1 T α ( s t ′ − 1 , h t ) h t c_{t^{\prime}}= \sum_{t=1}^{T}{\alpha(s_{t^{\prime}-1},h_t)h_t} ct=t=1Tα(st1,ht)ht
其中,时间步 t ′ − 1 t^{\prime}-1 t1时的解码器的隐状态 s t ′ − 1 s_{t^{\prime}-1} st1查询,编码器隐状态 h t h_t ht既是,也是
(2) 上一时间步的编码器的全层隐状态,将作为初始化解码器的隐状态
(3) 编码器在所有时间步的最终层隐状态将作为注意力的键和值。
(4) 解码器的输入为注意力输出 c t ′ − 1 c_{t^{\prime}-1} ct1和上一步的输出在特征维度上连接(concat)

1.3 LSTM Seq2Seq

1.3.1 模型

  1. 编码器在所有时间步的短期记忆作为注意力的键和值。
  2. 解码器输入序列的第一个词元为: < EOS >
  3. 上一时间步的编码器的全层隐状态,将作为初始化解码器的隐状态

1.3.2 流程

  1. 使用< EOS > 作为解码器输入序列的第一个词元。
  2. 得到attentionWeight: 根据query查询键的相似度,然后利用softmax转为概率分布得到attentionWeight。
    注意力机制_第2张图片
  3. 加权求和输入到输出网络,预测下一个词的oneHot。
    注意力机制_第3张图片
  4. 将oneHot 输入到解码器,取预测下一个词,直到预测出< EOS >停止。
    注意力机制_第4张图片

2. 自注意力机制

2.1 自注意力

  1. 自注意力池化层将 x i x_i xi当作key,value,query来对序列抽取特征。
  2. 完全并行,最长序列为1,但对长序列计算复杂度高。
  3. 缺点: 没有位置信息

2.2 位置编码

  1. 位置编码在输入中加入位置信息,使得自注意力能够记忆位置信息。
  2. 位置编码信息直接加到特征上,这样做带来的缺点就是模型可能不认位置feature

你可能感兴趣的:(深度学习,深度学习,自然语言处理,python)