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网络添加额外信息,从而使得网络有更完整的信息流,详见下图来自此处
来自此blog https://blog.csdn.net/thriving_fcl/article/details/74853556
那么想要解决这个问题,就引入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)

此为前面Seq2Seq模型在生理信号分类项目中attention理解与使用的扩展。

你可能感兴趣的:(tensorflow)