Si encuentras algún detalle que te causa duda nos puedes dejar un comentario y te responderemos rápidamente.
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.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 key
y 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,
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
: ConsultaTensor
de forma[B, T, dim]
.value
: ValorTensor
de forma[B, S, dim]
.key
: Opcional keyTensor
de forma[B, S, dim]
. Si no se da, usarávalue
para amboskey
yvalue
, 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. |
Si para ti ha resultado de provecho este artículo, te agradeceríamos que lo compartas con otros desarrolladores y nos ayudes a difundir nuestro contenido.