Я новичок в механизмах внимания и хочу узнать о них больше, приведя несколько практических примеров. Я наткнулся на реализацию Keras для многоголового внимания, нашел ее на этом веб-сайте Pypi keras multi -голова. Я нашел два разных способа реализовать это в Керасе.
- Один из способов - использовать внимание с несколькими головами в качестве слоя-оболочки keras с LSTM или CNN. Это фрагмент реализации multi-head в качестве слоя-оболочки с LSTM в Keras. Этот пример взят с этого веб-сайта. 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()
- Другой способ - использовать его отдельно как отдельный слой. Это фрагмент второй реализации 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 . Однако я все еще изо всех сил пытаюсь понять первую реализацию, которая является слоем оболочки.
Будет ли первый (как слой-оболочка) объединять вывод multi-head с LSTM ?.
Мне было интересно, может ли кто-нибудь объяснить идею, стоящую за ними, особенно слой оболочки.