summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RAIN_EP_RELEASED_PROFILE.md15
-rwxr-xr-xexperiments/rain_ep_centered_r1.sh66
2 files changed, 81 insertions, 0 deletions
diff --git a/RAIN_EP_RELEASED_PROFILE.md b/RAIN_EP_RELEASED_PROFILE.md
index 1b46f1e..c5bed5e 100644
--- a/RAIN_EP_RELEASED_PROFILE.md
+++ b/RAIN_EP_RELEASED_PROFILE.md
@@ -66,3 +66,18 @@ had a slightly lower residual (`7.42e-3` versus `7.55e-3`) but lower accuracy
so R0 is ambiguous negative development evidence and is not promoted. The
stable centered-EP backbone identified by C0 is required before further task
confirmation.
+
+The paper-facing decision is based on downstream accuracy, not residual-bias
+diagnostics. Reinterpreted on that basis, R0 supplies one positive cadence
+(49.9% affine versus 44.8% intercept at cadence 10) and one negative cadence
+(47.1% versus 48.4% at cadence 50). This cadence sensitivity and the single
+unstable positive-EP run make R0 inconclusive rather than a mechanism gate.
+
+## R1 centered-EP screen
+
+R1 freezes cadence 10 from the only positive R0 downstream comparison and
+moves to the stable centered estimator. On the same 10,000/2,000 development
+split, one epoch compares centered clean, fixed raw/intercept/SDIL, released-
+profile raw/intercept/SDIL, and a released-profile oracle. Downstream holdout
+accuracy is the only selection endpoint. Residual diagnostics are retained
+only to catch implementation errors.
diff --git a/experiments/rain_ep_centered_r1.sh b/experiments/rain_ep_centered_r1.sh
new file mode 100755
index 0000000..7f4af27
--- /dev/null
+++ b/experiments/rain_ep_centered_r1.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT=/home/yurenh2/sdil
+AUTHOR=/scratch/yurenh2/energy-based-learning
+PYTHON=/scratch/yurenh2/venvs/burstccn/bin/python
+PROFILE="$ROOT/results/physical_bias/p0_state_dependence.json"
+OUT="$ROOT/results/ep_bias/centered_r1"
+mkdir -p "$OUT"
+cd "$AUTHOR"
+
+run_cell() {
+ local gpu=$1
+ local tag=$2
+ local mode=$3
+ local cadence=$4
+ local profile=$5
+ local profile_args=()
+ if [ "$profile" = released ]; then
+ profile_args=(--dillavou-profile-json "$PROFILE")
+ fi
+ CUBLAS_WORKSPACE_CONFIG=:4096:8 CUDA_VISIBLE_DEVICES="$gpu" "$PYTHON" \
+ "$ROOT/experiments/rain_ep_bias_train.py" \
+ --author-root "$AUTHOR" --device cuda \
+ --adapter dillavou --network-protocol comparative32 \
+ --beta-policy centered --beta-value 0.25 \
+ --mode "$mode" --bias-ratio 1 --dillavou-drift-ratio 0 \
+ "${profile_args[@]}" --predictor-rate 1 \
+ --dillavou-calibration-steps 1 --neutral-cadence "$cadence" \
+ --epochs 1 --schedule-epochs 100 \
+ --train-limit 10000 --test-limit 2000 --batch-size 128 \
+ --training-iterations 15 --inference-iterations 60 \
+ --evaluation-split train_holdout --data-seed 6200 \
+ --seed 1988 --beta-seed 7100 --deterministic \
+ --output "$OUT/$tag.json" > "$OUT/$tag.log" 2>&1
+}
+
+run_cell 0 centered_clean clean 0 constant &
+run_cell 1 fixed_raw raw 0 constant &
+run_cell 2 fixed_intercept constant 0 constant &
+run_cell 3 fixed_sdil innovation 0 constant &
+run_cell 4 profile_raw raw 0 released &
+run_cell 5 profile_intercept_c10 constant 10 released &
+run_cell 6 profile_sdil_c10 innovation 10 released &
+run_cell 7 profile_oracle oracle 0 released &
+wait
+
+"$PYTHON" - "$OUT" <<'PY'
+import json
+from pathlib import Path
+import sys
+
+root = Path(sys.argv[1])
+summary = {}
+for path in sorted(root.glob("*.json")):
+ if path.name == "summary.json":
+ continue
+ report = json.loads(path.read_text())
+ summary[path.stem] = {
+ "holdout_accuracy": report["final"]["test_accuracy"],
+ "finite": report["final"]["finite"],
+ "wall_seconds": report["final"]["wall_seconds"],
+ }
+(root / "summary.json").write_text(json.dumps(summary, indent=2) + "\n")
+print(json.dumps(summary, indent=2))
+PY