MNIST Lab 기본 구현 11편
마지막 글은 구현 결과를 해석한다. 21개 테스트는 부품 검증이고, 98.41% 정확도는 실제 MNIST 학습 검증이다. 둘은 비슷해 보이지만 의미가 다르다.
1. 21 passed가 의미하는 것
테스트 21개는 ReLU, Softmax, Affine, 손실 함수, 옵티마이저, 네트워크 조립, 학습 루프가 최소 조건을 만족했는지 확인한다.
| 구분 | 확인한 것 | 확인하지 않는 것 |
|---|---|---|
| 계층 테스트 | forward/backward shape와 기본 계산 | 실제 데이터에서 정확도가 높은지 |
| optimizer 테스트 | 파라미터가 변하는지 | 최적 학습률인지 |
| train/evaluate 테스트 | 루프가 동작하는지 | loss가 충분히 잘 내려가는지 |
2. 실제 학습 결과
| 항목 | 값 |
|---|---|
| 모델 구조 | 784 - 512 - 256 - 10 |
| BatchNorm | 사용 |
| Dropout | 사용, ratio 0.5 |
| Optimizer | Adam, lr 0.001 |
| Epoch / Batch | 15 epoch, batch size 128 |
| Test Accuracy | 98.41% |
| Parameter Count | 537,354 |
| Training Time | 264.63초, 약 4분 25초 |
loss_history:
0.4089 -> 0.1936 -> 0.1521 -> 0.1265 -> 0.1107
-> 0.0981 -> 0.0928 -> 0.0820 -> 0.0760 -> 0.0706
-> 0.0673 -> 0.0647 -> 0.0594 -> 0.0569 -> 0.0538
test_accuracy: 98.41%
params: 537,354
elapsed_sec: 264.63
3. 결과를 어떻게 봐야 하나
98.41%는 과제 기준으로 충분히 좋은 결과다. 하지만 이 모델은 이미지를 28x28 구조로 보는 CNN이 아니라, 784개 숫자 목록으로 펼쳐 보는 MLP다.
| 판단 | 의미 |
|---|---|
| 과제 완성선 | 95%, 97% 기준을 모두 넘었다. |
| 구현 검증 | 21개 테스트와 실제 학습 결과가 함께 확인되었다. |
| 개선 여지 | 이미지의 지역 구조를 직접 활용하지는 않는다. |
다음 실험으로 이어지는 이유
여기서 CNN+BatchNorm으로 넘어가면 숫자의 획처럼 가까운 픽셀들이 만드는 지역 패턴을 직접 볼 수 있다. 그래서 다음 개선 글에서 99%를 넘기는 구조를 실험한다.
이번 글에서 기억할 것
21 passed는 구현 부품 검증이고, 98.41%는 실제 학습 검증이다. 이 둘을 함께 봐야 기본 구현이 완성됐다고 말할 수 있다.
스스로 점검
- 21개 테스트 통과와 실제 정확도는 어떻게 다른가?
- MLP가 MNIST를 784개 숫자 목록으로 본다는 말은 무슨 뜻인가?
- CNN으로 넘어갈 이유는 무엇인가?
다음 글 예고
다음 큰 흐름에서는 이 기본 구현을 바탕으로 CNN+BatchNorm 구조를 추가한다. 그 뒤 train-only random 1px shift로 한 번 더 밀어본다.