# 기록의 범위와 해석

> GitHub 공개판 안내: 최종 모델만 제공하고 중간 checkpoint는 제외하였다. 공개 범위는 [publication.md](publication.md), 현재 다운로드·실행 방법은 [model-download.md](model-download.md)를 따른다. 아래는 원래 실험 snapshot에 대한 기록이다.

## 원본과 파생 자료

`raw/`는 Downloads/mnist-decision-lab의 파일 복사본입니다. 수정 없이 복사한 원본과 대시보드 API 스냅샷을 함께 보관했습니다. `site/data/`는 JSON을 브라우저에서 읽도록 JavaScript로 포장한 파생 자료입니다. 원본 JSONL은 그대로 남아 있습니다. PNG는 원본 MNIST를 기존 코드와 동일하게 RGB 112×112 nearest로 변환했습니다.

개별 배치의 `samples`는 같은 학습 forward에서 얻은 확률과 cross entropy입니다. 추론을 다시 돌려 만든 예제가 아닙니다. 각 sample의 `model_input`이 모델 입력이며 `gold`, `target_digit_metadata`는 감독·분석용입니다. 목표 숫자 정답을 state로 전달하지 않습니다. 학습 확률은 보정 전, 1,000장 테스트 확률은 저장·재로딩한 보정 모델 출력입니다.

## 실행 목록과 기록 공백

| 실행 | 역할 | 실제 배치 trace |
|---|---|---:|
| 20261029-234106 | 첫 시도, 미완료 | 없음 |
| 20261029-234406 | 10-step smoke / 저장·재로딩 | 없음 |
| 20261029-235749 | 초기 600-step, 정책 붕괴 | 없음; 저장 Trainer 평균 loss 존재 |
| 20261030-004047-batch1 | B1 × 누적8 벤치마크 | 96 |
| 20261030-004157-batch4 | B4 × 누적2 벤치마크 | 24 |
| 20261030-005144-memorize | 잘못된 정밀도 설정의 sweep 중단 | 없음 |
| 20261030-005253-memorize | 수정된 sweep, 큰 배치 중단 | 없음 |
| 20261030-005547-memorize | 이미지 3장/30쌍 암기 진단 | 50 |
| 20261030-010019 | 영어 입력, B32, 본학습 | 600 |

총 770개 microbatch / 20,892개 샘플 노출입니다. 학습 row 수나 고유 이미지 수와 다릅니다. 배치1·4 벤치마크의 과거 질문 설명은 저장된 `input_schema.json` 기반 보완일 수 있으므로 sample의 `input_provenance`를 노출합니다. 암기 진단은 config상 최대 300 step이나 50 step에 조기 종료했습니다. 실패한 sweep의 유효하지 않은 값은 성공 벤치마크처럼 사용하지 않습니다.

초기 실행의 배치별 예측은 수집하지 않았습니다. 뒤늦게 최종 모델로 추론한 값을 당시 값처럼 채우지 않았습니다. checkpoint는 실행 당시 보존 정책으로 남아 있는 것만 포함합니다. 모든 시점의 전체 모델 가중치가 있는 것은 아닙니다. 코드도 마지막 상태의 스냅샷이며 각 실행 당시 버전이 별도 보존된 것은 아닙니다. 원래 파일 이름과 내용은 유지했습니다.

## 테스트 범위

최초 평가: seed 3407로 뽑은 100장. 확장 평가: 공식 test 앞 1,000장. 무작위 1,000장이 아니며 두 평가가 일부 겹칩니다. 사전 20장 평가 및 반복 관찰이 있었으므로 완전히 봉인된 단 한 번의 최종 테스트는 아닙니다. test를 학습 gradient나 온도 보정에 사용한 것은 아닙니다.

각 이미지에 대해 current 0–9의 행동을 한 번씩 구하고, 그 정책을 캐시해 10개 출발점의 rollout을 계산했습니다. 정책이 이미지와 현재 숫자만 받는 결정적 함수이므로 이 환경에서는 정확한 재사용입니다. 10,000개 판단이 이미지 기준 독립 표본 10,000개라는 뜻은 아닙니다. 새로운 테스트를 실행하지 않고 기존 결과를 묶었습니다.

## 시간·메모리

`train_runtime` 1,249.3028초는 Trainer 내부 실행 시간으로 주기적 검증을 포함합니다. 순수 forward/backward만의 시간이 아닙니다. 초기 모델 로딩, 별도 최종 평가, 저장 후 profiling은 같은 범위에 포함되지 않습니다. training trace의 `forward_ms`는 CPU 쪽 구간 측정이며 동기화된 총 optimizer-step latency로 취급하지 않습니다.

추론 프로파일은 CUDA 동기화, 모드별 warmup 5회, single 100회 / batch 20회 측정했습니다. 모델 로딩·디스크·네트워크는 제외했습니다. single은 전처리/API 반환 변환을 포함하되 이미지를 미리 리사이즈했고, batched logits는 encoding 제외, B32 pipeline은 resize/encoding 포함입니다. 배치 처리량의 역수를 실시간 단건 latency라고 부르지 않습니다.

GPU allocated/reserved는 PyTorch 통계입니다. `nvidia-smi` 전체 장치 사용량과 다릅니다. 금액·전력·클라우드 비용은 측정하지 않았습니다. 일반적인 GPU나 다른 모델에 같은 시간을 적용할 수 없습니다.

## 인과 해석

초기 실패 → 성공 사이에 head LR, batch, 데이터 노출량, 영어 입력 등 여러 변수가 바뀌었습니다. 어느 하나가 원인임을 분리한 ablation은 없습니다. 작은 데이터 암기 성공은 파이프라인이 학습할 수 있다는 진단 근거이며 전체 데이터 일반화 성공의 증명이 아닙니다. 오답의 정책 모양으로 '다른 숫자처럼 행동했다'고 관찰할 수 있지만, 이를 내부 시각 인식 실패로 확정할 수 없습니다.
