Keras 不同注意力层之间的差异

Dr.*_*Who 5 keras tensorflow recurrent-neural-network attention-model

我正在尝试为我的文本分类模型添加一个注意层。输入是文本(例如电影评论),输出是二元结果(例如正面与负面)。

model = Sequential()
model.add(Embedding(max_features, 32, input_length=maxlen))
model.add(Bidirectional(CuDNNGRU(16,return_sequences=True)))
##### add attention layer here #####
model.add(Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

经过一番搜索,我发现了几个 keras 的可阅读使用的注意力层。keras.layers.AttentionKeras 中内置了该层。还有SeqWeightedAttentionSeqSelfAttention layerkeras-self-attention包中。作为一个深度学习领域的新手,我很难理解这些层背后的机制。

这些外行各有什么作用?哪一款最适合我的模型?

非常感谢!

All*_*hvk 0

如果您使用 RNN,我不建议使用 keras.layers.Attention 类。

在分析 tf.keras.layers.Attention Github 代码以更好地理解如何使用它时,我遇到的第一行是 - “此类适用于密集或 CNN 网络,而不适合 RNN 网络”

Cyber​​ZHG 维护的另一个开源版本称为 keras-self-attention。据我所知,这不是 Keras 或 TensorFlow 库的一部分,似乎是一段独立的代码。其中包含您提到的两个类 - SeqWeightedAttention 和 SeqSelfAttention 层类。前者返回 2D 值,后者返回 3D 值。因此 SeqWeightedAttention 应该适合您的情况。前者似乎松散地基于 Raffel 等人,可用于 Seq 分类,后者似乎是 Bahdanau 的变体。

一般来说,我建议您编写自己的 seq 到分类模型。可以用不到六行代码(最基本的本质)添加注意力部分......比您在集成或调试或理解这些外部库中的代码所花费的时间要少得多。

请参考:在Keras中使用Attention创建LSTM层用于多标签文本分类神经网络