Spaces:
Sleeping
Sleeping
File size: 5,938 Bytes
d46bde8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | # ~/mlpa/training_evaluation/config.py
# Last Modified: 2026-02-09
# + NOISE_AMP = 0.07
# + coupling_prior_lambda = 0.12 # Slight boost for stability
# + speed_uniform_lambda = 18.0 # To counter potential std increase
# + inharm_l2_lambda = 18.0 # Mild increase to suppress leakage
# + inharm_ceiling_lambda = 500.0 # Stronger ceiling for robustness
# + ROLLOUT_HORIZON = 30000 # Better candidate eval at high noise
# + damping_prior_lambda = 12.0 # Stricter success rate
import torch
import os
os.makedirs('plots', exist_ok=True)
os.makedirs('viz_frames', exist_ok=True)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# === Geometry ===
DIM = 60
K_MODES = 8 # 8
N_POINTS = 400 # 200
TIMES = torch.linspace(-2.0, 2.0, N_POINTS, device=device)
IDEAL_HARMONICS = torch.arange(1, K_MODES + 1, device=device).float()
# === True physics ===
TRUE_DAMPING_RATES = torch.tensor([0.05, 0.07, 0.10, 0.15, 0.20, 0.30, 0.40, 0.50], device=device)
TRUE_INHARM_B = torch.tensor([0.0, 0.0, 0.0, 0.00005, 0.0001, 0.0002, 0.0004, 0.0006], device=device)
TRUE_COUPLING_STRENGTH = 0.30
VELOCITY_SCALE_BASE = 2.0
DATA_SEED = 42
# === Hyperparameters ===
# update from tuner output here
coupling_prior_lambda = 0.10
speed_uniform_lambda = 12.0 # 10.0 | For flatter speed scalars at higher noise→ 12–15 | 7-7-26 17:34
damping_prior_lambda = 8.0
inharm_l2_lambda = 15.0 # 3.0 |
inharm_ceiling_lambda = 400.0 # 200.0 |
inharm_ceiling_threshold = 0.002
# === Training ===
MAX_STEPS = 100000 # Increased to give more post-jump optimization time
# === Population-based punctuated equilibrium ===
MAX_JUMPS = 20 # Allow many escapes (real runs use ~5–20; safety cap)
INCLUDE_ZERO_JUMP = True # Always keep the no-noise baseline as a candidate
JUMP_STD_MIN = 3.0 # stronger baseline kicks
JUMP_STD_MAX = 10.0 # more punch when deeply stuck
POP_SIZE = 20 # more candidates → better chance of strong escape
ROLLOUT_HORIZON = 5000 # 30000 | longer evaluation of candidates
# === Entropic selection schedule ===
ENTROPIC_START_TEMP = 0.2 # Less exploration early, was 1.5 Higher early temperature → more exploration in first jumps
ENTROPIC_DECAY = 0.85 # Faster to greedy, was 0.85 Slower decay → stays somewhat explorative longer
ENTROPIC_MIN_TEMP = 0.0005 # Almost pure greedy late, was 0.01 Near-greedy late-game but still tiny randomness
# === Stagnation detection ===
STAGNATION_PATIENCE = 5000 # 5000 Jump sooner → prevent deep entrapment
BASE_STAGNATION_THRESHOLD_LOW = 1e-6
MIN_STEP_FOR_JUMP_CHECK = 15000 # 20000 for aggressive testing
# === Runtime defaults ===
NUM_SEEDS = 1 # increase for full sweeps
NOISE_AMP = 0.06
FORCE_PUNCTUATED = None
# === Success criteria ===
# unchanged — goal is reliable strict
STRICT_MAX_INHARM = 0.005
STRICT_SPEED_STD = 0.01
STRICT_COUPLING_ERR = 0.05
STRICT_GEO_DIST = 0.3
STRICT_DAMPING_RMSE = 0.05
STRICT_DAMPING_CORR = 0.95
STRICT_FREQ_CORR = 0.98
STRICT_FREQ_RMSE = 5.0
LOOSE_MAX_INHARM = 0.01
LOOSE_SPEED_STD = 0.05
# === Curriculum staging ===
# LR scheduling — unchanged, still solid
STAGE1_STEPS = 250000
STAGE1_LR_GEO = 0.18 # 0.16 |
STAGE1_LR_SLOW = 0.0001
STAGE2_STEPS = 500000
STAGE2_LR_GEO = 0.14 # 0.15 |
STAGE2_LR_SLOW = 0.02
STAGE3_STEPS = 750000
STAGE3_LR_GEO = 0.10 # 0.12 |
STAGE3_LR_SLOW = 0.12
# Speed / parallelism toggles (highly recommended ON)
USE_AMP = True
USE_PARALLEL_ROLLOUTS = True
PARALLEL_MAX_WORKERS = 20 # max: 24 for nvidia 4090 |
# === Smith chart inspired experimental features ===
RECIPROCAL_NOISE = True # Admittance-style reciprocal perturbation on slow params
USE_SWR_SELECTION = True # Use SWR-based scoring for physically-biased candidate selection
TANGENT_PROJECT_AFTER_NOISE = True # Project vel_dir_raw (and optionally coupling) back to tangent space after noiseroject vel_dir_raw back to tangent space after noise
RECIPROCAL_STRENGTH = 0.5 # Strength for reciprocal noise (gentler flips)
SWR_BEST_LOSS_EST = 0.12 # 0.15 Optimistic "characteristic impedance" (tune downward from best observed loose losses), was 0.03
# === Fisher-Rao extensions (Phase 1–2) ===
# Prop 3.3 damping envelope invariant (log_base_rate, log_slope vs target spectrum)
fr_invariant_weight = 0.3
fr_invariant_damping = 1.0
# Phase 2: rotation / scale invariants on coupling, speed, inharmonicity
fr_invariant_coupling = 0.5
fr_invariant_coupling_strength_weight = 0.1
fr_invariant_speed = 0.25
fr_invariant_inharm = 0.25
# Phase 3: piptrack modal amp pair invariant (Prop 3.3 on log-amp profiles)
fr_invariant_modal = 0.4
# Simplex Fisher-Rao on modal distributions (separate from pair invariant)
fr_mode_weight = 0.0
fr_spectral_weight = 0.0
REAL_AUDIO_FR_MODE_WEIGHT = 0.2
# Phase 4: drop redundant MSE prior terms when matching invariant is active
fr_replace_mse_priors = True
# === Real-audio extension ===
REAL_AUDIO_MAX_STEPS = 20000
REAL_AUDIO_STFT_WEIGHT = 0.5
REAL_AUDIO_STFT_FFT_SIZES = [512, 1024, 2048]
REAL_AUDIO_STFT_HOP_RATIO = 0.25
REAL_AUDIO_SR = 44100
# Real-audio punctuated equilibrium (shorter patience than synthetic)
REAL_AUDIO_STAGNATION_PATIENCE = 1500
REAL_AUDIO_MIN_STEP_FOR_JUMP = 2000
REAL_AUDIO_MAX_JUMPS = 10
REAL_AUDIO_ROLLOUT_HORIZON = 2000
REAL_AUDIO_POP_SIZE = 12
REAL_AUDIO_JUMP_STD_MIN = 2.0
REAL_AUDIO_JUMP_STD_MAX = 7.0
# Streaming partial tracker
STREAM_HOP_LENGTH = 256
STREAM_N_FFT = 1024
STREAM_CHUNK_SECONDS = 0.05
# GPU streaming STFT (sub-10ms target)
GPU_STFT_N_FFT = 512
GPU_STFT_HOP = 128
# Jump testing toggles (real-audio debug)
JUMP_TEST_LOW_PATIENCE = 300
JUMP_TEST_MIN_STEP = 500
JUMP_TEST_FORCE_EVERY = 800
JUMP_TEST_PLATEAU_AT = 600
# Live microphone
LIVE_MIC_BLOCKSIZE = 1024
LIVE_MIC_DEFAULT_SECONDS = 5.0 |