MNIST
한 줄 정의
손으로 쓴 숫자 사진 7만 장. 머신러닝의 첫 연습곡
1. 비유로 이해하기
피아노를 배우면 누구나 「나비야」부터 친다. 프로그래밍을 배우면 누구나 Hello, World!를 출력한다.
MNIST는 머신러닝의 「나비야」다. 작고, 깨끗하고, 금방 돌아가고, 남들 점수와 비교하기도 쉽다.
한 장은 이렇게 생겼다.
┌────────────────┐
│ 28 × 28 픽셀 │ 각 칸에 0(흰색)~255(검정) 숫자
│ 회색조 (흑백) │ → 총 784개 숫자
└────────────────┘
↓
정답 라벨: "7"
2. 왜 필요한가
| 항목 | 내용 |
|---|---|
| 전체 장수 | 70,000장 |
| 학습용 | 60,000장 (공부용 문제집) |
| 시험용 | 10,000장 (시험지 — 절대 미리 안 본다) |
| 정답 종류 | 10가지 (0~9) |
| 이름의 뜻 | Modified NIST — 미국 표준기관(NIST) 데이터를 손본 것 |
시험용을 따로 떼어 놓는 이유가 중요하다. 문제집 답만 외운 학생은 시험을 못 본다. 모델도 학습 데이터만 잘 맞히는 상태가 될 수 있고, 이걸 과적합(overfitting)이라고 한다.
솔직히 말하면 MNIST는 에이전트를 만들 때 직접 쓰는 물건이 아니다. 그런데도 알아야 할 이유가 세 가지 있다.
① 벤치마크라는 개념의 원형
MNIST는 “모두가 같은 시험지로 겨루면 누가 나은지 알 수 있다”는 문화를 만든 데이터다. 그 문화가 그대로 에이전트 시대로 넘어왔다.
| 분야 | 표준 시험지 |
|---|---|
| 손글씨 인식 | MNIST |
| 이미지 인식 | ImageNet |
| 언어 이해 | MMLU |
| 에이전트 코딩 | SWE-bench |
| 에이전트 도구 사용 | τ-bench |
평가 하네스(evaluation harness)의 조상이 MNIST 평가 방식이다. 문제를 꺼내고, 답을 받고, 자동으로 채점하고, 점수를 모으는 그 구조 말이다.
② 작게 먼저 돌려 보는 감각
노트북에서 몇 분이면 돌아간다. 그래서 코드가 잘못됐는지 바로 알 수 있다. 에이전트를 만들 때도 작은 데이터로 흐름이 도는지 먼저 확인하는 습관은 그대로 유효하다. MVP의 감각과 같다.
③ 벤치마크의 한계도 함께 알려준다
MNIST는 이제 너무 쉬워서 은퇴한 시험지다. 웬만한 모델이 99% 넘게 맞히니 비교가 무의미해졌다. 이걸 벤치마크 포화(saturation)라고 하는데, 지금의 에이전트 벤치마크들도 똑같은 일을 겪고 있다.
소프트맥스와 만나는 지점
MNIST를 풀면 마지막에 반드시 소프트맥스가 나온다.
model = nn.Sequential(
nn.Flatten(), # 28×28 그림 → 784개 숫자 한 줄로
nn.Linear(784, 128), # 특징 추출
nn.ReLU(),
nn.Linear(128, 10), # 10개 점수 = 로짓
# ↓ 여기서 소프트맥스
)
왜 하필 10개일까. 정답이 0~9, 열 가지라서다.
그림 "7"을 넣으면
↓
로짓 (원점수) 소프트맥스 통과
0: -1.2 0: 0.2%
7: 8.9 ──▶ 7: 94.1% ← "7이라고 94% 확신한다"
9: 2.1 9: 5.4%
─────────
합계 100%
소프트맥스가 있어야 “확신의 정도”를 말할 수 있다. 로짓 8.9는 그냥 숫자지만 94%는 의미가 있다. 그리고 이게 게이트로 이어진다.
probs = softmax(logits)
if probs.max() < 0.7:
return "사람에게 확인 요청" # 확신 게이트
확신을 숫자로 만들 수 없으면 이런 게이트를 세울 수 없다.
3. 어디서 만났나
이 용어는 수업에서 정식으로 다루기 전에 따로 정리한 것이다.
다만 7회차에서 에이전트 도구를 고르는 기준을 배울 때, 여러 도구를 같은 조건에서 비교한 수치들이 나왔다. 그런 비교가 가능하려면 모두가 같은 시험지를 써야 하는데, 그 문화의 출발점이 MNIST다.
7회차 — 에이전트, MCP, 스킬 — 범용 AI를 내 전용 조수로
8회차의 “작게 만들어 먼저 돌려 본다”와도 이어진다. MNIST가 지금까지 쓰이는 이유 중 하나가 몇 분이면 한 바퀴가 돈다는 것이다.
8회차 — MVP, 다 만들려 하지 말고 한 흐름이 끝까지 굴러가게
4. 헷갈리는 개념
| 이 용어 | 비슷하지만 다른 것 | 차이 |
|---|---|---|
| MNIST | ImageNet · SWE-bench | 같은 계통의 후배들이다. 분야가 다를 뿐 “같은 시험지로 겨룬다”는 구조는 같다 |
| 학습 데이터 | 시험 데이터 | 학습은 문제집, 시험은 시험지. 섞이면 점수가 의미를 잃는다 |
| MNIST | 과적합 | 과적합은 현상의 이름. MNIST는 그 현상을 처음 실감하게 해 주는 연습 데이터 |
| MNIST | Fashion-MNIST · EMNIST | 파생 데이터셋. 숫자 대신 옷, 숫자 + 알파벳으로 바꿔 난이도를 올린 것들 |
5. 많이들 오해하는 지점
ㄱ. “옛날 데이터니까 몰라도 된다”
데이터 자체는 은퇴한 게 맞다. 하지만 MNIST가 만든 건 데이터가 아니라 문화다. “표준 시험지를 정하고, 자동으로 채점하고, 점수로 비교한다”는 방식 전체 말이다.
지금 “SWE-bench 70%”라는 문장을 읽을 때 그게 무슨 뜻이고 어디까지 믿어야 하는지 판단하는 눈이 여기서 나온다.
ㄴ. “벤치마크 점수가 높으면 실전에서도 잘한다”
가장 값비싼 오해다. MNIST를 99% 맞히는 모델이 실제 우편번호는 못 읽는 일이 있었다. 배경이 다르고, 글씨가 기울어져 있고, 얼룩이 있으니까.
SWE-bench 점수와 내 회사 코드베이스에서의 실력은 다른 문제다. 시험지는 깨끗하게 정리된 문제이고, 현실은 그렇지 않다. 점수는 고를 때의 참고치이지 보증서가 아니다.
ㄷ. “학습에 쓴 데이터로 시험 보면 되지 않나”
그게 바로 문제집 답만 외운 학생이다. 시험지를 미리 보여 주면 점수는 올라가지만 그 점수가 아무 의미도 없어진다.
이 감각은 에이전트에도 그대로 적용된다. 내가 만든 에이전트를 내가 개발하면서 써 본 질문들로만 평가하면, 그건 이미 답을 본 시험이다.