Where it bites
oxmega trains seeds as stacked replicas in one graph (one parameter slab per seed) because oxmera's batch-broadcast matmul makes that free. The natural next step — stacking the hyper-parameter grid the same way (weight decay ∈ {0.01, 0.1, 1}) — is blocked because AdamW::new(params, lr, wd) takes one scalar for all parameters.
Proposal
AdamW::with_groups(&[(params, lr, wd)]) or a per-Param override (Param::with_weight_decay). Elementwise Adam is already independent per element, so a per-parameter (or per-leading-index) decay tensor is the minimal change: wd broadcastable against the parameter shape.
Where it bites
oxmega trains seeds as stacked replicas in one graph (one parameter slab per seed) because oxmera's batch-broadcast matmul makes that free. The natural next step — stacking the hyper-parameter grid the same way (weight decay ∈ {0.01, 0.1, 1}) — is blocked because
AdamW::new(params, lr, wd)takes one scalar for all parameters.Proposal
AdamW::with_groups(&[(params, lr, wd)])or a per-Paramoverride (Param::with_weight_decay). Elementwise Adam is already independent per element, so a per-parameter (or per-leading-index) decay tensor is the minimal change:wdbroadcastable against the parameter shape.