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

Posted

技术标签:

【中文标题】Keras 不同注意力层之间的差异【英文标题】:Differences between different attention layers for Keras 【发布时间】:2020-02-21 02:51:15 【问题描述】:

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

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'))

经过一番搜索,我发现了一些用于 keras 的即读即用的注意力层。 Keras 中内置了keras.layers.Attention 层。 keras-self-attention 包中还有SeqWeightedAttentionSeqSelfAttention layer。作为一个对深度学习领域比较陌生的人,我很难理解这些层背后的机制。

这些布局中的每一个都有什么作用?哪一个最适合我的模型?

非常感谢!

【问题讨论】:

【参考方案1】:

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

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

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

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

请参考:Create an LSTM layer with Attention in Keras for multi-label text classification neural network

【讨论】:

如果您也可以通过解释每一层的目的来解决 OP 的问题会更好。 编辑了我的答案以更好地解决 OPs 查询

以上是关于Keras 不同注意力层之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

keras 中全局池化层和(正常)池化层之间的区别

在 Keras 中添加 vs 连接层

Keras 神经网络中 val-acc 和预测精度之间的巨大差异

使用 Keras 注意力在 sequence2sequence 模型中连接层形状误差

Keras 主要的层函数

Keras 主要的层函数