solver.press

Taming Momentum can improve the efficiency of training LLMs for agentic AI systems.

Computer ScienceMar 5, 2026Evaluation Score: 61%

Adversarial Debate Score

57% survival rate under critique

Expert panel critique

Independent views, each critiquing the hypothesis on its own — the score rewards genuine disagreement and discounts consensus.

Gemini: Potentially falsifiable and supported by "Taming Momentum" and "FlashOptim," which address efficiency. "Agentic AI systems" is vague and weakens the hypothesis.
ChatGPT: It’s falsifiable (measure training efficiency of agentic LLM systems with/without Taming Momentum), and the Taming Momentum/FlashOptim excerpts support the “efficiency via reduced optimizer-state memory” angle, but the leap to “agentic AI systems” is under-justified and counterarguments include c...
Claude: The "Taming Momentum" paper directly addresses memory-efficient optimizer states for LLM training, providing relevant support, but the hypothesis's specific claim about "agentic AI systems" is not substantiated by any of the cited papers, which focus on general LLM training efficiency rather than...

Supporting Research Papers

Formal Verification

Z3 logical consistency:✅ Consistent

Z3 checks whether the hypothesis is internally consistent, not whether it is empirically true.

Experimental Validation Package

This discovery has a Claude-generated validation package with a full experimental design.

Precise Hypothesis

Applying "Taming Momentum" — a gradient update modification that clips or rescales the momentum term (e.g., via bounded exponential moving average of gradients, momentum norm capping, or sign-based momentum dampening) in first-order optimizers (Adam, AdamW, Lion) — reduces total compute-to-convergence (measured in FLOPs and wall-clock GPU hours) by ≥15% relative to vanilla AdamW baseline, without degrading final task performance (perplexity, downstream benchmark accuracy) by more than 1.5% absolute, when training transformer-based LLMs (≥1B parameters) on agentic AI task distributions (multi-step reasoning, tool-use, instruction-following corpora). The effect is hypothesized to arise from reduced oscillatory gradient dynamics in deep attention layers, yielding more stable loss landscapes and permitting larger effective learning rates or fewer warmup steps.

Disproof criteria:
  1. PRIMARY DISPROOF: Taming Momentum optimizer achieves <5% reduction in FLOPs-to-convergence (defined as reaching target validation perplexity) compared to AdamW baseline across all three model scales tested (1B, 7B, 13B), with p>0.05 on paired t-test across ≥3 independent seeds.
  2. PERFORMANCE DEGRADATION: Final benchmark accuracy (average of GSM8K, HotpotQA, ToolBench subset) is >2.0% absolute lower for Taming Momentum vs. AdamW at matched compute budget.
  3. INSTABILITY: Taming Momentum runs exhibit loss spikes (>2× baseline loss at any checkpoint) at rate ≥2× that of AdamW baseline across seeds.
  4. SCALE FAILURE: Effect size (% FLOP reduction) decreases monotonically with model scale (1B→7B→13B), suggesting the mechanism does not hold at practical LLM scale.
  5. TASK SPECIFICITY FAILURE: No statistically significant difference (p>0.1) between Taming Momentum and AdamW on agentic benchmarks specifically, even if general perplexity differs.
  6. REPRODUCIBILITY FAILURE: Results from independent reimplementation (different codebase, different institution) fail to replicate within 5% of reported efficiency gains.
  7. CONFOUND IDENTIFICATION: Efficiency gains are fully explained by implicit learning rate rescaling (i.e., matching effective LR in AdamW eliminates the gap), indicating no novel mechanism.

Experimental Protocol

MINIMUM VIABLE TEST (MVT): Train a 1.3B parameter decoder-only transformer (GPT-NeoX architecture or LLaMA-style) on a 10B-token agentic corpus (mixture: 40% OpenHermes-2.5, 30% ToolBench instructions, 30% GSM8K-extended chain-of-thought) for 20,000 gradient steps. Compare four optimizer conditions: (A) AdamW baseline, (B) Taming Momentum as specified, (C) Lion optimizer, (D) AdamW with matched effective LR as ablation. Use 3 random seeds per condition (12 total runs). Primary metric: validation perplexity at matched FLOP budget. Secondary metrics: wall-clock time, gradient norm statistics, loss landscape curvature proxy (sharpness via SAM-style perturbation at 5 checkpoints).

FULL VALIDATION: Extend to 7B and 13B models, 100B-token training, 5 seeds, full agentic benchmark suite evaluation post-training.

Required datasets:
  1. TRAINING CORPUS — Agentic mixture (construct from open sources):

    • OpenHermes-2.5 (Teknium, HuggingFace): ~1M instruction pairs, tool-use heavy
    • ToolBench (Qin et al., 2023): ~126K tool-use trajectories
    • GSM8K + GSM8K-Platinum extended CoT: ~8,500 + augmented ~50K examples
    • OpenAssistant OASST2: ~161K conversation turns
    • Total target: 10B tokens for MVT, 100B tokens for full validation
    • Tokenizer: LLaMA-2 tokenizer (32K vocab) or equivalent BPE
  2. EVALUATION BENCHMARKS:

    • GSM8K (math reasoning): 1,319 test problems
    • HotpotQA (multi-hop reasoning): 7,405 distractor test examples
    • ToolBench held-out test set: ~1,000 tool-call trajectories
    • MMLU (general knowledge): 14,042 test questions (5-shot)
    • MT-Bench (instruction following): 80 multi-turn questions
  3. BASELINE MODEL CHECKPOINTS:

    • Pythia-1.4B (EleutherAI) as architecture reference
    • LLaMA-2-7B and LLaMA-2-13B architecture configs (train from scratch or continue)
    • GPT-NeoX codebase (github.com/EleutherAI/gpt-neox) as training framework
  4. OPTIMIZER IMPLEMENTATIONS:

    • AdamW: PyTorch built-in (torch.optim.AdamW)
    • Taming Momentum: implement from source preprint specification; if code unavailable, reconstruct from paper equations
    • Lion: lucidrains/lion-pytorch
    • Reference implementation cross-check against any author-released code
  5. HARDWARE ENVIRONMENT:

    • Primary: 8× NVIDIA A100 80GB SXM4 (MVT); 64× A100 (full validation)
    • Alternative: 8× H100 80GB NVLink
    • Storage: 10TB NVMe for checkpoints and datasets
Success:
  1. PRIMARY: Taming Momentum achieves ≥15% reduction in FLOPs-to-convergence vs. AdamW at 1.3B scale, with p<0.05 (paired t-test, n=3 seeds), Cohen's d ≥ 0.8.
  2. PERFORMANCE PRESERVATION: Final benchmark average (GSM8K + HotpotQA + MMLU) within 1.5% absolute of AdamW at matched compute budget.
  3. SCALE CONSISTENCY: Efficiency gain at 7B scale is ≥10% (allowing for some attenuation) and not statistically lower than 1.3B gain (p>0.05 on difference-of-differences test).
  4. MECHANISM SUPPORT: Taming Momentum checkpoints show statistically lower gradient norm variance (CV reduction ≥20%) and lower sharpness proxy (≥10% lower perturbation perplexity increase) vs. AdamW.
  5. ABLATION DISCRIMINATION: Effective-LR-matched AdamW does NOT close the efficiency gap (gap remains ≥8% after LR matching), supporting a genuine momentum-taming mechanism.
  6. REPRODUCIBILITY: Independent replication achieves efficiency gain within ±5 percentage points of primary result.
  7. AGENTIC SPECIFICITY: Efficiency gain on agentic benchmarks (GSM8K, ToolBench) is ≥1.5× the gain on non-agentic benchmarks (MMLU), supporting task-distribution specificity claim.
Failure:
  1. HARD FAILURE: FLOPs-to-convergence reduction <5% at 1.3B scale across all seeds (p>0.1); experiment terminates at MVT stage.
  2. HARD FAILURE: Any Taming Momentum run fails to converge (loss does not decrease below 90% of initial loss within 5,000 steps) in ≥2/3 seeds.
  3. HARD FAILURE: Benchmark performance degradation >2.0% absolute average vs. AdamW at matched compute.
  4. SOFT FAILURE (proceed to investigation): Efficiency gain 5–14% (below 15% threshold) — investigate whether hyperparameter tuning or scale changes the picture.
  5. SOFT FAILURE: Effect fully explained by LR rescaling (ablation closes gap to <3%) — reframe as "implicit LR tuning" rather than novel mechanism.
  6. SOFT FAILURE: Effect present at 1.3B but absent at 7B — hypothesis holds only at small scale, limiting practical impact.
  7. REPRODUCIBILITY FAILURE: Independent replication shows <0% efficiency gain (negative result) — original result attributed to seed selection or implementation artifact.

100

GPU hours

30d

Time to result

$1,000

Min cost

$10,000

Full cost

ROI Projection

Commercial:
  1. LICENSING/IP: A validated, novel optimizer with demonstrated LLM efficiency gains could be patented (USPTO) or published as open standard; licensing to cloud providers (AWS, GCP, Azure) at $0.5M–$5M/year per licensee.
  2. CLOUD PROVIDER INTEGRATION: AWS, GCP, Azure, and CoreWeave could integrate Taming Momentum into managed training services (SageMaker, Vertex AI), differentiating their LLM training offerings.
  3. OPEN-SOURCE ECOSYSTEM: Integration into PyTorch (torch.optim), HuggingFace Accelerate, and DeepSpeed would create de facto standard adoption, driving citation impact and institutional reputation.
  4. AGENTIC AI STARTUPS: Companies building agentic AI systems (Adept, Cognition, AutoGPT-class) face acute compute cost pressures; a validated efficiency optimizer has direct commercial value as a competitive advantage.
  5. HARDWARE VENDOR ALIGNMENT: NVIDIA and AMD could incorporate Taming Momentum into their training software stacks (cuDNN, ROCm) as a default optimizer option, with co-marketing value.
  6. RESEARCH SERVICES: Consulting and implementation services for enterprises adopting the optimizer: estimated $500K–$2M market within 2 years of validation.
  7. BROADER OPTIMIZER MARKET: The ML optimizer market (training efficiency tools, AutoML) is estimated at $1.2B by 2027; a validated novel optimizer captures a meaningful share.

TIME_TO_RESULT_DAYS: 80

Implementation Sketch

# ============================================================
# Taming Momentum Experimental Validation — Implementation Sketch
# ============================================================

import torch
import torch.nn as nn
from torch.optim import Optimizer
import math
from dataclasses import dataclass
from typing import Optional, List, Dict, Tuple
import wandb
import numpy as np

# ---- 1. TAMING MOMENTUM OPTIMIZER -------------------------
class TamingMomentum(Optimizer):
    """
    Taming Momentum optimizer — AdamW variant with bounded momentum.
    Formulation (reconstruct from preprint):
      m_t = β1 * m_{t-1} + (1 - β1) * g_t          [standard EMA]
      m_t_tamed = m_t / max(1, ||m_t|| / τ)          [momentum norm clipping]
      v_t = β2 * v_{t-1} + (1 - β2) * g_t^2         [standard variance EMA]
      m_hat = m_t_tamed / (1 - β1^t)                 [bias correction]
      v_hat = v_t / (1 - β2^t)                        [bias correction]
      θ_t = θ_{t-1} - lr * m_hat / (sqrt(v_hat) + ε) [parameter update]
      θ_t = θ_t - lr * λ * θ_{t-1}                   [decoupled weight decay]
    
    τ (tau): momentum norm clipping threshold — KEY hyperparameter
    """
    def __init__(self, params, lr=3e-4, betas=(0.9, 0.999), eps=1e-8,
                 weight_decay=0.1, tau=1.0):
        defaults = dict(lr=lr, betas=betas, eps=eps,
                       weight_decay=weight_decay, tau=tau)
        super().__init__(params, defaults)
    
    @torch.no_grad()
    def step(self, closure=None):
        loss = None
        if closure is not None:
            with torch.enable_grad():
                loss = closure()
        
        for group in self.param_groups:
            lr = group['lr']
            beta1, beta2 = group['betas']
            eps = group['eps']
            wd = group['weight_decay']
            tau = group['tau']
            
            for p in group['params']:
                if p.grad is None:
                    continue
                
                grad = p.grad
                state = self.state[p]
                
                # Initialize state
                if len(state) == 0:
                    state['step'] = 0
                    state['exp_avg'] = torch.zeros_like(p)
                    state['exp_avg_sq'] = torch.zeros_like(p)
                
                state['step'] += 1
                t = state['step']
                m = state['exp_avg']
                v = state['exp_avg_sq']
                
                # Standard EMA updates
                m.mul_(beta1).add_(grad, alpha=1 - beta1)
                v.mul_(beta2).addcmul_(grad, grad, value=1 - beta2)
                
                # TAMING: clip momentum norm
                m_norm = m.norm(2)
                taming_scale = torch.clamp(tau / m_norm, max=1.0)
                m_tamed = m * taming_scale
                
                # Bias correction
                bc1 = 1 - beta1 ** t
                bc2 = 1 - beta2 ** t
                m_hat = m_tamed / bc1
                v_hat = v / bc2
                
                # Parameter update
                denom = v_hat.sqrt().add_(eps)
                p.addcdiv_(m_hat, denom, value=-lr)
                
                # Decoupled weight decay
                p.mul_(1 - lr * wd)
                
                # Logging hook
                state['momentum_norm'] = m_norm.item()
                state['taming_scale'] = taming_scale.item()
        
        return loss


# ---- 2. EXPERIMENT CONFIGURATION --------------------------
@dataclass
class ExperimentConfig:
    # Model
    model_size: str = "1.3B"          # "1.3B", "7B", "13B"
    n_layers: int = 24
    n_heads: int = 16
    d_model: int = 2048
    d_ff: int = 8192
    vocab_size: int = 32000
    max_seq_len: int = 2048
    
    # Training
    total_steps: int = 20000
    batch_size: int = 1024            # sequences per step
    gradient_accumulation: int = 4
    
    # Optimizer
    optimizer_type: str = "taming"    # "adamw", "taming", "lion", "adamw_lrmatch"
    lr: float = 3e-4
    beta1: float = 0.9
    beta2: float = 0.999
    weight_decay: float = 0.1
    tau: float = 1.0                  # Taming Momentum specific
    
    # Schedule
    warmup_steps: int = 2000
    lr_decay: str = "cosine"
    min_lr_ratio: float = 0.1
    
    # Experiment
    seed: int = 42
    n_seeds: int = 3
    log_interval: int = 100
    eval_interval: int = 500
    checkpoint_steps: List[int] = None
    
    def __post_init__(self):
        if self.checkpoint_steps is None:
            self.checkpoint_steps = [1000, 5000, 10000, 15000, 20000]


# ---- 3. FLOP COUNTER --------------------------------------
class FLOPCounter:
    """Track FLOPs using Chinchilla formula: 6ND per forward-backward."""
    def __init__(self, n_params: int, tokens_per_step: int):
        self.n_params = n_params
        self.tokens_per_step = tokens_per_step
        self.total_flops = 0
        self.flops_per_step = 6 * n_params * tokens_per_step
    
    def step(self):
        self.total_flops += self.flops_per_step
        return self.total_flops
    
    def flops_to_convergence(self, convergence_step: int) -> int:
        return convergence_step * self.flops_per_step


# ---- 4. TRAINING LOOP -------------------------------------
def train(config: ExperimentConfig, model, train_loader, val_loader,
          optimizer, scheduler, flop_counter, run_name: str):
    
    torch.manual_seed(config.seed)
    model.train()
    
    metrics = {
        'train_loss': [], 'val_perplexity': [], 'flops': [],
        'grad_norm': [], 'momentum_norm': [], 'wall_clock': [],
        'taming_scale': []
    }
    
    convergence_step = None
    target_perplexity = None  # Set after AdamW baseline run
    
    import time
    t0 = time.time()
    
    for step, batch in enumerate(train_loader):
        if step >= config.total_steps:
            break
        
        # Forward + backward
        loss = model(batch['input_ids'], labels=batch['labels']).loss
        loss = loss / config.gradient_accumulation
        loss.backward()
        
        if (step + 1) % config.gradient_accumulation == 0:
            # Gradient norm
            grad_norm = nn.utils.clip_grad_norm_(model.parameters(), 1.0)
            
            optimizer.step()
            scheduler.step()
            optimizer.zero_grad()
            
            total_flops = flop_counter.step()
            
            # Collect optimizer internals
            momentum_norms = []
            taming_scales = []
            for group in optimizer.param_groups:
                for p in group['params']:
                    if p in optimizer.state:
                        s = optimizer.state[p]
                        if 'momentum_norm' in s:
                            momentum_norms.append(s['momentum_norm'])
                        if 'taming_scale' in s:
                            taming_scales.append(s['taming_scale'])
            
            if step % config.log_interval == 0:
                metrics['train_loss'].append(loss.item() * config.gradient_accumulation)
                metrics['flops'].append(total_flops)
                metrics['grad_norm'].append(grad_norm.item())
                metrics['wall_clock'].append(time.time() - t0)
                if momentum_norms:
                    metrics['momentum_norm'].append(np.mean(momentum_norms))
                if taming_scales:
                    metrics['taming_scale'].append(np.mean(taming_scales))
                
                wandb.log({
                    'train/loss': metrics['train_loss'][-1],
                    'train/grad_norm': grad_norm.item(),
                    'train/flops': total_flops,
                    'optimizer/momentum_norm_mean': np.mean(momentum_norms) if momentum_norms else 0,
                    'optimizer/taming_scale_mean': np.mean(taming_scales) if taming_scales else 1,
                }, step=step)
            
            if step % config.eval_interval == 0:
                val_ppl = evaluate(model, val_loader)
                metrics['val_perplexity'].append(val_ppl)
                
                # Check convergence
                if target_perplexity is not None and val_ppl <= target_perplexity:
                    if convergence_step is None:
                        convergence_step = step
                
                wandb.log({'val/perplexity': val_ppl}, step=step)
            
            if step in config.checkpoint_steps:
                save_checkpoint(model, optimizer, step, metrics, run_name)
    
    return metrics, convergence_step


# ---- 5. SHARPNESS MEASUREMENT -----------------------------
def measure_sharpness(model, val_loader, n_perturbations=10, epsilon=0.01):
    """SAM-style sharpness: mean perplexity increase under random weight perturbation."""
    base_ppl = evaluate(model, val_loader)
    sharpness_values = []
    
    original_params = {n: p.clone() for n, p in model.named_parameters()}
    
    for _ in range(n_perturbations):
        # Add random perturbation
        with torch.no_grad():
            for p in model.parameters():
                noise = torch.randn_like(p) * epsilon
                p.add_(noise)
        
        perturbed_ppl = evaluate(model, val_loader)
        sharpness_values.append(perturbed_ppl - base_ppl)
        
        # Restore original params
        with torch.no_grad():
            for n, p in model.named_parameters():
                p.copy_(original_params[n])
    
    return np.mean(sharpness_values), np.std(sharpness_values)


# ---- 6. STATISTICAL ANALYSIS ------------------------------
def compute_efficiency_gain(adamw_flops_to_convergence: List[float],
                            taming_flops_to_convergence: List[float]) -> Dict:
    """
    Compute efficiency gain with statistical tests.
    Returns: mean gain, 95% CI, p-value, Cohen's d
    """
    from scipy import stats
    
    gains = [(a - t) / a * 100 for a, t in 
             zip(adamw_flops_to_convergence, taming_flops_to_convergence)]
    
    mean_gain = np.mean(gains)
    std_gain = np.std(gains, ddof=1)
    n = len(gains)
    
    # Paired t-test
    t_stat, p_value = stats.ttest_rel(adamw_flops_to_convergence,
                                       taming_flops_to_convergence)
    
    # Cohen's d
    pooled_std = np.sqrt((np.std(adamw_flops_to_convergence, ddof=1)**2 +
                          np.std(taming_flops_to_convergence, ddof=1)**2) / 2)
    cohens_d = (np.mean(adamw_flops_to_convergence) - 
                np.mean(taming_flops_to_convergence)) / pooled_std
    
    # 95% CI
    ci = stats.t.interval(0.95, df=n-1, loc=mean_gain,
                          scale=stats.sem(gains))
    
    return {
        'mean_gain_pct': mean_gain,
        'std_gain_pct': std_gain,
        'ci_95': ci,
        'p_value': p_value,
        'cohens_d': cohens_d,
        'n_seeds': n,
        'significant': p_value < 0.05 and mean_gain >= 15.0
    }


# ---- 7. MAIN EXPERIMENT RUNNER ----------------------------
def run_full_experiment():
    conditions = [
        ('adamw',        {'optimizer_type': 'adamw'}),
        ('taming',       {'optimizer_type': 'taming', 'tau': 1.0}),
        ('lion',         {'optimizer_type': 'lion'}),
        ('adamw_lrmatch',{'optimizer_type': 'adamw_lrmatch'}),  # ablation
    ]
    
    seeds = [42, 123, 777]
    results = {}
    
    for cond_name, cond_kwargs in conditions:
        results[cond_name] = {'flops_to_convergence': [], 'final_metrics': []}
        
        for seed in seeds:
            run_name = f"{cond_name}_seed{seed}_1.3B"
            config = ExperimentConfig(seed=seed, **cond_kwargs)
            
            wandb.init(project="taming-momentum-validation",
                      name=run_name, config=vars(config))
            
            model = build_model(config)
            optimizer = build_optimizer(model, config)
            scheduler = build_scheduler(optimizer, config)
            train_loader, val_loader = build_dataloaders(config)
            flop_counter = FLOPCounter(
                n_params=count_params(model),
                tokens_per_step=config.batch_size * config.max_seq_len
            )
            
            metrics, convergence_step = train(
                config, model, train_loader, val_loader,
                optimizer, scheduler, flop_counter, run_name
            )
            
            flops_conv = flop_counter.flops_to_convergence(convergence_step or config.total_steps)
            results[cond_name]['flops_to_convergence'].append(flops_conv)
            
            # Benchmark evaluation
            bench_results = run_benchmarks(model, config)
            results[cond_name]['final_metrics'].append(bench_results)
            
            wandb.finish()
    
    # Statistical analysis
    efficiency_stats = compute_efficiency_gain(
        results['adamw']['flops_to_convergence'],
        results['taming']['flops_to_convergence']
    )
    
    print(f"Efficiency gain: {efficiency_stats['mean_gain_pct']:.1f}% "
          f"(95% CI: {efficiency_stats['ci_95'][0]:.1f}–{efficiency_stats['ci_95'][1]:.1f}%)")
    print(f"p-value: {efficiency_stats['p_value']:.4f}, "
          f"Cohen's d: {efficiency_stats['cohens_d']:.2f}")
    print(f"Hypothesis supported: {efficiency_stats['significant']}")
    
    return results, efficiency_stats


# ---- 8. ABORT CHECKPOINT LOGIC ----------------------------
def check_abort_conditions(step: int, metrics: Dict, config: ExperimentConfig) -> Tuple[bool, str]:
    """Return (should_abort, reason)."""
    
    if step >= 1000:
        recent_loss = metrics['train_loss'][-10:]
        if min(recent_loss) > 0.9 * metrics['train_loss'][0]:
            return True, f"ABORT: No convergence by step {step} — loss not decreasing"
    
    if step >= 5000:
        if len(metrics['val_perplexity']) >= 2:
            ppl_trend = metrics['val_perplexity'][-1] - metrics['val_perplexity'][-5]
            if ppl_trend > 5.0:
                return True, f"ABORT: Perplexity diverging at step {step}"
    
    if step >= 2000:
        recent_grad_norms = metrics['grad_norm'][-20:]
        if np.mean(recent_grad_norms) > 10.0:
            return True, f"ABORT: Gradient explosion (mean norm {np.mean(recent_grad_norms):.1f})"
    
    return False, ""


if __name__ == "__main__":
    results, stats = run_full_experiment()
Abort checkpoints:

CHECKPOINT 1 — Step 500 (Day 20, ~2.5% of MVT compute): Condition: Training loss has not decreased by ≥10% from initial value for ANY condition. Action: ABORT ALL RUNS. Diagnose: check data pipeline, tokenization, model initialization, LR. Cost saved if aborted here: ~$7,500 (97.5% of compute budget).

CHECKPOINT 2 — Step 1,000 (Day 21, ~5% of MVT compute): Condition: Taming Momentum loss is ≥5% HIGHER than AdamW loss at matched steps (suggesting instability, not efficiency). Action: PAUSE Taming Momentum runs. Re-examine τ hyperparameter. If τ sweep (3 values, 500 steps each) does not resolve, ABORT Taming Momentum condition. Cost saved if aborted here: ~$7,000.

CHECKPOINT 3 — Step 5,000 (Day 24, ~25% of MVT compute): Condition: Gradient norm variance (CV) for Taming Momentum is NOT lower than AdamW (p>0.2, Levene's test). This tests the core mechanistic claim. Action: FLAG for investigation. Do not abort, but reduce full-validation scope (skip 13B scale). Cost saved if scope-reduced: ~$12,000.

CHECKPOINT 4 — Step 5,000 (Day 24, ~25% of MVT compute): Condition: Projected FLOPs-to-convergence (extrapolated from learning curve slope) shows <5% advantage for Taming Momentum across all 3 seeds. Action: ABORT MVT experiment. Do not proceed to 7B scale. Cost saved if aborted here: ~$5,500.

CHECKPOINT 5 — Step 10,000 (Day 26, ~50% of MVT compute): Condition: Any Taming Momentum seed shows loss spike >2× current loss (gradient explosion). Action: ABORT that seed. If ≥2/3 seeds affected, ABORT condition entirely. Cost saved if aborted here: ~$3,500.

CHECKPOINT 6 — Post-MVT Benchmark Evaluation (Day 38): Condition: Taming Momentum shows ≥15% FLOP efficiency gain BUT benchmark performance is >2% below AdamW. Action: DO NOT PROCEED to 7B scale. Reframe as "efficiency-accuracy tradeoff" rather than Pareto improvement. Investigate whether longer training recovers performance. Cost saved if aborted here: ~$22,000 (full validation budget).

CHECKPOINT 7 — 7B Scale, Step 5,000 (Day 50, ~10% of full-validation compute): Condition: Efficiency gain at 7B is <5% (vs. ≥15% at 1.3B), suggesting scale-dependent failure. Action: ABORT 7B run. Report scale-limited finding. Do not proceed to 13B. Cost saved if aborted here: ~$15,000.

Source

AegisMind Research
Need AI to work rigorously on your problems? AegisMind uses the same multi-model engine for personal and professional use. Get started