Слои с несколькими головками - что такое слой с несколькими головками в Керасе?

Я новичок в механизмах внимания и хочу узнать о них больше, приведя несколько практических примеров. Я наткнулся на реализацию Keras для многоголового внимания, нашел ее на этом веб-сайте Pypi keras multi -голова. Я нашел два разных способа реализовать это в Керасе.

  1. Один из способов - использовать внимание с несколькими головами в качестве слоя-оболочки 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()
  1. Другой способ - использовать его отдельно как отдельный слой. Это фрагмент второй реализации 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 ?.

Мне было интересно, может ли кто-нибудь объяснить идею, стоящую за ними, особенно слой оболочки.


person Amhs_11    schedule 26.10.2020    source источник
comment
Вы пробовали это tensorflow.org/api_docs/python/tf/keras/ слои /   -  person M.Innat    schedule 13.04.2021
comment
Нет, я не пробовал.   -  person Amhs_11    schedule 15.04.2021


Ответы (1)


Я понимаю ваше замешательство. По моему опыту, Multihead (эта оболочка) делает то, что дублирует (или распараллеливает) слои, чтобы сформировать своего рода многоканальную архитектуру, и каждый канал можно использовать для извлечения различных функций из входных данных.

Например, каждый канал может иметь различную конфигурацию, которая позже объединяется, чтобы сделать вывод. Таким образом, MultiHead можно использовать для обертывания традиционных архитектур для формирования многоголовых CNN, многоголовых LSTM и т. Д.

Обратите внимание, что уровень внимания отличается. Вы можете сложить слои внимания, чтобы сформировать новую архитектуру. Вы также можете распараллелить уровень внимания (MultiHeadAttention) и настроить каждый уровень, как описано выше. См. здесь для получения информации о различных реализациях уровня внимания.

person Omo Ologo    schedule 27.01.2021
comment
Вы знаете, есть ли аналогичный ресурс для pytorch? С такими же примерами для multihead-lstm ... - person Elidor00; 11.02.2021