多头注意层-Keras中的扭曲多头层是什么?

时间:2020-10-26 07:25:57

标签: tensorflow keras deep-learning transformer attention-model

我是注意力机制的新手,我想通过做一些实际的例子来进一步了解它。我在网站Pypi keras multi-head上发现了Keras实施方案,以实现多头关注。我在Keras中找到了两种不同的实现方法。

  1. 一种方法是使用多头注意力作为LSTM或CNN的角膜包裹层。 这是在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()
  1. 另一种方法是将其单独用作独立层。 这是多头作为独立行的第二个实现的摘要,也摘自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结合起来?

我想知道是否有人可以解释其背后的想法,尤其是包装层。

1 个答案:

答案 0 :(得分:0)

我理解你的困惑。根据我的经验,Multihead (this wrapper) 的作用是复制(或并行化)层以形成一种多通道架构,每个通道可用于从输入中提取不同的特征。

例如,每个通道可以有不同的配置,稍后将其连接起来进行推理。因此,MultiHead 可用于包装传统架构以形成多头-CNN、多头-LSTM 等。

注意attention层是不同的。您可以堆叠注意力层以形成新的架构。您还可以并行化注意力层 (MultiHeadAttention) 并如上所述配置每一层。请参阅 here 以了解注意力层的不同实现。