Spec-Zone.ru › TensorFlow 2.9

tf.keras.layers.MultiHeadAttention

Слой MultiHeadAttention.

Наследуется от: Layer, Module

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.keras.layers.MultiHeadAttention

tf.keras.layers.MultiHeadAttention(
    num_heads,
    key_dim,
    value_dim=None,
    dropout=0.0,
    use_bias=True,
    output_shape=None,
    attention_axes=None,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros',
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

Это реализация многоголового внимания, как описано в статье "Внимание — всё, что вам нужно" (Vaswani и др., 2017). Если query, key, value одинаковы, то это самовнимание. Каждый временной шаг в query обращает внимание на соответствующую последовательность в key, и возвращает вектор фиксированной ширины.

Этот слой сначала проектирует query, key и value. Это (эффективно) список тензоров длиной num_attention_heads, где соответствующие формы равны (batch_size, <query dimensions>, key_dim), (batch_size, <key/value dimensions>, key_dim), (batch_size, <key/value dimensions>, value_dim).

Затем тензоры запроса и ключа перемножаются точечно и масштабируются. Затем они применяют softmax для получения вероятностей внимания. Затем тензоры значений интерполируются с помощью этих вероятностей, а затем конкатенируются обратно в один тензор.

Наконец, тензор результата с последним измерением как value_dim может принять линейное проектирование и вернуть.

При использовании MultiHeadAttention внутри пользовательского слоя, пользовательский слой должен реализовывать build() и вызывать _build_from_signature() MultiHeadAttention. Это позволяет правильно восстановить веса при загрузке модели.

при использовании в пользовательском слое.

Примеры:

Выполняет 1D перекрестное внимание над двумя последовательностями входных данных с маской внимания. Возвращает дополнительные веса внимания по головам.

layer = MultiHeadAttention(num_heads=2, key_dim=2)
target = tf.keras.Input(shape=[8, 16])
source = tf.keras.Input(shape=[4, 16])
output_tensor, weights = layer(target, source,
                               return_attention_scores=True)
print(output_tensor.shape)
(None, 8, 16)
print(weights.shape)
(None, 2, 8, 4)

Выполняет 2D самовнимание над 5D тензором входных данных по осям 2 и 3.

layer = MultiHeadAttention(num_heads=2, key_dim=2, attention_axes=(2, 3))
input_tensor = tf.keras.Input(shape=[5, 3, 4, 16])
output_tensor = layer(input_tensor, input_tensor)
print(output_tensor.shape)
(None, 5, 3, 4, 16)
Аргументы
num_heads Количество головок внимания.
key_dim Размер каждой головки внимания для запроса и ключа.
value_dim Размер каждой головки внимания для значения.
dropout Вероятность дропаута.
use_bias Булево значение, указывающее, используют ли плотные слои векторы/матрицы смещения.
output_shape Ожидаемая форма тензора выходных данных помимо размеров пакет и последовательности. Если не указано, возвращается к размеру измерения ключа.
attention_axes Оси, по которым применяется внимание. None означает внимание по всем осям, кроме пакета, голов и свойств.
kernel_initializer Инициализатор ядер плотных слоев.
bias_initializer Инициализатор смещений плотных слоев.
kernel_regularizer Регуляризатор ядер плотных слоев.
bias_regularizer Регуляризатор смещений плотных слоев.
activity_regularizer Регуляризатор активности плотных слоев.
kernel_constraint Ограничение для ядер плотных слоев.
bias_constraint Ограничение для ядер плотных слоев.

Аргументы вызова:

  • query: Запрос Tensor формы (B, T, dim).
  • value: Значение Tensor формы (B, S, dim).
  • key: Необязательный ключ Tensor формы (B, S, dim). Если не задан, используется value для обоих key и value, что является наиболее распространенным случаем.
  • attention_mask: булева маска формы (B, T, S), которая предотвращает внимание к определенным позициям. Булева маска указывает, какие элементы запроса могут обращать внимание на какие элементы ключа, 1 указывает внимание, а 0 — отсутствие внимания. Вещание может происходить для отсутствующих измерений пакета и измерения голов.
  • return_attention_scores: Булево значение для указания, должен ли выходной результат быть (attention_output, attention_scores) если True, или attention_output если False. По умолчанию False.
  • training: Python-булево значение, указывающее, должен ли слой вести себя в режиме обучения (добавляя дропаут) или в режиме вывода (без дропаута). По умолчанию использует режим обучения родительского слоя/модели или False (режим вывода), если родительского слоя нет.
Возвращаемое значение
attention_output Результат вычисления, формы (B, T, E), где T для форм целевой последовательности, а E — последнее измерение входного запроса, если output_shape равно None. В противном случае многоголовые выходные данные проектируются на форму, указанную output_shape.
attention_scores [Необязательно] коэффициенты многоголового внимания по осям внимания.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/keras/layers/MultiHeadAttention

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API