summaryrefslogtreecommitdiff
path: root/experiments/analyze_oral_a_failure.py
diff options
context:
space:
mode:
Diffstat (limited to 'experiments/analyze_oral_a_failure.py')
-rw-r--r--experiments/analyze_oral_a_failure.py33
1 files changed, 28 insertions, 5 deletions
diff --git a/experiments/analyze_oral_a_failure.py b/experiments/analyze_oral_a_failure.py
index ce2e2b0..03549b8 100644
--- a/experiments/analyze_oral_a_failure.py
+++ b/experiments/analyze_oral_a_failure.py
@@ -29,6 +29,8 @@ def main():
"--representation",
default="results/oral_a_representation_diagnosis.json")
parser.add_argument(
+ "--v3_gate", default="results/oral_a_v3_calibration_gate.json")
+ parser.add_argument(
"--out", default="results/oral_a_failure_diagnosis.json")
args = parser.parse_args()
@@ -37,6 +39,7 @@ def main():
gate = load(args.gate)
v2_gate = load(args.v2_gate)
representation = load(args.representation)
+ v3_gate = load(args.v3_gate)
expected = {
"mode": "sdil", "depth": 20, "epochs": 200,
"vectorizer_mode": "channel_gated", "a_scale": 1.0,
@@ -54,6 +57,9 @@ def main():
raise ValueError("expected a failed v2 gate with untouched confirmation")
if representation["probe"]["test_examples_touched"] != 0:
raise ValueError("representation diagnosis touched test examples")
+ if (v3_gate["status"] != "failed"
+ or v3_gate["confirmation_test_seeds_touched"]):
+ raise ValueError("expected a failed v3 gate with untouched confirmation")
calibration_rows = []
first_nonfinite_epoch = None
@@ -97,10 +103,11 @@ def main():
unit = v2_gate["selected"]["unit_targets"]
structured = v2_gate["selected"]["channel_subspace"]
output = {
- "protocol": "oral_a_A3_failure_diagnosis_v2",
+ "protocol": "oral_a_A3_failure_diagnosis_v3",
"source_paths": {
"full": args.full, "short": args.short, "gate": args.gate,
"v2_gate": args.v2_gate, "representation": args.representation,
+ "v3_gate": args.v3_gate,
},
"source_commits": {
"full": full["provenance"]["git_commit"],
@@ -154,6 +161,19 @@ def main():
representation["cosine"]["local_context_cv"]
["early_third_mean"]),
},
+ "post_failure_v3_refinement": {
+ "vectorizer_subspace_early_third_alignment": (
+ v3_gate["selected_v3"]["metrics"]["early_third_alignment"]),
+ "vectorizer_subspace_all_layer_alignment": (
+ v3_gate["selected_v3"]["metrics"]["all_layer_alignment"]),
+ "matched_v2_early_third_alignment": (
+ v3_gate["matched_v2_reference"]["metrics"]
+ ["early_third_alignment"]),
+ "matched_v2_all_layer_alignment": (
+ v3_gate["matched_v2_reference"]["metrics"]
+ ["all_layer_alignment"]),
+ "vectorizer_subspace_gate_status": v3_gate["status"],
+ },
"diagnosis": {
"classification": (
"early_credit_limited_by_estimator_efficiency_and_feedback_capacity"),
@@ -164,18 +184,21 @@ def main():
"matched frozen-forward unit targets later yield only 0.0011 early-layer alignment",
"structured learning reaches 0.0072 versus a 0.0240 cross-validated family oracle",
"unconstrained coefficients raise the same spatial basis oracle only to 0.0549",
+ "direct A/G estimation leaves early alignment unchanged at 0.0071",
],
"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"),
+ "representable-subspace perturbation improved alignment but failed; "
+ "direct vectorizer-space estimation then improved only middle/late "
+ "layers and also failed the frozen early-layer gate"),
"next_design_constraint": (
"do not add the tested naive local-average/channel-mean bases; "
- "improve causal sample efficiency and use a more informative "
- "hierarchical or high-level contextual feedback signal"),
+ "do not repeat the closed A/G rate grid; use a more informative "
+ "hierarchical or high-level contextual feedback signal and "
+ "audit remaining cross-layer noise"),
},
}
os.makedirs(os.path.dirname(os.path.abspath(args.out)), exist_ok=True)