summaryrefslogtreecommitdiff
path: root/experiments
diff options
context:
space:
mode:
Diffstat (limited to 'experiments')
-rw-r--r--experiments/analyze_oral_a_failure.py44
1 files changed, 35 insertions, 9 deletions
diff --git a/experiments/analyze_oral_a_failure.py b/experiments/analyze_oral_a_failure.py
index 9f84bbf..bf68d12 100644
--- a/experiments/analyze_oral_a_failure.py
+++ b/experiments/analyze_oral_a_failure.py
@@ -24,12 +24,15 @@ def main():
parser.add_argument(
"--gate", default="results/oral_a_full_gate.json")
parser.add_argument(
+ "--v2_gate", default="results/oral_a_v2_calibration_gate.json")
+ parser.add_argument(
"--out", default="results/oral_a_failure_diagnosis.json")
args = parser.parse_args()
full = load(args.full)
short = load(args.short)
gate = load(args.gate)
+ v2_gate = load(args.v2_gate)
expected = {
"mode": "sdil", "depth": 20, "epochs": 200,
"vectorizer_mode": "channel_gated", "a_scale": 1.0,
@@ -42,6 +45,9 @@ def main():
raise ValueError("full A3 result has tracked source edits")
if gate["status"] != "failed" or gate["confirmation_test_seeds_touched"]:
raise ValueError("expected a failed A3 gate with untouched confirmation")
+ if (v2_gate["status"] != "failed"
+ or v2_gate["confirmation_test_seeds_touched"]):
+ raise ValueError("expected a failed v2 gate with untouched confirmation")
calibration_rows = []
first_nonfinite_epoch = None
@@ -82,9 +88,14 @@ def main():
max_mse_power_gap = max(abs(row["mse_to_target_power"] - 1.0)
for row in calibration_rows)
short_calibration = short["apical_warmup"]["last"]
+ unit = v2_gate["selected"]["unit_targets"]
+ structured = v2_gate["selected"]["channel_subspace"]
output = {
- "protocol": "oral_a_A3_failure_diagnosis_v1",
- "source_paths": {"full": args.full, "short": args.short, "gate": args.gate},
+ "protocol": "oral_a_A3_failure_diagnosis_v2",
+ "source_paths": {
+ "full": args.full, "short": args.short, "gate": args.gate,
+ "v2_gate": args.v2_gate,
+ },
"source_commits": {
"full": full["provenance"]["git_commit"],
"short": short["provenance"]["git_commit"],
@@ -113,17 +124,32 @@ def main():
"max_abs_prediction_target_cosine_before_nonfinite": max_abs_cosine,
"max_abs_mse_to_target_power_minus_one": max_mse_power_gap,
},
+ "post_failure_v2_refinement": {
+ "unit_target_early_third_alignment": (
+ unit["metrics"]["early_third_alignment"]),
+ "unit_target_all_layer_alignment": (
+ unit["metrics"]["all_layer_alignment"]),
+ "structured_early_third_alignment": (
+ structured["metrics"]["early_third_alignment"]),
+ "structured_all_layer_alignment": (
+ structured["metrics"]["all_layer_alignment"]),
+ "structured_gate_status": v2_gate["status"],
+ },
"diagnosis": {
- "classification": "causal_target_not_captured_before_runaway",
+ "classification": "unit_target_regression_snr_inadequate_before_runaway",
"evidence": [
- "prediction-target cosine remains effectively zero",
- "calibration MSE remains indistinguishable from target power",
+ "instantaneous prediction-target cosine remains effectively zero",
+ "calibration MSE remains indistinguishable from stochastic target power",
"target power grows by orders of magnitude before nonfiniteness",
- "short-run teaching alignment therefore cannot be attributed to learned A",
+ "matched frozen-forward unit targets later yield only 0.0011 early-layer alignment",
],
- "next_test": (
- "reduce estimator variance by perturbing the representable "
- "channel-gated feedback subspace, not every spatial unit"),
+ "interpretation_limit": (
+ "instantaneous target metrics alone do not prove zero conditional "
+ "learning; structured v2 has low instantaneous cosine yet positive "
+ "exact-gradient alignment"),
+ "next_test_outcome": (
+ "representable-subspace perturbation improved exact alignment but "
+ "failed the frozen early-layer causal-capture gate"),
},
}
os.makedirs(os.path.dirname(os.path.abspath(args.out)), exist_ok=True)