Press "Enter" to skip to content

Seq2Seq中的attention机制的实践与理解

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

注意力机制到底”注意“了什幺?

 

Encoder-Decoder结构的通常解释:Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。

在这里提到的Seq2Seq结构中,Encoder将通过CNN泛化过的原始信号 编码为一组one-hot vector,然后embedding为embedded vector,然后再由Decoder解码。因为embedded 向量包含了原始信号中的所有信息量,它的长度就成了限制模型性能的原因。由于具体生理信号的特性,采样率与切分的时间戳的影响。若在原始序列过长的情况下,单个embedded vector的会存储不下如此程度的信息。这就会造成信息利用率下降,从而导致Seq2Seq模型的性能下降。

Attention机制其实就是将的Encoder RNN隐藏层状态加权后获得权重向量 C(t) ,额外加入到Decoder中,给Decoder RNN网络添加额外信息,从而使得网络有更完整的信息流,详见下图来自 此处

 

 

那幺想要解决这个问题,就引入attention机制: 不单单利用Encoder的最后状态节点而是利用所有的隐藏状态节点,从而增加embedded向量中的信息量。这里以 Luong attention 为例:

 

if hparams.use_attention:
# Create an attention mechanism
    attention_mechanism = tf.contrib.seq2seq.LuongAttention(
    hparams.num_units * 2 if hparams.bidirectional else hparams.num_units , encoder_outputs,
    memory_sequence_length=None)
    decoder_cells = tf.contrib.seq2seq.AttentionWrapper(
    decoder_cells, attention_mechanism,
    attention_layer_size=hparams.attention_size,alignment_history=True)
    encoder_state = decoder_cells.zero_state(hparams.batch_size, tf.float32).clone(cell_state=encoder_state)

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注