dual_stream_layer
dual_stream_layer
¶
Dual-stream transformer layer: joint attention + per-stream feedforward.
DualStreamLayer
¶
DualStreamLayer(embedding_dimension, number_of_heads, conditioning_dimension=None, feedforward_dimension=None, dropout=0.1, attention_dropout=0.0, activation=value, normalization_type=value, normalization_epsilon=1e-06, use_query_key_norm=True, use_gating=True, bias=True)
Bases: Module
Joint attention over two streams followed by per-stream feedforward.
Both streams share attention through joint K/V concatenation but have independent normalization and feedforward networks.
Initialize DualStreamLayer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
embedding_dimension
|
int
|
Hidden dimension for both streams. |
required |
number_of_heads
|
int
|
Number of attention heads. |
required |
conditioning_dimension
|
int | None
|
Dimension of conditioning vector for adaptive norm. |
None
|
feedforward_dimension
|
int | None
|
FFN hidden dimension (defaults to 4 * embedding_dimension). |
None
|
dropout
|
float
|
Dropout rate for residual connections. |
0.1
|
attention_dropout
|
float
|
Dropout rate for attention weights. |
0.0
|
activation
|
str
|
Activation function for FFN. |
value
|
normalization_type
|
str
|
Normalization type. |
value
|
normalization_epsilon
|
float
|
Epsilon for normalization layers. |
1e-06
|
use_query_key_norm
|
bool
|
Whether to apply QK-normalization. |
True
|
use_gating
|
bool
|
Whether to use gating in adaptive normalization. |
True
|
bias
|
bool
|
Whether to use bias in linear layers. |
True
|
Source code in src/versatil/models/layers/transformer/layer/dual_stream_layer.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 layer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
hidden_states_primary
|
Tensor
|
Primary stream tokens (B, S, D). |
required |
hidden_states_secondary
|
Tensor
|
Secondary stream tokens (B, T, D). |
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), secondary_output (B, T, D)). |