From 8f8cbb14ddf233e9a8ec79bc7aff5746d40bb7db Mon Sep 17 00:00:00 2001 From: pikaliov Date: Sat, 25 Apr 2026 05:57:14 +0300 Subject: [PATCH] Diagnostic baseline v2: also disable MoCo queue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mutex-only run still collapsed at epoch 1 — same pattern as the DSS run. Val loss locks to log(8) ≈ 2.08 (uniform over the in-batch sat), train loss grows monotonically (4.80 → 5.56), train R@1 drops 7.79% → 0.34%. Mode collapse, not sampler-induced. The smoking gun is the queue: WeightedInfoNCELoss (the OLD-run loss) silently ignored `queue_negatives`, so the OLD-run effective task was in-batch-only contrast against 8 negatives. Switching to InfoNCELoss made the queue active — 4096 stale embeddings without a momentum encoder to keep them consistent with the live model. With the trimmed adapter surface (MONA in last 12/24 blocks → 3.5M trainable), the model can't reconcile fresh representations against stale negatives and collapses. Disable the queue entirely (`neg_bank_size = 0`). Matches OLD's effective setup — same 8 in-batch negatives, but with the new SymmetricInfoNCE + mutex sampler + tau clamp 0.1 + per-sample mask + full-gallery eval. Output → `out/gtauav/baseline_inbatch` (separate from the failed mutex run). Co-Authored-By: Claude Opus 4.7 (1M context) --- conf/gtauav_baseline.gin | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/conf/gtauav_baseline.gin b/conf/gtauav_baseline.gin index 26ae7e3..7646f1b 100644 --- a/conf/gtauav_baseline.gin +++ b/conf/gtauav_baseline.gin @@ -13,9 +13,16 @@ include 'conf/gtauav_balanced.gin' TrainConfigGTAUAV.baseline_mode = True -TrainConfigGTAUAV.output_dir = "out/gtauav/baseline_mutex" +TrainConfigGTAUAV.output_dir = "out/gtauav/baseline_inbatch" TrainConfigGTAUAV.use_gradcam = False # ---- Diagnostic overrides ---- -TrainConfigGTAUAV.sampler_type = "mutex" # was "dss" — disable hard-batch construction -InfoNCELoss.hard_mining_k = 0 # was 512 — use full queue without per-query top-K +# Previous mutex-only run still collapsed at epoch 1 (val loss locked at log(8)). +# Hypothesis refined: the MoCo-style queue stays stale because we have no +# momentum encoder, and with reduced trainable surface (MONA-12) the model +# can't reconcile fresh representations against 4096 stale negatives — +# mode collapse. Disable the queue entirely so InfoNCE sees only the 8 +# fresh in-batch negatives, matching the OLD run's effective setup. +TrainConfigGTAUAV.sampler_type = "mutex" # was "dss" +TrainConfigGTAUAV.neg_bank_size = 0 # was 4096 — disable MoCo queue (no momentum encoder) +InfoNCELoss.hard_mining_k = 0 # was 512 — irrelevant when queue is empty