가이드
학습된 모델 검증하기
학습된 모델은 이미 본 적 있는 스위트에서 좋은 점수를 받을 수 있고, 입력이 조금만 바뀌어도 답을 뒤집을 수 있으며, 운 좋은 시드를 얻을 수도 있습니다. Oloproof는 모델이 출시되기 전에 이 각각을 확인합니다. 학습 데이터에 대한 스위트, 선언된 노이즈 아래의 각 예측, 여러 시드에 걸친 학습 레시피입니다. oloproof init --example model-validation으로 예제를 복사하세요. 합성 데이터로 NumPy가 오프라인에서 학습한 대출 모델입니다.
학습 데이터에 대한 스위트
oloproof leakage check --training data/training.jsonl --record각 케이스는 문자열을 소문자로 바꾸고 공백을 정리한 뒤 모든 학습 행과 정확히 일치하는지 비교됩니다(--round는 숫자를 반올림하고, --field는 비교할 키를 지정합니다). 학습 파일은 사용자의 컴퓨터에서 읽히며 저장되거나 전송되지 않습니다. 기록에는 케이스 ID와 개수만 남습니다. release.yaml에 leakage: required를 선언하면 이 스위트의 깨끗한 검사가 기록될 때까지 게이트가 차단됩니다(exit 3). 학습 데이터에서 발견된 케이스는 증거를 무효로 만들 뿐, 모델의 FAIL이 아닙니다. 유사 중복은 검사하지 않습니다.
노이즈 아래의 예측
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}각 케이스는 지정된 숫자에 시드 노이즈를 더한 사본을 하나 얻고, flips_under_noise는 레이블이 바뀐 케이스의 비율입니다. categorical_swap은 선언된 매핑으로 값을 바꾸고, blur, brightness, occlusion, jpeg는 이미지를 바꿉니다. 회귀 모델은 허용 오차와 함께 same_score_within을 사용합니다. 사람은 한 행에 더한 노이즈가 그 의미를 유지하는지 판단할 수 없으므로 수치 섭동은 선언된 것으로 취급됩니다. 그 비율은 보고되며, 이에 대한 규칙은 transform_declared와 함께 INSUFFICIENT_EVIDENCE로 판정됩니다. 이미지 변환은 텍스트 변환과 마찬가지로, 사람들의 레이블이 각 이미지의 의미를 유지한다고 보여 준 뒤에 게이트에 쓰입니다. 예제의 image/ 프로젝트는 두 경우를 모두 보여 줍니다. 라벨로 확인된 블러는 뒤집힘 비율이 상한을 넘어 실패하고, 라벨상 긁힘을 가끔 가리는 회색 패치는 그 규칙이 판정을 보류합니다.
여러 시드에 걸친 레시피
출시하는 체크포인트는 다른 시스템과 마찬가지로 자체 실행으로 결정됩니다. 두 번째 질문은 학습하는 방식이 충분히 좋은가입니다. 다음 달에 다시 학습하면 또 다른 추첨을 얻게 됩니다. k개의 시드로 k개의 체크포인트를 학습하고, 각각을 같은 스위트에서 실행한 뒤, 실행에 이름을 붙이세요.
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은 시드에 걸친 기대 통과율을 읽으며, 그 구간은 스위트가 담은 케이스와 시도한 시드를 모두 고려합니다. 예제에서 다섯 시드는 85.7%에서 90.3%를 기록하고, 레시피는 88.2%, 83.2%에서 91.9%로 읽힙니다. 80%에 대해 PASS입니다. 구간은 근사이므로 정책에 allow_approximate_methods: true가 필요하며, 그렇지 않으면 답은 MANUAL_REVIEW입니다. 정책에는 규칙이 하나 이상 있어야 합니다. 명령은 신뢰 수준, 그 옵트인, 판정자 기준만 읽고 나머지는 읽지 않습니다. 시드마다 판정이 바뀌는 케이스도 나열하며, --html FILE은 모든 케이스를 모든 체크포인트 아래에 보여 주는 오프라인 페이지 하나를 씁니다.
모든 체크포인트가 포함됩니다. 학습에 실패한 시드도 유지되며, 그 시드가 답하지 못한 각 케이스는 하한에서는 실패로, 상한에서는 통과로 계산되므로 구간이 넓어집니다. 시드가 세 개 미만이면 INSUFFICIENT_EVIDENCE로 판정되며, 무엇이든 결정하려면 다섯 개 정도가 필요합니다. 게이트가 신뢰하지 않을 판정자는 레시피도 결정하지 않습니다. 모든 체크포인트는 각각 하나의 시스템 버전으로 같은 스위트를 실행해야 하며, 그룹을 선언한 스위트는 거부됩니다.
이것이 알려 줄 수 없는 것
- 아무도 선언하지 않은 섭동. 선언된 변환만 선언된 크기로 시도되며, 낮은 뒤집힘 비율은 더 큰 변화나 공격자의 탐색에 대해 아무것도 말해 주지 않습니다.
- 인증된 강건성. 어떤 입력에 대해서도 경계가 증명되지 않습니다. 뒤집힘 비율은 스위트 케이스에 대한 비율입니다.
- 모델이 어떻게 학습되었는지. Oloproof는 체크포인트를 평가하기 전에 시드를 골랐는지, 실패한 실행을 버렸는지, 체크포인트들이 시드만 다른지 알 수 없습니다.
- k개 시드 중 하나 정도보다 드문 실패. 레시피가 열 번에 한 번 학습에 실패하는데 다섯 시드 중 아무것도 실패하지 않았다면, 구간은 그것을 알 수 없습니다.
- 학습 파일이 보여 주지 않는 누출: 유사 중복, 크기가 바뀐 이미지, 튜닝에 쓰였지만 파일에서 빠진 행.
- 시드 실행의 누출. oloproof seeds는 leakage: required를 읽지 않습니다. 출시하는 체크포인트는 자체 실행으로 게이트를 통과하며, 그 실행은 이를 읽습니다.
모든 평가가 알려 줄 수 없는 것은 별도 페이지에 있습니다.