Seq2Seq的attention
Seq2Seq模型存在的问题:
梯度问题,decoding只依赖于context vector,句子开始部分的信息容易丢失。(即梯度消失问题)
实际应用中,翻译某个词可能只需要关注C中的某一部分即可(如翻译weather时只需关注天气这个词),但seq2seq的C是整个句子的向量,所以在翻译weather时可能会出现副作用。
解决方法:引入attention
进入attention的好处:可解释性增强,更容易找bug。
attention原理:下文中汉语的每个词的向量与翻译的每个词进行相乘,得到各中文词在翻译成这个英文的贡献权重。
组成一个向量C'(1)与生成的h向量一起与Why权重参数相乘,再经过softmax回归得到Yhat
贡献权重:可以用g*h向量内积,也可以加一个转移矩阵方法不一
self-attention简介:
在输入句子后加一个self-attention层,作用是计算在生成每个单词时,上下文单词对生成该词所做的贡献有多大。
有三个向量: q(queries),k(keys),v(values)对应三个参数矩阵 Wq Wk Wv. 用q*k计算出生成每个单词时个词的贡献度,然后进行normalization,再*values值得到各词的表达式z