Attention:
把注意力集中放在重要的点上, 而忽略不重要的因素. 其中重要成都取决于应用场景.
1. 为什么要用Attention机制?
在seq2seq模型中,原始编码模型的encode 过程中会生成一个中间向量C用于保存原序列的语义信息. 但是这个向量长度时固定的, 当输入原序列的长度比较长时, 向量C 无法保存全部语义信息, 上下文语义信息受到了限制. 这也限制了模型的理解能力. 所以使用Attention机制来打破这种原始编码解码模型对固定向量的限制.
2. Attention 原理.
Attention的原理就时计算当前输入序列与输出向量的匹配程度, 匹配度高也就是注意力集中点其相对分数越高, 其中Attention计算得到的匹配度权重, 只限于当前序列对, 而不是像网络模型权重这样的整体权重.
3. 算法过程:
1) encode 对输入序列编码得到最后一个时间步的状态C, 和每个时间步的输出h, 其中C又作为decode 的初始状态z0.
2) 在decoder层 对于每个时间步的输出h与z0做匹配也就是match操作, 得到每个时间步的匹配向量a_01
3) 对于所有时间步的输出h与z0的匹配度a0, 使用softmax做归一化处理,得到各个时间步对于z0的分配分数.
4) 求各个时间步的输出h与匹配分数的加权求和得到的c0, 作为decode的下一个时间步的输入.
5) 计算各个时间步的输出h与z1的匹配度得到C1作为decode下一个时间步的输入, 如此一步步重复下去.
这样就可以把每个时间步重要的信息传递给decode中,以上是Attention机制的处理过程.其中match 操作,一般是求两个向量的相似度,通常有如下方法:
1) 余弦相似度, 2) 一个简单的神经网络 输入为hh 和 ww,输出a, 3) 或者矩阵变化a=hTWz.
参考:attention
网友评论