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.

Informações da origem

Repositório
Cuki2910/M2G-NET
Última atividade na origem
14 de maio de 2026 às 17:58
Idioma detectado do SKILL.md
inglês
Estrelas
2
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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/` |
Ver no GitHub