注意力机制
- 注意力的种类有如下四种:
加法注意力, Bahdanau Attention
点乘注意力, Luong Attention
自注意力, Self-Attention
多头点乘注意力, Multi-Head Dot Product Attention(请转至Transformer模型
-
seq2seq注意力机制:
这里关键的操作是计算encoder与decoder state之间的关联性的权重,得到Attention分布。
1、可以先对encoder中隐藏层状态自身加权。
2、求每次输入decoder的隐藏层状态与encoder中隐藏层状态的相关性。初始状态仍然为encoder_state,第一次可以选择不使用注意力机制。
3、softmax求相关性权重。
4、对encoder中隐藏层状态加权求和得到相应的context vector输入decoder。 -
Bahdanau Attention注意力:
- 在encoder会有一个注意力机制
- decoder注意力:
- 在encoder会有一个注意力机制
-
Luong Attention
- 在encoder同样有一个注意力机制
- decoder注意力:
Bahdanau Attention与Luong Attention两种注意力机制大体结构一致,区别在于计算影响程度的对齐函数。在计算时刻的影响程度时。从逻辑来看貌似后者更合逻辑,但两种机制现在都有在用,TensorFlow中两者都有对应的函数,效果应该没有很大差别。
-
api:
- tf.contrib.seq2seq.LuongAttention
def __init__(self, num_units, memory, memory_sequence_length=None, scale=False, probability_fn=None, score_mask_value=None, dtype=None, custom_key_value_fn=None, name="LuongAttention"):
- tf.contrib.seq2seq.BahdanauAttention
def __init__(self, num_units, memory, memory_sequence_length=None, normalize=False, probability_fn=None, score_mask_value=None, dtype=None, custom_key_value_fn=None, name="BahdanauAttention"):