use super::super::{LearnedOptimizerConfig, MetaOptimizationStrategy};
#[derive(Debug, Clone)]
pub struct TransformerOptimizerConfig {
pub base_config: LearnedOptimizerConfig,
pub modeldim: usize,
pub numheads: usize,
pub ff_dim: usize,
pub num_layers: usize,
pub max_sequence_length: usize,
pub attention_dropout: f64,
pub ff_dropout: f64,
pub layer_norm_eps: f64,
pub pre_layer_norm: bool,
pub pos_encoding_type: PositionalEncodingType,
pub relative_position_bias: bool,
pub use_rope: bool,
pub gradient_checkpointing: bool,
pub attention_optimization: AttentionOptimization,
pub multi_scale_attention: bool,
pub cross_attention: bool,
pub memory_efficient: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PositionalEncodingType {
Sinusoidal,
Learned,
Rotary,
Relative,
ALiBi,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AttentionOptimization {
Full,
Sparse,
Linear,
Local,
Hierarchical,
Adaptive,
}
impl Default for TransformerOptimizerConfig {
fn default() -> Self {
Self {
base_config: LearnedOptimizerConfig::default(),
modeldim: 512,
numheads: 8,
ff_dim: 2048,
num_layers: 6,
max_sequence_length: 1024,
attention_dropout: 0.1,
ff_dropout: 0.1,
layer_norm_eps: 1e-5,
pre_layer_norm: true,
pos_encoding_type: PositionalEncodingType::Sinusoidal,
relative_position_bias: false,
use_rope: false,
gradient_checkpointing: false,
attention_optimization: AttentionOptimization::Full,
multi_scale_attention: false,
cross_attention: false,
memory_efficient: false,
}
}
}
impl Default for PositionalEncodingType {
fn default() -> Self {
Self::Sinusoidal
}
}
impl Default for AttentionOptimization {
fn default() -> Self {
Self::Full
}
}