При работе с мультимодальностями, состоящими из изображений, видео, категориальных и числовых входных данных, одной из основных проблем является то, как объединить данные из нескольких потоков в одно вложение, которое можно использовать для последующих задач.
Один из подходов состоит в том, чтобы объединить вложения (полученные путем передачи каждого из входных данных через отдельные кодировщики) вместе последовательно и пройти через ряд линейных слоев (фрагмент ниже), надеясь, что изученные параметры веса будут фиксировать релевантные отношения между различными переменными.
embeddings = [img_embd, video_embd, ....] stacked_embds = tf.stack(embeddings, axis=1) x = tf.keras.layers.Flatten()(stacked_embds) x = tf.keras.layers.Dense(1024)(x) x = tf.keras.layers.BatchNormalization()(x) x = tf.keras.layers.Dense(256)(x) encoded = tf.keras.layers.Dense(64)(x)
Несколько основных проблем с этим подходом:
- изучение лишних отношений для нулевого входа (отсутствующие данные)
- огромное увеличение количества параметров для каждой дополнительной входной переменной (при условии, что emb_dim = 64, для дополнительной входной переменной потребуется 1024*64 дополнительных параметра).
Чтобы противостоять вышеуказанным ограничениям, я придумал следующий подход.
- фиктивный токен (с изученным вектором встраивания, вдохновленным токеном ‹CLS› задачи классификации BERT)
- используйте многоголовое внимание (MHA), чтобы обобщить контекст из всех различных модальностей.
# Global token embed to store the condensed info from all the embeddings sample_token_embed = GlobalTokenEmbedding(key_dim
)(stacked_embds)layer =
MultiHeadAttention(num_heads, key_dim
) attention, _ = layer(source=stacked_embds, target=sample_token_embed) attention = Dropout(0.1)(attention, training=training) encoded = LayerNormalization()(sample_token_embed + attention) ffn_output = point_wise_feed_forward_network()(encoded) ffn_output = Dropout(0.1)(ffn_output, training=training) encoded = LayerNormalization()(encoded + ffn_output)
Преимущества:
- MHA обеспечивает функциональность маскирования нулевых входных данных, чтобы они не мешали глобальному контексту.
- нет дополнительных обучаемых параметров.
- заставляет отдельные кодировщики генерировать согласованную информацию по модальностям, тогда как в последовательном подходе большая часть тяжелой работы возлагается на серию плотных слоев, чтобы определить наши соответствующие отношения. Это обеспечивает лучший инструмент для оценки релевантности каждой входной переменной для последующих задач.
- Относительно менее обширная настройка гиперпараметров для определения количества шагов понижающей дискретизации и их размерности.
Как показано в эксперименте (рисунки ниже), суммирование контекста на основе MHA приводит к более стабильной производительности с более быстрой конвергенцией.
Если вы считаете подобные истории ценными и хотели бы поддержать меня как автора, рассмотрите возможность подписаться на меня или зарегистрироваться для членства в Medium.