Attention原理
Attention的原理就是计算当前输入序列与输出向量的匹配程度,匹配度高也就是注意力集中点,其相对的得分也越高。其中Attention计算得到的匹配度权重,只限于当前序列对。
算法过程
1,encode对输入序列编码得到最后一个时间步的状态c和每一时间步的输出h,其中c又作为decode的初始状态z0。
2,对于每个时间步的h和z0做匹配,也就是match操作,得到每个时间步的匹配向量a01
3,对所有的时间步的输出h与z0的匹配度a0,使用softmax做归一化处理,得到各个时间步对于z0的匹配分数。该匹配分数就是重要度的体现。
4,求出各个时间步的输出h与匹配分数的加权求和得到c0,作为decode的下一个时间步的输入。
5,计算各个时间步的输出h与z1的匹配度得到c1作为decode下一个时间步的输入,如此一步一步重复下去
这样就把每个时间步重要的信息传给decode中,以上就是Attention机制的处理过程。
其中,match操作一般是求两个向量的相似度,通常会有以下方法:
1)余弦相似度
2)类似逻辑回归的简单神经网络
3)比较经典的BahdanauAttention加法Attention和LuongAttention乘法Attention。
BahdanauAttention是在match过程中,将h(encode中每个时间步的输出向量)和z(decode中每个时间步的状态向量)求和。
LuongAttention是在match过程中,将h(encode中每个时间步的输出向量)和z(decode中每个时间步的状态向量)求乘积。