NLP-Attention

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

你可能感兴趣的:(NLP-Attention)