Handleidingen
Een getraind model valideren
Een getraind model kan goed scoren op een suite die het al heeft gezien, zijn antwoord omdraaien als een invoer een beetje verschuift, en een gelukkige seed treffen. Oloproof controleert elk hiervan voordat het model wordt uitgerold: de suite tegen de trainingsdata, elke voorspelling onder gedeclareerde ruis, en het trainingsrecept over meerdere seeds. Kopieer het voorbeeld met oloproof init --example model-validation: een leningmodel, offline door NumPy getraind op synthetische data.
De suite tegen de trainingsdata
oloproof leakage check --training data/training.jsonl --recordElke case wordt met elke trainingsrij vergeleken op exacte overeenkomst, nadat strings naar kleine letters zijn omgezet en witruimte is samengevoegd (--round rondt getallen af, --field noemt de sleutels die vergeleken worden). Het trainingsbestand wordt op je eigen machine gelezen en nooit opgeslagen of verstuurd; het record bewaart case-id's en aantallen. Declareer leakage: required in release.yaml en de gate is geblokkeerd (exit 3) tot een schone controle van deze suite is vastgelegd. Een case die in de trainingsdata wordt gevonden maakt het bewijs ongeldig; het is geen FAIL van het model. Bijna-duplicaten worden niet gecontroleerd.
Voorspellingen onder ruis
metamorphic:
transforms:
- name: noise
field: features
perturb: {kind: numeric_noise, scale: {income: 1.0, debt_ratio: 0.02}, seed: 7}
evaluators:
- {type: metamorphic_relation, relation: same_label, transform: noise, field: label, passes_when: flipped}Elke case krijgt een kopie met geseede ruis op de genoemde getallen, en flips_under_noise is het aandeel cases waarvan het label veranderde. categorical_swap vervangt waarden volgens een gedeclareerde map, en blur, brightness, occlusion en jpeg veranderen afbeeldingen. Een regressor gebruikt same_score_within met een tolerantie. Mensen kunnen niet beoordelen of ruis op een rij de betekenis ervan behoudt, dus een numerieke perturbatie is gedeclareerd: de rate wordt gerapporteerd, en een regel erop leest INSUFFICIENT_EVIDENCE met transform_declared. Een beeldtransformatie gate zodra labels van mensen laten zien dat ze de betekenis van elke afbeelding behoudt, zoals een teksttransformatie dat doet. Het project image/ van het voorbeeld laat beide zien: een vervaging die de labels controleren, waarvan het omslagpercentage een plafond niet haalt, en een grijze vlek die volgens de labels de kras soms verbergt, waarvan de regel niet beslist.
Het recept over seeds
Het checkpoint dat je uitrolt wordt op zijn eigen run beslist, zoals elk systeem. Een tweede vraag is of de manier waarop je traint goed genoeg is: train volgende maand opnieuw en je krijgt een andere trekking. Train k checkpoints met k seeds, draai elk op dezelfde suite en geef de runs een naam:
seeds:
recipe: loan-model
checkpoints: {seed_1: latest~4, seed_2: latest~3, seed_3: latest~2, seed_4: latest~1, seed_5: latest}
rule: {id: recipe_accurate, criterion: correct, min: 0.8}oloproof seeds seeds.yaml --policy recipe.yaml leest de verwachte pass rate over seeds, met een interval dat zowel de cases in de suite als de geprobeerde seeds meetelt. In het voorbeeld scoren vijf seeds 85,7% tot 90,3%, en het recept leest 88,2%, 83,2% tot 91,9%: PASS tegen 80%. Het interval is benaderend, dus de policy heeft allow_approximate_methods: true nodig, anders is het antwoord MANUAL_REVIEW. De policy moet minstens één regel bevatten; het commando leest het betrouwbaarheidsniveau, de opt-in en de judge-drempels, en verder niets. Het somt ook de cases op waarvan het oordeel van seed tot seed verandert, en --html FILE schrijft één offline pagina met elke case onder elk checkpoint.
Elk checkpoint telt. Een seed waarvan de training mislukte blijft behouden, en elke case die het niet beantwoordde telt als fail voor de ondergrens en als pass voor de bovengrens, dus het verbreedt het interval. Minder dan drie seeds lezen INSUFFICIENT_EVIDENCE; er zijn er ongeveer vijf nodig om iets te beslissen. Een judge die de gate niet zou vertrouwen beslist ook geen recept. Elk checkpoint moet dezelfde suite draaien, met elk één systeemversie, en een suite die groepen declareert wordt geweigerd.
Wat dit je niet kan vertellen
- Perturbaties die niemand declareerde. Alleen de gedeclareerde transformaties worden geprobeerd, op de gedeclareerde groottes, en een lage flip rate zegt niets over grotere veranderingen of de zoektocht van een aanvaller.
- Gecertificeerde robuustheid. Voor geen enkele invoer wordt een grens bewezen; de flip rate is een rate over de cases van de suite.
- Hoe het model werd getraind. Oloproof kan niet zien of de seeds werden gekozen voordat enig checkpoint werd geëvalueerd, of mislukte runs werden weggegooid, of dat de checkpoints alleen in hun seed verschillen.
- Een fout die zeldzamer is dan ongeveer één seed op k. Als het recept één keer op tien niet traint en geen van vijf seeds mislukte, kan het interval dat niet weten.
- Lekkage die het trainingsbestand niet laat zien: bijna-duplicaten, een verkleinde afbeelding, of rijen die voor tuning werden gebruikt maar uit het bestand zijn gelaten.
- Lekkage in de seed-runs. oloproof seeds leest leakage: required niet; het checkpoint dat je uitrolt wordt op zijn eigen run gegate, en die doet dat wel.
Wat elke evaluatie je niet kan vertellen staat op een eigen pagina.