View source on GitHub
|
Grouped Query Attention layer.
Inherits From: Layer, Operation
tf.keras.layers.GroupQueryAttention(
head_dim,
num_query_heads,
num_key_value_heads,
dropout=0.0,
use_bias=True,
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
)
This is an implementation of grouped-query attention introduced by
Ainslie et al., 2023. Here
num_key_value_heads denotes number of groups, setting
num_key_value_heads to 1 is equivalent to multi-query attention, and
when num_key_value_heads is equal to num_query_heads it is equivalent
to multi-head attention.
This layer first projects query, key, and value tensors. Then, key
and value are repeated to match the number of heads of query.
Then, the query is scaled and dot-producted with key tensors. These are
softmaxed to obtain attention probabilities. The value tensors are then
interpolated by these probabilities and concatenated back to a single
tensor.
Args | |
|---|---|
head_dim
|
Size of each attention head. |
num_query_heads
|
Number of query attention heads. |
num_key_value_heads
|
Number of key and value attention heads. |
dropout
|
Dropout probability. |
use_bias
|
Boolean, whether the dense layers use bias vectors/matrices. |
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