注意力机制到底”注意“了什么?
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)
此为前面Seq2Seq模型在生理信号分类项目中attention理解与使用的扩展。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。