{
  "schemaVersion": 1,
  "slug": "r1-training",
  "title": "See what changes during reasoning post-training",
  "className": "ToyGRPO",
  "question": "What changes in the learning process while the base architecture stays the same?",
  "description": "Separate R1-Zero, R1’s four stages and supervised distillation; inspect a reproducible toy GRPO objective beside the process explanation.",
  "category": "Language milestones",
  "tags": [
    "DeepSeek-R1",
    "GRPO",
    "Reinforcement learning",
    "Post-training",
    "Distillation"
  ],
  "curator": "TensorViz",
  "attribution": "Original TensorViz teaching example. PyTorch provides the underlying operators.",
  "license": "No separate redistribution license has been declared for these project examples.",
  "limitations": "A toy objective and paper-described process, not DeepSeek-V3/R1 weights, architecture or a reproduction of reasoning training. The four-candidate group is fixed and enumerated; a real GRPO trainer samples responses from its old policy and handles variable token lengths. No critic, language generation, benchmark result or SFT dataset is included. The numerical batch is independent of the highlighted historical stage. Distilled models in the paper use supervised fine-tuning, without a further RL stage.",
  "openingStep": "advantages",
  "provenance": {
    "capturedAt": "2026-09-17T07:02:39.684264+00:00",
    "productRevision": "cf0ab1c9c58c1dc640235b742fa032cade00b43c",
    "sourceSha256": "5afc1a480ea9332bf34dcbe39f192d39a06267193c57807498da933d97fba721",
    "python": "3.13.13",
    "torch": "2.7.1",
    "execution": {
      "inputs": {
        "args": [
          {
            "shape": [
              1,
              3
            ],
            "dtype": "float32",
            "fill": "randn"
          },
          {
            "shape": [
              4
            ],
            "dtype": "int64",
            "fill": "ones"
          },
          {
            "shape": [
              4
            ],
            "dtype": "float32",
            "fill": "randn"
          }
        ]
      },
      "device": "cpu",
      "mode": "eval",
      "seed": 0,
      "deterministic": true
    },
    "outcome": "passed",
    "outputShape": [
      1
    ],
    "method": "TensorViz multifile projection and isolated execution worker",
    "scope": "Toy four-choice, one-prompt GRPO objective with frozen old/reference policies. Advantage invariants, clipping values/gradients, sampled KL penalty and one SGD update checks. Editorial process stages describe the original 2025 paper; no language generation.",
    "numericalChecks": [
      "Group advantages center rewards, preserve reward shifts/scales and vanish for equal rewards",
      "Clipping handles positive and negative advantages with the expected saturated and unsaturated gradients",
      "The sampled reference penalty is nonnegative and zero for identical policies",
      "One toy GRPO update increases the best-rewarded completion probability while old/reference policies remain frozen"
    ]
  },
  "layers": [
    {
      "id": "input",
      "label": "input",
      "op": "Input",
      "kind": "input",
      "parent": null,
      "params": {
        "shape": "1,3,224,224"
      }
    },
    {
      "id": "policy",
      "label": "policy",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 46,
        "endLine": 46
      }
    },
    {
      "id": "old_policy",
      "label": "old_policy",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 47,
        "endLine": 47
      }
    },
    {
      "id": "reference_policy",
      "label": "reference_policy",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 48,
        "endLine": 48
      }
    },
    {
      "id": "advantages",
      "label": "advantages",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 55,
        "endLine": 55
      }
    },
    {
      "id": "ratio",
      "label": "ratio",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 56,
        "endLine": 56
      }
    },
    {
      "id": "clipped",
      "label": "clipped",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 57,
        "endLine": 57
      }
    },
    {
      "id": "divergence",
      "label": "divergence",
      "op": "Module",
      "kind": "module",
      "parent": null,
      "params": {},
      "source": {
        "line": 58,
        "endLine": 58
      }
    },
    {
      "id": "sub@ToyGRPO#0",
      "label": "sub@ToyGRPO#0",
      "op": "torch.sub",
      "kind": "layer",
      "parent": null,
      "params": {},
      "source": {
        "line": 68,
        "endLine": 68
      }
    },
    {
      "id": "output",
      "label": "output",
      "op": "Output",
      "kind": "output",
      "parent": null,
      "params": {}
    },
    {
      "id": "policy.logits",
      "label": "policy.logits",
      "op": "Linear",
      "kind": "layer",
      "parent": "policy",
      "params": {
        "in_features": 3,
        "out_features": 4
      },
      "source": {
        "line": 15,
        "endLine": 15
      }
    },
    {
      "id": "policy.log_probabilities",
      "label": "policy.log_probabilities",
      "op": "LogSoftmax",
      "kind": "layer",
      "parent": "policy",
      "params": {},
      "source": {
        "line": 16,
        "endLine": 16
      }
    },
    {
      "id": "old_policy.logits",
      "label": "old_policy.logits",
      "op": "Linear",
      "kind": "layer",
      "parent": "old_policy",
      "params": {
        "in_features": 3,
        "out_features": 4
      },
      "source": {
        "line": 15,
        "endLine": 15
      }
    },
    {
      "id": "old_policy.log_probabilities",
      "label": "old_policy.log_probabilities",
      "op": "LogSoftmax",
      "kind": "layer",
      "parent": "old_policy",
      "params": {},
      "source": {
        "line": 16,
        "endLine": 16
      }
    },
    {
      "id": "reference_policy.logits",
      "label": "reference_policy.logits",
      "op": "Linear",
      "kind": "layer",
      "parent": "reference_policy",
      "params": {
        "in_features": 3,
        "out_features": 4
      },
      "source": {
        "line": 15,
        "endLine": 15
      }
    },
    {
      "id": "reference_policy.log_probabilities",
      "label": "reference_policy.log_probabilities",
      "op": "LogSoftmax",
      "kind": "layer",
      "parent": "reference_policy",
      "params": {},
      "source": {
        "line": 16,
        "endLine": 16
      }
    },
    {
      "id": "python@ratio#0",
      "label": "python@ratio#0",
      "op": "Python",
      "kind": "layer",
      "parent": "ratio",
      "params": {},
      "source": {
        "line": 29,
        "endLine": 29
      }
    },
    {
      "id": "python@clipped#0",
      "label": "python@clipped#0",
      "op": "Python",
      "kind": "layer",
      "parent": "clipped",
      "params": {},
      "source": {
        "line": 34,
        "endLine": 34
      }
    }
  ],
  "connections": [
    {
      "id": "edge-1",
      "source": "policy.logits",
      "target": "policy.log_probabilities",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-2",
      "source": "old_policy.logits",
      "target": "old_policy.log_probabilities",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-3",
      "source": "reference_policy.logits",
      "target": "reference_policy.log_probabilities",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-4",
      "source": "input",
      "target": "policy.logits",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-5",
      "source": "input",
      "target": "policy",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-6",
      "source": "input",
      "target": "old_policy.logits",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-7",
      "source": "input",
      "target": "old_policy",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-8",
      "source": "input",
      "target": "reference_policy.logits",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-9",
      "source": "input",
      "target": "reference_policy",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-10",
      "source": "input",
      "target": "advantages",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-11",
      "source": "policy.log_probabilities",
      "target": "python@ratio#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-12",
      "source": "policy",
      "target": "ratio",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-13",
      "source": "old_policy.log_probabilities",
      "target": "python@ratio#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-14",
      "source": "old_policy",
      "target": "ratio",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-15",
      "source": "python@ratio#0",
      "target": "python@clipped#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-16",
      "source": "ratio",
      "target": "clipped",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-17",
      "source": "advantages",
      "target": "python@clipped#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-18",
      "source": "advantages",
      "target": "clipped",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-19",
      "source": "policy.log_probabilities",
      "target": "divergence",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-20",
      "source": "policy",
      "target": "divergence",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-21",
      "source": "reference_policy.log_probabilities",
      "target": "divergence",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-22",
      "source": "reference_policy",
      "target": "divergence",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-23",
      "source": "python@clipped#0",
      "target": "sub@ToyGRPO#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-24",
      "source": "clipped",
      "target": "sub@ToyGRPO#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-25",
      "source": "divergence",
      "target": "sub@ToyGRPO#0",
      "sourcePort": null,
      "targetPort": null
    },
    {
      "id": "edge-26",
      "source": "sub@ToyGRPO#0",
      "target": "output",
      "sourcePort": null,
      "targetPort": null
    }
  ],
  "steps": [
    {
      "id": "policy",
      "target": "policy.logits",
      "title": "Keep architecture separate from the training recipe",
      "note": "This graph exposes the arithmetic of a four-choice toy policy. The original work starts from DeepSeek-V3-Base: R1-Zero applies RL directly, while R1 begins with a small cold-start SFT stage. Neither path is represented by a new attention mechanism here."
    },
    {
      "id": "advantages",
      "target": "advantages",
      "title": "Compare a completion’s reward with its group",
      "note": "GRPO subtracts the group’s mean reward and divides by its standard deviation. The toy uses population standard deviation plus epsilon, so an equal-reward group has zero advantages. Old-policy samples provide the comparison group; no separate critic estimates the baseline."
    },
    {
      "id": "clip",
      "target": "clipped",
      "title": "Limit the surrogate incentive using old-policy ratios",
      "note": "The current-to-old probability ratio weights each advantage. Taking the minimum of unclipped and clipped surrogates handles positive and negative advantages differently. The recipe verifies both values and saturated gradients. Old-policy parameters stay fixed during the update."
    },
    {
      "id": "reference",
      "target": "divergence",
      "title": "Retain a reference signal and distinguish later stages",
      "note": "The sampled reference penalty is exp(log πref − log π) − (log πref − log π) − 1. R1 also curates responses for a new SFT stage and runs broader final RL. Smaller distilled models receive supervised transfer from curated responses. Use the process selector to inspect these distinct paths."
    }
  ],
  "milestone": {
    "name": "DeepSeek-R1 post-training",
    "year": 2025,
    "kind": "Training method",
    "fidelity": "Original GRPO arithmetic for a categorical linear policy over four synthetic one-step completion IDs. Population reward standard deviation, epsilon for equal rewards, clipping 0.2 and KL coefficient 0.04. The process map distinguishes the published training paths.",
    "papers": [
      {
        "title": "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning · January 2025 version",
        "url": "https://arxiv.org/abs/2501.12948v1"
      }
    ]
  },
  "experiment": {
    "kind": "process",
    "title": "The milestone is a learning process.",
    "description": "Distinguish R1-Zero, R1’s four stages, and supervised distillation. A separate original toy GRPO implementation provides reproducible arithmetic without claiming to reproduce the published model.",
    "controlLabel": "Training process",
    "cases": [
      {
        "id": "zero",
        "label": "R1-Zero · direct RL",
        "target": "advantages",
        "note": "The highlighted stage describes the original January 2025 paper. It is an editorial process map, not execution status. Below it, the same independent four-candidate toy GRPO batch explains reward advantages, policy ratios and the reference penalty. It is not a simulation of the selected SFT/RL stage or evidence of learned reasoning.",
        "process": {
          "label": "R1-Zero",
          "steps": [
            {
              "label": "DeepSeek-V3-Base",
              "detail": "Begin with a pretrained base model; no cold-start SFT."
            },
            {
              "label": "Direct GRPO",
              "detail": "Use accuracy and format rewards on sampled responses. This is the R1-Zero path, separate from R1."
            }
          ],
          "active": 1
        },
        "vectors": [
          {
            "label": "Synthetic completion rewards · IDs 0–3",
            "values": [
              0,
              1,
              0,
              0.5
            ]
          },
          {
            "label": "Group-relative advantages",
            "values": [
              -0.9045340119151096,
              1.5075566865251826,
              -0.9045340119151096,
              0.30151133730503654
            ]
          },
          {
            "label": "Current / old probability ratio",
            "values": [
              1,
              1,
              1,
              1
            ]
          },
          {
            "label": "Sampled reference penalty",
            "values": [
              0,
              0,
              0,
              0
            ]
          }
        ],
        "metrics": [
          {
            "label": "Toy GRPO loss · before update",
            "value": 5.551115123125783e-17
          },
          {
            "label": "Clipping epsilon",
            "value": 0.2
          },
          {
            "label": "KL coefficient",
            "value": 0.04
          }
        ]
      },
      {
        "id": "cold",
        "label": "R1 · cold-start SFT",
        "target": "policy",
        "note": "The highlighted stage describes the original January 2025 paper. It is an editorial process map, not execution status. Below it, the same independent four-candidate toy GRPO batch explains reward advantages, policy ratios and the reference penalty. It is not a simulation of the selected SFT/RL stage or evidence of learned reasoning.",
        "process": {
          "label": "DeepSeek-R1",
          "steps": [
            {
              "label": "Cold-start SFT",
              "detail": "Fine-tune DeepSeek-V3-Base on thousands of readable long-response examples."
            },
            {
              "label": "Reasoning-oriented RL",
              "detail": "Apply GRPO with reasoning rewards and language consistency; the policy generates data for later curation."
            },
            {
              "label": "Curated SFT",
              "detail": "Filter about 600k reasoning samples, mix about 200k other samples, and fine-tune DeepSeek-V3-Base for two epochs."
            },
            {
              "label": "RL for all scenarios",
              "detail": "Combine rule-based reasoning rewards with preference reward models for general tasks."
            }
          ],
          "active": 0
        },
        "vectors": [
          {
            "label": "Synthetic completion rewards · IDs 0–3",
            "values": [
              0,
              1,
              0,
              0.5
            ]
          },
          {
            "label": "Group-relative advantages",
            "values": [
              -0.9045340119151096,
              1.5075566865251826,
              -0.9045340119151096,
              0.30151133730503654
            ]
          },
          {
            "label": "Current / old probability ratio",
            "values": [
              1,
              1,
              1,
              1
            ]
          },
          {
            "label": "Sampled reference penalty",
            "values": [
              0,
              0,
              0,
              0
            ]
          }
        ],
        "metrics": [
          {
            "label": "Toy GRPO loss · before update",
            "value": 5.551115123125783e-17
          },
          {
            "label": "Clipping epsilon",
            "value": 0.2
          },
          {
            "label": "KL coefficient",
            "value": 0.04
          }
        ]
      },
      {
        "id": "rl",
        "label": "R1 · reasoning-oriented RL",
        "target": "advantages",
        "note": "The highlighted stage describes the original January 2025 paper. It is an editorial process map, not execution status. Below it, the same independent four-candidate toy GRPO batch explains reward advantages, policy ratios and the reference penalty. It is not a simulation of the selected SFT/RL stage or evidence of learned reasoning.",
        "process": {
          "label": "DeepSeek-R1",
          "steps": [
            {
              "label": "Cold-start SFT",
              "detail": "Fine-tune DeepSeek-V3-Base on thousands of readable long-response examples."
            },
            {
              "label": "Reasoning-oriented RL",
              "detail": "Apply GRPO with reasoning rewards and language consistency; the policy generates data for later curation."
            },
            {
              "label": "Curated SFT",
              "detail": "Filter about 600k reasoning samples, mix about 200k other samples, and fine-tune DeepSeek-V3-Base for two epochs."
            },
            {
              "label": "RL for all scenarios",
              "detail": "Combine rule-based reasoning rewards with preference reward models for general tasks."
            }
          ],
          "active": 1
        },
        "vectors": [
          {
            "label": "Synthetic completion rewards · IDs 0–3",
            "values": [
              0,
              1,
              0,
              0.5
            ]
          },
          {
            "label": "Group-relative advantages",
            "values": [
              -0.9045340119151096,
              1.5075566865251826,
              -0.9045340119151096,
              0.30151133730503654
            ]
          },
          {
            "label": "Current / old probability ratio",
            "values": [
              1,
              1,
              1,
              1
            ]
          },
          {
            "label": "Sampled reference penalty",
            "values": [
              0,
              0,
              0,
              0
            ]
          }
        ],
        "metrics": [
          {
            "label": "Toy GRPO loss · before update",
            "value": 5.551115123125783e-17
          },
          {
            "label": "Clipping epsilon",
            "value": 0.2
          },
          {
            "label": "KL coefficient",
            "value": 0.04
          }
        ]
      },
      {
        "id": "curate",
        "label": "R1 · curation and SFT",
        "target": "policy",
        "note": "The highlighted stage describes the original January 2025 paper. It is an editorial process map, not execution status. Below it, the same independent four-candidate toy GRPO batch explains reward advantages, policy ratios and the reference penalty. It is not a simulation of the selected SFT/RL stage or evidence of learned reasoning.",
        "process": {
          "label": "DeepSeek-R1",
          "steps": [
            {
              "label": "Cold-start SFT",
              "detail": "Fine-tune DeepSeek-V3-Base on thousands of readable long-response examples."
            },
            {
              "label": "Reasoning-oriented RL",
              "detail": "Apply GRPO with reasoning rewards and language consistency; the policy generates data for later curation."
            },
            {
              "label": "Curated SFT",
              "detail": "Filter about 600k reasoning samples, mix about 200k other samples, and fine-tune DeepSeek-V3-Base for two epochs."
            },
            {
              "label": "RL for all scenarios",
              "detail": "Combine rule-based reasoning rewards with preference reward models for general tasks."
            }
          ],
          "active": 2
        },
        "vectors": [
          {
            "label": "Synthetic completion rewards · IDs 0–3",
            "values": [
              0,
              1,
              0,
              0.5
            ]
          },
          {
            "label": "Group-relative advantages",
            "values": [
              -0.9045340119151096,
              1.5075566865251826,
              -0.9045340119151096,
              0.30151133730503654
            ]
          },
          {
            "label": "Current / old probability ratio",
            "values": [
              1,
              1,
              1,
              1
            ]
          },
          {
            "label": "Sampled reference penalty",
            "values": [
              0,
              0,
              0,
              0
            ]
          }
        ],
        "metrics": [
          {
            "label": "Toy GRPO loss · before update",
            "value": 5.551115123125783e-17
          },
          {
            "label": "Clipping epsilon",
            "value": 0.2
          },
          {
            "label": "KL coefficient",
            "value": 0.04
          }
        ]
      },
      {
        "id": "align",
        "label": "R1 · final RL",
        "target": "advantages",
        "note": "The highlighted stage describes the original January 2025 paper. It is an editorial process map, not execution status. Below it, the same independent four-candidate toy GRPO batch explains reward advantages, policy ratios and the reference penalty. It is not a simulation of the selected SFT/RL stage or evidence of learned reasoning.",
        "process": {
          "label": "DeepSeek-R1",
          "steps": [
            {
              "label": "Cold-start SFT",
              "detail": "Fine-tune DeepSeek-V3-Base on thousands of readable long-response examples."
            },
            {
              "label": "Reasoning-oriented RL",
              "detail": "Apply GRPO with reasoning rewards and language consistency; the policy generates data for later curation."
            },
            {
              "label": "Curated SFT",
              "detail": "Filter about 600k reasoning samples, mix about 200k other samples, and fine-tune DeepSeek-V3-Base for two epochs."
            },
            {
              "label": "RL for all scenarios",
              "detail": "Combine rule-based reasoning rewards with preference reward models for general tasks."
            }
          ],
          "active": 3
        },
        "vectors": [
          {
            "label": "Synthetic completion rewards · IDs 0–3",
            "values": [
              0,
              1,
              0,
              0.5
            ]
          },
          {
            "label": "Group-relative advantages",
            "values": [
              -0.9045340119151096,
              1.5075566865251826,
              -0.9045340119151096,
              0.30151133730503654
            ]
          },
          {
            "label": "Current / old probability ratio",
            "values": [
              1,
              1,
              1,
              1
            ]
          },
          {
            "label": "Sampled reference penalty",
            "values": [
              0,
              0,
              0,
              0
            ]
          }
        ],
        "metrics": [
          {
            "label": "Toy GRPO loss · before update",
            "value": 5.551115123125783e-17
          },
          {
            "label": "Clipping epsilon",
            "value": 0.2
          },
          {
            "label": "KL coefficient",
            "value": 0.04
          }
        ]
      },
      {
        "id": "distill",
        "label": "Distilled models · supervised transfer",
        "target": "policy",
        "note": "The highlighted stage describes the original January 2025 paper. It is an editorial process map, not execution status. Below it, the same independent four-candidate toy GRPO batch explains reward advantages, policy ratios and the reference penalty. It is not a simulation of the selected SFT/RL stage or evidence of learned reasoning.",
        "process": {
          "label": "R1 distillation",
          "steps": [
            {
              "label": "Smaller Qwen/Llama base",
              "detail": "Start from a separate smaller dense model."
            },
            {
              "label": "SFT on curated responses",
              "detail": "Use the approximately 800k curated examples. The reported distilled models use SFT without a further RL stage."
            }
          ],
          "active": 1
        },
        "vectors": [
          {
            "label": "Synthetic completion rewards · IDs 0–3",
            "values": [
              0,
              1,
              0,
              0.5
            ]
          },
          {
            "label": "Group-relative advantages",
            "values": [
              -0.9045340119151096,
              1.5075566865251826,
              -0.9045340119151096,
              0.30151133730503654
            ]
          },
          {
            "label": "Current / old probability ratio",
            "values": [
              1,
              1,
              1,
              1
            ]
          },
          {
            "label": "Sampled reference penalty",
            "values": [
              0,
              0,
              0,
              0
            ]
          }
        ],
        "metrics": [
          {
            "label": "Toy GRPO loss · before update",
            "value": 5.551115123125783e-17
          },
          {
            "label": "Clipping epsilon",
            "value": 0.2
          },
          {
            "label": "KL coefficient",
            "value": 0.04
          }
        ]
      },
      {
        "id": "update",
        "label": "Toy arithmetic · one GRPO update",
        "target": "clipped",
        "note": "One SGD step changes a four-choice toy policy. The fixed candidate group is enumerated to make the arithmetic inspectable; it is not sampled language, R1 training, or a reasoning benchmark. Old and reference policies retain their original weights.",
        "process": {
          "label": "Local arithmetic demonstration",
          "steps": [
            {
              "label": "Fixed toy group",
              "detail": "Four synthetic completion IDs with supplied rewards."
            },
            {
              "label": "One GRPO update",
              "detail": "Only the current policy changes; old and reference snapshots stay fixed."
            }
          ],
          "active": 1
        },
        "vectors": [
          {
            "label": "Probability before update",
            "values": [
              0.40093143388745356,
              0.19671723044090894,
              0.29721227794430044,
              0.10513905772733706
            ]
          },
          {
            "label": "Probability after update",
            "values": [
              0.3937820761927986,
              0.20733341487242007,
              0.29191242688083036,
              0.10697208205395098
            ]
          },
          {
            "label": "Updated current / old ratio",
            "values": [
              0.9821681287861758,
              1.053966723747161,
              0.9821681287861759,
              1.0174342852811902
            ]
          }
        ],
        "metrics": [
          {
            "label": "Probability gain for best-rewarded ID 1",
            "value": 0.010616184431511133
          }
        ]
      }
    ]
  },
  "revision": "26c2243f53b24384",
  "files": {
    "graph.tensorviz.json": {
      "url": "/models/r1-training/26c2243f53b24384/graph.tensorviz.json",
      "sha256": "040f59edf2337dfa83c3364e9d046d460d8fc72bc8a1d28724b272b0a9ea2036",
      "bytes": 48252
    },
    "model.py": {
      "url": "/models/r1-training/26c2243f53b24384/model.py",
      "sha256": "5afc1a480ea9332bf34dcbe39f192d39a06267193c57807498da933d97fba721",
      "bytes": 11871
    },
    "run.py": {
      "url": "/models/r1-training/26c2243f53b24384/run.py",
      "sha256": "2c8a0066c5e8b07cbd5bd88902de69b52e47ce425ed4d0f4f78b96798d97213e",
      "bytes": 746
    },
    "requirements.txt": {
      "url": "/models/r1-training/26c2243f53b24384/requirements.txt",
      "sha256": "edb86016b42cb3cc6cdc0c490aab929d3bb098ced4515394f0b55766033e0daf",
      "bytes": 91
    },
    "preview.svg": {
      "url": "/models/r1-training/26c2243f53b24384/preview.svg",
      "sha256": "ed253246ec344f88cbce1387f52cca2a7711b366cc9776a836a38487a255c381",
      "bytes": 2317
    }
  }
}
