콘텐츠로 이동

Chapter 3: 5줄로 만드는 첫 AI - 손글씨 인식기

한 줄 요약: 복잡한 원리 몰라도 괜찮아. 일단 진짜 동작하는 AI를 만들어보자!


🎯 이 장에서 배우는 것

  • [ ] 사전 학습된 모델을 불러와 사용할 수 있다
  • [ ] 이미지 데이터를 머신러닝 모델에 입력할 수 있다
  • [ ] 예측 결과를 해석하고 출력할 수 있다
  • [ ] "학습"과 "예측"의 차이를 설명할 수 있다

💡 왜 이걸 배우나요?

일단 맛보기!

요리를 배울 때 처음부터 칼 가는 법, 불 조절하는 법을 배우면... 지루하잖아? 🥱

"일단 맛있는 거 먹어보자!"

이 장은 그런 철학이야. AI가 어떻게 학습하는지, 신경망이 뭔지 몰라도 돼. 일단 진짜 동작하는 AI를 5줄로 만들어보는 것이 목표야.

이런 경험을 하게 될 거야

너: (손글씨 이미지를 보여줌)
AI: "이건 7이야!"
너: "오... 진짜 맞췄네?! 어떻게 알았지?"

신기하지 않아? 컴퓨터가 손으로 쓴 숫자를 알아보다니!

이 장을 마치면

  • "나도 AI 만들어봤다!"라고 말할 수 있어
  • 머신러닝이 "마법"이 아니라 "도구"라는 걸 느끼게 돼
  • 다음 장에서 배울 내용이 궁금해질 거야

📚 핵심 개념

개념 1: 머신러닝(Machine Learning)

비유로 시작: 머신러닝은 마치 "경험으로 배우는 것"과 같아요.

아기가 고양이와 강아지를 구분하는 법을 생각해봐: - 처음엔 다 "멍멍이!"라고 해 😅 - 부모님이 "아니야, 이건 고양이야"라고 알려줌 - 수십 번 반복 - 어느 순간, 처음 보는 고양이도 "고양이!"라고 맞춤

👶 아기의 학습:
[고양이 사진] → "강아지?" → ❌ 틀림 → 수정
[고양이 사진] → "고양이?" → ⭕ 맞음 → 강화
... (수백 번 반복) ...
[새로운 고양이] → "고양이!" → ⭕ 

🤖 머신러닝도 똑같아:
[숫자 이미지] → "5?" → ❌ 틀림 → 수정
[숫자 이미지] → "7!" → ⭕ 맞음 → 강화
... (수만 번 반복) ...
[새로운 손글씨] → "7!" → ⭕

정확히 말하면: 머신러닝은 데이터로부터 패턴을 학습하여, 새로운 데이터에 대해 예측하는 기술이에요.

예를 들어: - 스팸 메일 분류기: 수천 개의 스팸/정상 메일로 학습 → 새 메일이 스팸인지 예측 - 추천 시스템: 너의 시청 기록으로 학습 → 좋아할 영상 예측 - 오늘 만들 것: 손글씨 숫자로 학습 → 새 손글씨가 몇인지 예측

쉽게 말하면: 컴퓨터가 예제를 보고 스스로 규칙을 찾아내는 것!


개념 2: 학습(Training) vs 예측(Prediction)

비유로 시작: 수능 준비와 비슷해!

📚 학습(Training) = 수능 공부
- 기출문제 1000개 풀기
- 해설 보면서 패턴 익히기
- 시간 오래 걸림 (몇 달~몇 년)

✏️ 예측(Prediction) = 수능 당일
- 처음 보는 문제
- 배운 패턴으로 답 추론
- 빠르게 답 내기 (몇 초)

정확히 말하면: - 학습(Training): 데이터를 보여주며 모델이 패턴을 익히는 과정 - 예측(Prediction): 학습된 모델이 새 데이터의 답을 맞추는 과정

예를 들어:

단계 손글씨 인식기
학습 6만 장의 손글씨 이미지를 보며 "이건 0, 이건 1, ..." 패턴 학습
예측 네가 그린 새 손글씨를 보고 "이건 7!"

쉽게 말하면: 학습은 공부, 예측은 시험!


개념 3: 사전 학습된 모델(Pre-trained Model)

비유로 시작: 마치 "이미 훈련받은 전문가를 고용하는 것"과 같아요.

❌ 직접 학습시키기:
"강아지 훈련사 되기"
→ 3년 학원 + 실습 + 자격증
→ 그제야 강아지 훈련 가능

⭕ 사전 학습된 모델 쓰기:
"전문 훈련사 부르기"
→ 전화 한 통
→ 바로 강아지 훈련 가능

정확히 말하면: 누군가 이미 대량의 데이터로 학습시켜 놓은 모델을 가져다 쓰는 것이에요.

예를 들어: - 우리가 쓸 모델: 6만 장의 손글씨로 이미 학습 완료 - 학습에 걸린 시간: 수 시간 - 우리가 쓰는 시간: 1초 (불러오기만 하면 끝!)

쉽게 말하면: 남이 공부해놓은 걸 빌려 쓰는 것! (정당하게! 😄)


개념 4: MNIST 데이터셋

비유로 시작: 머신러닝계의 "Hello, World!" 같은 존재야.

프로그래밍 배울 때 첫 코드가 "Hello, World!"인 것처럼, 머신러닝 배울 때 첫 데이터셋이 MNIST야.

정확히 말하면: MNIST는 0~9 손글씨 숫자 이미지 7만 장으로 이루어진 데이터셋이에요.

MNIST 데이터셋 구성:
┌─────────────────────────────────────┐
│  학습용 (Training): 60,000장        │
│  테스트용 (Test): 10,000장          │
│                                     │
│  이미지 크기: 28 x 28 픽셀          │
│  색상: 흑백 (0~255)                 │
│  숫자: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 │
└─────────────────────────────────────┘

예를 들어:

MNIST 이미지 예시 (28x28 픽셀):

"7"이라고 적힌 이미지:
□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□■■■■■■■■■□□□□□□□□□□□□
□□□□□□□□□□□□□□■■□□□□□□□□□□□□
□□□□□□□□□□□□□■■□□□□□□□□□□□□□
□□□□□□□□□□□□■■□□□□□□□□□□□□□□
□□□□□□□□□□□■■□□□□□□□□□□□□□□□
□□□□□□□□□□■■□□□□□□□□□□□□□□□□
□□□□□□□□□□■□□□□□□□□□□□□□□□□□
□□□□□□□□□■■□□□□□□□□□□□□□□□□□
□□□□□□□□□■□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□

쉽게 말하면: 전 세계 머신러닝 입문자가 사용하는 "국민 데이터셋"!


🔨 따라하기

Step 0: 새 노트북 만들기

목표: 이 장 실습을 위한 새로운 Colab 노트북을 생성해요.

  1. Google Colab 접속
  2. "새 노트" 클릭
  3. 제목을 "Chapter03_첫AI_손글씨인식"으로 변경
┌─────────────────────────────────────────────┐
│  Chapter03_첫AI_손글씨인식.ipynb             │
├─────────────────────────────────────────────┤
│  + 코드   + 텍스트                           │
│                                             │
│  [ 여기에 코드를 입력하세요 ]                 │
│                                             │
└─────────────────────────────────────────────┘

준비 완료! 이제 본격적으로 시작해보자! 🚀


Step 1: 도구 불러오기 (1줄)

목표: AI를 만드는 데 필요한 도구들을 가져와요.

코드:

# === WHAT: 머신러닝에 필요한 도구들을 불러오기 ===
# scikit-learn: 머신러닝 라이브러리 (사이킷런이라고 읽어)
# datasets: 유명한 데이터셋 모음
# RandomForestClassifier: 분류를 잘하는 머신러닝 모델

from sklearn.datasets import load_digits  # 손글씨 숫자 데이터
from sklearn.ensemble import RandomForestClassifier  # AI 모델

Shift + Enter로 실행해봐!

실행 결과:

(아무것도 출력되지 않으면 성공!)

여기서 잠깐! 🤔

"아무것도 안 나오는데 된 거야?"

응! 도구를 불러오는 코드는 보통 조용히 실행돼. 에러 메시지가 없으면 성공이야!

from sklearn.datasets import load_digits

이 코드의 의미:
┌──────────────────────────────────────────────┐
│  from sklearn.datasets                       │
│  → sklearn 라이브러리의 datasets에서          │
│                                              │
│  import load_digits                          │
│  → load_digits라는 기능을 가져와              │
│                                              │
│  마치 "공구함에서 드라이버 꺼내기"와 같아!      │
└──────────────────────────────────────────────┘

Step 2: 데이터 준비하기 (1줄)

목표: 손글씨 숫자 데이터를 불러와요.

코드:

# === WHAT: 손글씨 숫자 데이터 불러오기 ===
# --- WHY: AI를 학습시키려면 데이터가 필요하니까! ---

digits = load_digits()  # 1797개의 손글씨 숫자 이미지 로드

실행 결과:

(역시 조용히 성공!)

여기서 잠깐! 🤔

"load_digits()가 뭐야? MNIST 아니었어?"

좋은 질문이야! load_digits()는 MNIST의 작은 버전이야.

구분 MNIST load_digits
이미지 수 70,000장 1,797장
이미지 크기 28×28 8×8
용도 실제 연구 학습/연습
로딩 시간 수 초 즉시

우리는 입문용으로 가볍고 빠른 load_digits()를 쓸 거야!

데이터 구조 살펴보기: ```python

이 코드를 추가로 실행해서 데이터를 확인해봐!

print(f"이미지 개수: {len(digits.images)}개") print(f"이