View source on GitHub
|
MultiHeadAttention layer.
Inherits From: Layer, Operation
tf.keras.layers.MultiHeadAttention(
num_heads,
key_dim,
value_dim=None,
dropout=0.0,
use_bias=True,
output_shape=None,
attention_axes=None,
sliding_window=None,
flash_attention=None,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
use_gate=False,
seed=None,
**kwargs
)
Used in the notebooks
| Used in the tutorials |
|---|
This is an implementation of multi-headed attention as described in the
paper "Attention is all you Need"
Vaswani et al., 2017.
If query, key, value are the same, then
this is self-attention. Each timestep in query attends to the
corresponding sequence in key, and returns a fixed-width vector.
This layer first projects query, key and value. These are
(effectively) a list of tensors of length num_attention_heads, where the
corresponding shapes are (batch_size, <query dimensions>, key_dim),
(batch_size, <key/value dimensions>, key_dim),
(batch_size, <key/value dimensions>, value_dim).
Then, the query and key tensors are dot-producted and scaled. These are softmaxed to obtain attention probabilities. The value tensors are then interpolated by these probabilities, then concatenated back to a single tensor.
Finally, the result tensor with the last dimension as value_dim can take
a linear projection and return.
Args | |
|---|---|
num_heads
|
Number of attention heads. |
key_dim
|
Size of each attention head for query and key. |
value_dim
|
Size of each attention head for value. |
dropout
|
Dropout probability. |
use_bias
|
Boolean, whether the dense layers use bias vectors/matrices. |
output_shape
|
The expected shape of an output tensor, besides the batch and sequence dims. If not specified, projects back to the query feature dim (the query input's last dimension). |
attention_axes
|
axes over which the attention is applied. None means
attention over all axes, but batch, heads, and features.
|
sliding_window
|
Optional positive integer. If set, restricts each
query position to attend only to key positions within
sliding_window - 1 of itself (a symmetric band). Composes
naturally with use_causal_mask=True to give the causal
sliding window used by Mistral, Llama-3 long-context, and
Phi-3. Defaults to None (full attention).
|
flash_attention
|
If None, the layer attempts to use flash
attention for faster and more memory-efficient attention
computations when possible. This behavior can be configured using
keras.config.enable_flash_attention() or
keras.config.disable_flash_attention().
|
kernel_initializer
|
Initializer for dense layer kernels. |
bias_initializer
|
Initializer for dense layer biases. |
kernel_regularizer
|
Regularizer for dense layer kernels. |
bias_regularizer
|
Regularizer for dense layer biases. |
activity_regularizer
|
Regularizer for dense layer activity. |
kernel_constraint
|
Constraint for dense layer kernels. |
bias_constraint
|
Constraint for dense layer kernels. |
use_gate
|
Boolean, whether to apply a gated attention mechanism. When True, an additional gating branch is added based on the (Gated Attention for Large Language Models)[https://arxiv.org/abs/2505.06708]. It applies a sigmoid-activated linear projection to the query which then gates the attention output. This helps improve training stability and eliminates "attention sinks". |
seed
|
Optional integer to seed the dropout layer. |
Methods
from_config
@classmethodfrom_config( config )
Creates an operation from its config.
This method is the reverse of get_config, capable of instantiating the
same operation from the config dictionary.
if "dtype" in config and isinstance(config["dtype"], dict):
policy = dtype_policies.deserialize(config["dtype"])
| Args | |
|---|---|
config
|
A Python dictionary, typically the output of get_config.
|
| Returns | |
|---|---|
| An operation instance. |
View source on GitHub