注意力机制----seq2seq中的注意力机制

时间:2024-03-17 11:30:32

 

  • 自然语言处理中的sqe2seq模型是encoder,decoder模型

    • 如:输入英语,输出法语

    • X是输入,h是状态

注意力机制----seq2seq中的注意力机制

  • encoder的最后一个状态h_m是decoder的输入

注意力机制----seq2seq中的注意力机制

  • seq2seq模型的缺点就是,如果句子太长,模型会漏掉一些信息,准确性会下降

注意力机制----seq2seq中的注意力机制

  • 但是,使用了注意力机制之后,准确率会保持在一个水平上(BLEU是机器翻译模型的评价标准)

注意力机制----seq2seq中的注意力机制

  • 在encoder结束工作后,decoder与encoder同时开始工作

  • 要计算s_0和每一个h_i的相关性

 注意力机制----seq2seq中的注意力机制

  • 因为有m个h, 所以有m个权重

注意力机制----seq2seq中的注意力机制

  • 权重最原始的计算方法: 

    • 将h_i和s_0拼接起来

    • 乘以W矩阵

    • 经过双曲正切函数

    • 再乘以向量V

 

注意力机制----seq2seq中的注意力机制

  • 其中,W,V都是网络要学习的参数

注意力机制----seq2seq中的注意力机制

  • 得到m个权重之后,再使用softmax进行归一化

注意力机制----seq2seq中的注意力机制

  • 现在经常采用第二种计算权重的方法(transformer模型使用)

  • 第一步:将h_i和s_0分别乘以矩阵W_K和W_Q, 得到k_i和q_0

注意力机制----seq2seq中的注意力机制

  • 第二步:将k_i和q_0进行内积

注意力机制----seq2seq中的注意力机制

  • 第三步:经softmax进行归一化

注意力机制----seq2seq中的注意力机制

  • 将得到的 m个权重和m个状态进行 向量内积,得到s_0对应的c_0

注意力机制----seq2seq中的注意力机制

  • 现在要进行s1的更新:

    • SimpleRNN的做法是:

      • 将输入x'_1和s_0拼接起来

      • 与A'相乘,加b,经双曲正切函数

注意力机制----seq2seq中的注意力机制

  • 有了注意力机制的做法是:

    • 将x'_1, s_0和c_0三个向量拼接起来

    • (其它相同)

注意力机制----seq2seq中的注意力机制

  • 因此,s_1得到更新。

  • 但是,问题是:对于每一个s_i, 权重不能重复使用,必须一遍遍地算 

注意力机制----seq2seq中的注意力机制

  • 重复上面步骤:以同样的方式算得c1

注意力机制----seq2seq中的注意力机制

  • 算得c2

注意力机制----seq2seq中的注意力机制

  • 算得c3

注意力机制----seq2seq中的注意力机制

  • 算得c4 

注意力机制----seq2seq中的注意力机制

  • 时间复杂度: 对于每一个c_i都有m个权重被计算,有t个c就有mt个权重被计算

注意力机制----seq2seq中的注意力机制

  • 关于seq2seq模型的“注意力机制”可视化,可以使用这个图来理解

注意力机制----seq2seq中的注意力机制

  • 总结:

    • 标准的seq2seq模型只是看当前的状态

    • 注意力机制能够结合所有状态的信息

    • 但是,在seq2seq模型中,注意力机制的时间复杂度太高了

注意力机制----seq2seq中的注意力机制