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