Skip to main content

math-validator

Validate that M2G-NET code (src/fusion.py, src/model.py, src/interaction.py) matches the documented math in docs/MATHEMATICAL_FORMULAS.md. Use whenever editing model architecture, loss, gate computation, calibration, or metrics.

Quellinformationen

Repository
Cuki2910/M2G-NET
Letzte Quellaktivität
14. Mai 2026 um 17:58
Erkannte Sprache von SKILL.md
Englisch
Sterne
3
Forks
0

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
math-validator
description
Validate that M2G-NET code (src/fusion.py, src/model.py, src/interaction.py) matches the documented math in docs/MATHEMATICAL_FORMULAS.md. Use whenever editing model architecture, loss, gate computation, calibration, or metrics.
tags
["m2g-net","math","validation","fusion","model"]
version
1.0.0
user-invocable
true
allowed-tools
["Bash","Read","Grep"]
# Math Validator — M2G-NET Structural cross-check between `docs/MATHEMATICAL_FORMULAS.md` (the specification) and `src/` (the implementation). Produces a pass/fail report with specific mismatches. ## When to Use - After editing `src/fusion.py`, `src/model.py`, `src/interaction.py`, or `src/loss.py` - When adding or modifying a loss term, gate weight, or calibration step - When translating a new formula from the paper into code - Before submitting any commit that touches model math --- ## Validation Workflow ### Step 1 — Load the specification ``` Read("docs/MATHEMATICAL_FORMULAS.md") ``` Extract and list every named formula with its: - Symbol and domain (e.g., `g_k ∈ ℝ^V`, sparsemax output) - Tensor shape contract (e.g., `[batch, V]` → `[batch, K, V]`) - Key operations (softmax vs. sparsemax, temperature, masking) ### Step 2 — Map formulas to code | Formula section | File to check | |----------------|--------------| | §1 View Encoding `h_i = f_i(x_i)` | `src/views.py` | | §2 Site-Aware Representation | `src/views.py` (site embedding block) | | §3 Cross-Level Interaction | `src/interaction.py` | | §4 Gated Fusion (sparsemax, prior smoothing) | `src/fusion.py` — `ResidualGatedFusion`, `RegularizedTaskGate` | | §5 Multi-Task Loss + mask `m_k` | `src/loss.py` | | §6 Temperature Scaling / Calibration | `src/calibration.py` | | Metrics (ROC-AUC, ECE) | `src/metrics.py` | ### Step 3 — Run the automated check ```bash python scripts/verify_math.py ``` This script checks tensor shapes and key invariants. Review its output first before doing manual inspection. ### Step 4 — Manual spot-checks (for each changed formula) For each formula that was modified, verify: 1. **Shape contract**: Do tensor dimensions match the formula subscripts? - e.g., gate weights `g` should be `[batch, K, V]` if formula says `g_k ∈ ℝ^V` per task 2. **Operation identity**: Is the implementation using the right operation? - sparsemax ≠ softmax — check import and call site in `src/fusion.py` - Temperature scaling: is `τ` applied before or after the gate? 3. **Mask correctness**: Is `m_k^(n)` applied correctly in the loss? - Loss should be zeroed for unobserved labels, not included in mean 4. **Prior smoothing**: Gate prior `π` should blend uniformly, not collapse weights - Check `gate_prior_strength` parameter in `RegularizedTaskGate` 5. **Out-of-site mode**: When site ID is unknown, `h_rand = 0` (zeroed embedding) - Verify in `src/views.py` site-aware block ### Step 5 — Concrete numerical check (for critical changes) When changing loss, calibration, or gate computation, run a sanity check with known values: ```bash python -c " import torch from src.fusion import RegularizedTaskGate # Smoke test: uniform input should produce near-uniform gate weights gate = RegularizedTaskGate(num_views=5, num_tasks=4) x = torch.zeros(2, 128) # batch=2, hidden=128 g = gate(x) print('Gate shape:', g.shape) # expect [2, 4, 5] print('Gate sum per task:', g.sum(dim=-1)) # expect ~1.0 per task (sparsemax) " ``` --- ## Output Format After completing Steps 1–5, report as: ```markdown ## Math Validation Report **Formula sections checked**: [list] **Files inspected**: [list] **verify_math.py result**: PASS / FAIL (paste relevant output) ### Findings | Formula | Code location | Status | Note | |---------|--------------|--------|------| | Sparsemax gate g_k | src/fusion.py:L42 | ✅ PASS | Shape [B,K,V] correct | | Loss mask m_k | src/loss.py:L18 | ⚠️ WARN | Mean includes masked zeros | | Temperature τ | src/calibration.py:L31 | ✅ PASS | Applied post-logit | ### Action Required [List any FAIL or WARN items with specific fix] ``` --- ## Key Invariants to Never Violate | Invariant | Where enforced | |-----------|---------------| | sparsemax (not softmax) for gate weights | `src/fusion.py` | | Gate weights sum to ≤ 1 per task (sparse) | sparsemax property | | Loss masked by `m_k` — never average over unobserved | `src/loss.py` | | `h_rand = 0` for unknown sites | `src/views.py` | | Temperature `τ > 0` enforced (softplus or clamp) | `src/fusion.py` | | `docs/MATHEMATICAL_FORMULAS.md` is source of truth | All of `src/` |
Auf GitHub ansehen