Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.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
)

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

Этот слой сначала проецирует query, key и value. Это (по сути) список тензоров длиной num_attention_heads, где соответствующие формы — [размер_пакета, <размер_запроса>, размер_ключа], [размер_пакета, <размер_ключа>, размер_ключа], [размер_пакета, <размер_ключа>, размер_значения].

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

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

Примеры:

Выполняет 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], которая предотвращает внимание к определённым позициям.
  • return_attention_scores: Булево значение, указывающее, должен ли вывод быть выводом внимания (True), или (вывод_внимания, баллы_внимания) (False). По умолчанию False.
  • training: Булево значение Python, указывающее, должен ли слой работать в режиме обучения (добавляя дропаут) или в режиме вывода (без дропаута). По умолчанию использует режим обучения родительского слоя/модели или False (режим вывода), если родительского слоя нет.
Возвращает
attention_output Результат вычисления формы [Б, Т, Е], где T относится к формам целевой последовательности, а E — размер последнего измерения входных данных запроса, если output_shape равно None. В противном случае многоголовые выводы проецируются на форму, указанную в output_shape.
attention_scores [Необязательно] коэффициенты многоголового внимания по осям внимания.

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

Spec-Zone.ru

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