{
  "claim": "Every number RelateAnything states about its own weights, checked against the three released checkpoints by reading model.pth directly — parameter counts, the predicate-routing gate, the score scale, the training mixture. Nine of twelve reproduce. Two are rounded past what the weights say. One — the routing buffer the checkpoint ships — is not what the checkpoint's own gate computes.",
  "method": "model.pth for maelic/relsgg-vits16{,plus} and relsgg-vitb16 downloaded from the Hub and unpickled without torch (zipfile + a custom pickle.Unpickler that stubs _rebuild_tensor_v2, reading each storage out of archive/data/<key> as float32). alpha recomputed in float64 as sigmoid(gate_mlp(normalize(W))) with an erf GELU. AUC is the exact rank statistic over the 15 spatial-flagged and 228 unflagged strings of predicate_bank.npz.",
  "source": "https://huggingface.co/maelic/relsgg-vits16plus",
  "captured": "2026-09-18",
  "columns": [
    { "key": "quantity", "label": "quantity" },
    { "key": "claimed", "label": "claimed", "align": "right" },
    { "key": "measured", "label": "measured from the weights", "align": "right" },
    { "key": "verdict", "label": "" }
  ],
  "rows": [
    {
      "quantity": "params, ViT-S/16 tower",
      "claimed": "46.1M",
      "measured": "46,139,281",
      "verdict": "holds"
    },
    {
      "quantity": "params, ViT-S/16+ (released)",
      "claimed": "53.2M",
      "measured": "53,235,601",
      "verdict": "holds"
    },
    {
      "quantity": "params, ViT-B/16 tower",
      "claimed": "113.8M",
      "measured": "113,797,393",
      "verdict": "holds"
    },
    {
      "quantity": "tensors on disk, ViT-S/16+",
      "claimed": "not stated",
      "measured": "63,035,440",
      "verdict": "9,780,736 of them are the 19,103x512 vocabulary bank, plus its 19,103 routing weights — buffers, not learned params"
    },
    {
      "quantity": "predicate bank width",
      "claimed": "19,103 strings",
      "measured": "19,103",
      "verdict": "holds"
    },
    {
      "quantity": "gate alpha, median over the bank",
      "claimed": "0.002",
      "measured": "0.0028",
      "verdict": "holds"
    },
    {
      "quantity": "gate alpha, share above 0.5",
      "claimed": "12%",
      "measured": "12.48% (2,385 / 19,103)",
      "verdict": "holds"
    },
    {
      "quantity": "gate alpha, \"behind\" / \"below\" / \"on\"",
      "claimed": "1.000 / 0.9998 / 0.64",
      "measured": "1.0000 / 0.9998 / 0.6381",
      "verdict": "holds"
    },
    {
      "quantity": "gate alpha, \"carrying\"",
      "claimed": "0.0004",
      "measured": "0.0775",
      "verdict": "off by 190x; no released tower reproduces it (0.0536 / 0.0775 / 0.1380)"
    },
    {
      "quantity": "subject/object compose gate, trained range",
      "claimed": "0.014-0.044",
      "measured": "0.0141-0.0485",
      "verdict": "the top of the range is 0.049, not 0.044"
    },
    {
      "quantity": "vocab_head.alpha buffer vs. the gate that produced it",
      "claimed": "same quantity",
      "measured": "r = 0.53, max |diff| = 0.998",
      "verdict": "the shipped buffer is not what the shipped gate computes; every consumer recomputes, so it is inert"
    },
    {
      "quantity": "separation of the corpus spatial flag (243-string bank)",
      "claimed": "the gate is unsupervised",
      "measured": "trained gate AUC 0.959, shipped buffer AUC 1.000",
      "verdict": "an AUC of exactly 1.0 against the flag the warm-start probe was fitted on"
    },
    {
      "quantity": "vocab_head.logit_scale / logit_bias",
      "claimed": "\"received no gradient ... bit-identical to init\" (docs/pitfalls.md)",
      "measured": "log-scale 2.7348 (init log 5 = 1.6094), bias -4.6971 (init 0)",
      "verdict": "both trained in all three released towers"
    },
    {
      "quantity": "training mixture, per image",
      "claimed": "72.7 / 6.3 / 21.0",
      "measured": "0.7274 / 0.063 / 0.2096",
      "verdict": "holds — training/configs/relsgg-vits16plus.json and train.sh agree"
    }
  ],
  "note": "The three towers share one vocabulary bank byte-for-byte (19,103 x 512 float32 = 9,780,736 values in each checkpoint), which is why the same 9.8M offset separates the file size from the stated parameter count in all three. The buffer row is a defect in the artifact, not in the model: relsgg/model/vocab_head.py recomputes alpha inside set_vocabulary_matrix(), and the 243-row deployment bank shipped beside the weights matches the recomputation to 5.9e-05."
}
