tensorflow - 多头注意层 - Keras 中的包装多头层是什么?

标签 tensorflow keras deep-learning transformer attention-model

我是注意力机制的新手,我想通过做一些实际的例子来更多地了解它。我在这个网站上发现了一个用于多头注意力的 Keras 实现 Pypi keras multi-head .我找到了两种不同的在 Keras 中实现它的方法。

  • 一种方法是使用多头注意力作为带有 LSTM 或 CNN 的 keras 包装层。
    这是在 Keras 中使用 LSTM 将多头实现为包装层的片段。此示例取自本网站 keras multi-head "
  • import keras
    from keras_multi_head import MultiHead
    
    model = keras.models.Sequential()
    model.add(keras.layers.Embedding(input_dim=100, output_dim=20, name='Embedding'))
    model.add(MultiHead(keras.layers.LSTM(units=64), layer_num=3, name='Multi-LSTMs'))
    model.add(keras.layers.Flatten(name='Flatten'))
    model.add(keras.layers.Dense(units=4, activation='softmax', name='Dense'))
    model.build()
    model.summary()
    
  • 另一种方法是将其单独用作独立层。
    这是多头作为独立层的第二个实现的片段,也取自 keras multi-head "
  • import keras
    from keras_multi_head import MultiHeadAttention
    
    input_layer = keras.layers.Input( shape=(2, 3), name='Input',)
    att_layer = MultiHeadAttention( head_num=3, name='Multi-Head',)(input_layer)
    model = keras.models.Model(inputs=input_layer, outputs=att_layer)
    model.compile( optimizer='adam', loss='mse', metrics={},)
    
    我一直试图找到一些解释这一点的文件,但我还没有找到。
    更新:
    我发现第二个实现(MultiHeadAttention)更像是 Transformer 论文“Attention All You Need”。但是,我仍在努力理解包装层的第一个实现。
    第一个(作为包装层)是否会将多头的输出与 LSTM 相结合?。
    我想知道是否有人可以解释它们背后的想法,尤其是包装层。

    最佳答案

    我理解你的困惑。根据我的经验,Multihead ( this wrapper ) 的作用是复制(或并行化)层以形成一种多 channel 架构,每个 channel 可用于从输入中提取不同的特征。
    例如,每个 channel 可以有不同的配置,稍后将其连接起来进行推理。因此,MultiHead 可用于包装传统架构以形成多头-CNN、多头-LSTM 等。
    注意注意层是不同的。您可以堆叠注意力层以形成新的架构。您还可以并行化注意力层 (MultiHeadAttention) 并如上所述配置每一层。见 here用于注意层的不同实现。

    关于tensorflow - 多头注意层 - Keras 中的包装多头层是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64532940/

    相关文章:

    java - 用于编写 Tensorflow TFRecords 数据文件的纯 Java/Scala 代码

    python - 如果我们可以直接使用变量而无需初始化,为什么我们在tensorflow中使用tf.Variable?

    python - Keras:训练损失减少(准确度增加)而验证损失增加(准确度降低)

    theano - 使用 Theano/Lasagne 在 ImageNet 等大规模数据集上进行训练的最佳实践?

    c++ - 用于行人识别的 tiny-dnn 错误

    python - 训练神经网络时电脑死机

    python - tensorflow 中的1和1.0有区别吗?

    python - Tensorflow:Inception v3 批处理

    python - 如何在 Google Colab 的 TPU 上训练 Keras 模型?我需要更改我的模型配置吗?(tinyYolo-v3)

    python - 从卷积网络中删除顺序后,我得到 : "TypeError: ' Tensor' object is not callable"