dual_stream_attention
dual_stream_attention
¶
Dual-stream attention block: per-stream norm + joint attention.
DualStreamAttentionBlock
¶
DualStreamAttentionBlock(joint_attention, attention_normalization_primary, attention_normalization_secondary, dropout=0.1)
Bases: DualStreamBlock
Dual-stream joint attention block.
Both streams have independent normalization and share attention through joint K/V concatenation. Supports optional conditioning via adaptive normalization.
Initialize DualStreamAttentionBlock.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
joint_attention
|
JointAttention
|
JointAttention module for dual-stream attention. |
required |
attention_normalization_primary
|
BlockNormalization
|
Normalization for primary stream. |
required |
attention_normalization_secondary
|
BlockNormalization
|
Normalization for secondary stream. |
required |
dropout
|
float
|
Dropout rate for attention residual connections. |
0.1
|
Source code in src/versatil/models/layers/transformer/block/dual_stream_attention.py
forward
¶
forward(hidden_states_primary, hidden_states_secondary, conditioning=None, attention_mask_primary=None, attention_mask_secondary=None, joint_attention_mask=None, positional_encoding_primary=None, positional_encoding_secondary=None)
Forward pass through dual-stream attention block.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
hidden_states_primary
|
Tensor
|
Primary stream tokens (B, S, D_p). |
required |
hidden_states_secondary
|
Tensor
|
Secondary stream tokens (B, T, D_s). |
required |
conditioning
|
Tensor | None
|
Conditioning vector for adaptive normalization (B, C). |
None
|
attention_mask_primary
|
Tensor | None
|
Padding mask (B, S), True = masked. |
None
|
attention_mask_secondary
|
Tensor | None
|
Padding mask (B, T), True = masked. |
None
|
joint_attention_mask
|
Tensor | None
|
Pre-built joint mask (B, 1, S+T, S+T). |
None
|
positional_encoding_primary
|
RotaryPositionalEncoding | None
|
Optional RoPE for primary stream. |
None
|
positional_encoding_secondary
|
RotaryPositionalEncoding | None
|
Optional RoPE for secondary stream. |
None
|
Returns:
| Type | Description |
|---|---|
tuple[Tensor, Tensor]
|
Tuple of (primary_output (B, S, D_p), secondary_output (B, T, D_s)). |