-
自然语言处理中的sqe2seq模型是encoder,decoder模型
-
如:输入英语,输出法语
-
X是输入,h是状态
-
-
encoder的最后一个状态h_m是decoder的输入
-
seq2seq模型的缺点就是,如果句子太长,模型会漏掉一些信息,准确性会下降
-
但是,使用了注意力机制之后,准确率会保持在一个水平上(BLEU是机器翻译模型的评价标准)
-
在encoder结束工作后,decoder与encoder同时开始工作
-
要计算s_0和每一个h_i的相关性
-
因为有m个h, 所以有m个权重
-
权重最原始的计算方法:
-
将h_i和s_0拼接起来
-
乘以W矩阵
-
经过双曲正切函数
-
再乘以向量V
-
-
其中,W,V都是网络要学习的参数
-
得到m个权重之后,再使用softmax进行归一化
-
现在经常采用第二种计算权重的方法(transformer模型使用)
-
第一步:将h_i和s_0分别乘以矩阵W_K和W_Q, 得到k_i和q_0
-
第二步:将k_i和q_0进行内积
-
第三步:经softmax进行归一化
:
-
将得到的 m个权重和m个状态进行 向量内积,得到s_0对应的c_0
-
现在要进行s1的更新:
-
SimpleRNN的做法是:
-
将输入x'_1和s_0拼接起来
-
与A'相乘,加b,经双曲正切函数
-
-
-
有了注意力机制的做法是:
-
将x'_1, s_0和c_0三个向量拼接起来
-
(其它相同)
-
-
因此,s_1得到更新。
-
但是,问题是:对于每一个s_i, 权重不能重复使用,必须一遍遍地算
-
重复上面步骤:以同样的方式算得c1
-
算得c2
-
算得c3
-
算得c4
-
时间复杂度: 对于每一个c_i都有m个权重被计算,有t个c就有mt个权重被计算
-
关于seq2seq模型的“注意力机制”可视化,可以使用这个图来理解
-
总结:
-
标准的seq2seq模型只是看当前的状态
-
注意力机制能够结合所有状态的信息
-
但是,在seq2seq模型中,注意力机制的时间复杂度太高了
-