Capa MultiHeadAttention.

Hereda de: Layer, Module

Ver alias

Compat alias para la migración

Ver Guía de migración para más detalles.

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
)

Esta es una implementación de atención de múltiples cabezas basada en “La atención es todo lo que necesita”. Si query, key,value son iguales, entonces esto es atención propia. Cada paso de tiempo en query atiende a la secuencia correspondiente en keyy devuelve un vector de ancho fijo.

Esta capa primero proyecta query, key y value. Estos son (efectivamente) una lista de tensores de longitud num_attention_heads, donde las formas correspondientes son [batch_size, , key_dim], [batch_size, , key_dim], [batch_size, , value_dim].

Luego, la consulta y key los tensores se producen puntualmente y se escalan. Estos son softmaxed para obtener probabilidades de atención. Los tensores de valor se interpolan luego por estas probabilidades y luego se concatenan de nuevo a un solo tensor.

Finalmente, el tensor de resultado con la última dimensión como value_dim puede tomar una proyección lineal y regresar.

Ejemplos:

Realiza atención cruzada 1D sobre dos entradas de secuencia con una máscara de atención. Devuelve los pesos de atención adicionales sobre las cabezas.

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)

Realiza auto-atención 2D sobre un tensor de entrada 5D en los ejes 2 y 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)
Argumentos
num_heads Número de cabezas de atención.
key_dim Tamaño de cada cabezal de atención para consulta y key.
value_dim Tamaño de cada cabeza de atención por valor.
dropout Probabilidad de deserción.
use_bias Booleano, si las capas densas utilizan vectores / matrices de sesgo.
output_shape La forma esperada de un tensor de salida, además del lote y la secuencia, se atenúa. Si no se especifica, se proyecta de nuevo al key característica tenue.
attention_axes ejes sobre los que se aplica la atención. None significa atención sobre todos los ejes, pero sobre lotes, cabezas y características.
kernel_initializer Inicializador para núcleos de capa densa.
bias_initializer Inicializador para sesgos de capa densa.
kernel_regularizer Regularizador para granos de capa densa.
bias_regularizer Regularizador para sesgos de capas densas.
activity_regularizer Regularizador para actividad de capa densa.
kernel_constraint Restricción para granos de capa densa.
bias_constraint Restricción para granos de capa densa.

Argumentos de llamada:

  • query: Consulta Tensor de forma [B, T, dim].
  • value: Valor Tensor de forma [B, S, dim].
  • key: Opcional key Tensor de forma [B, S, dim]. Si no se da, usará value para ambos key y value, que es el caso más común.
  • attention_mask: una máscara booleana de forma [B, T, S], que impide la atención a determinadas posiciones.
  • return_attention_scores: Un booleano para indicar si la salida debe ser salida de atención si es Verdadero, o (salida_atención, puntuación_atención) si es Falso. El valor predeterminado es Falso.
  • training: Python booleano que indica si la capa debe comportarse en modo de entrenamiento (agregando abandono) o en modo de inferencia (sin abandono). De forma predeterminada, se usa el modo de entrenamiento de la capa / modelo principal o Falso (inferencia) si no hay una capa principal.
Devoluciones
attention_output El resultado del cálculo, de forma [B, T, E], dónde T es para formas de secuencia de destino y E es la última dimensión de entrada de la consulta si output_shape es None. De lo contrario, las salidas de múltiples cabezales se proyectan a la forma especificada por output_shape.
attention_scores [Optional] coeficientes de atención de múltiples cabezas sobre ejes de atención.