
학습 내용
조건문과 반복문
📚 학습 목표
이 레슨을 완료하면:
- •for 반복문과 Epoch의 관계를 이해합니다
- •중첩 for 루프와 Batch 처리를 이해합니다
- •if 조건문과 Early Stopping의 연결을 이해합니다
- •while 반복문의 AI 활용 사례를 압니다
🎯 핵심 메시지
"AI 학습 = 반복문 안에서 일어나는 마법" 모든 딥러닝 학습은 반복문 안에서 진행됩니다!
📖 먼저 알아두기: Epoch와 Batch
AI 학습에서 가장 자주 나오는 두 가지 핵심 용어입니다. 이 레슨 전체에서 계속 등장하니 먼저 확실히 이해하고 넘어가세요!
Epoch (에포크) - "전체 데이터를 1번 다 보는 것"
ChatGPT 같은 AI를 만들려면 수십억 개의 문장을 학습시켜야 합니다. 이 수십억 개의 문장 전체를 처음부터 끝까지 1번 다 보는 것이 1 Epoch입니다.
| 실제 사례 | 데이터 | Epoch 수 | 의미 |
|---|---|---|---|
| 손글씨 인식 AI | 이미지 6만 장 | 10 epochs | 6만 장을 10번 반복해서 봄 |
| 고양이/개 분류 AI | 사진 2만 장 | 30 epochs | 2만 장을 30번 반복해서 봄 |
| ChatGPT | 텍스트 수십억 개 | 2~3 epochs | 수십억 개를 2~3번 봄 |
왜 여러 번 봐야 하나? → 사람도 교과서를 한 번 읽으면 다 이해 못하죠. 반복할수록 패턴을 더 잘 잡아냅니다. 하지만 너무 많이 반복하면 "답을 외워버리는" 문제(과적합)가 생길 수 있어서, 적절한 횟수를 찾는 것이 중요합니다.
Batch (배치) - "한 번에 묶어서 처리하는 단위"
6만 장의 이미지를 한꺼번에 컴퓨터 메모리에 올릴 수 없습니다. 그래서 32장, 64장, 128장씩 묶어서 처리합니다. 이 묶음이 Batch입니다.
| Batch Size | 장점 | 단점 | 주로 사용 |
|---|---|---|---|
| 작게 (8~32) | 메모리 적게 사용, 세밀한 학습 | 속도 느림 | GPU 메모리가 작을 때 |
| 크게 (128~512) | 속도 빠름, 안정적 학습 | 메모리 많이 필요 | 고성능 GPU 사용 시 |
실제 현장에서는? → GPU 메모리에 맞는 최대 Batch Size를 찾아 사용합니다. 메모리가 부족하면 Batch Size를 줄이고, 여유가 있으면 늘립니다.
Epoch와 Batch의 관계
예: 데이터 6만 장, Batch Size 32
1 Epoch = 6만 장 전부 1번 보기
= 32장씩 × 1,875번 처리해야 1 Epoch 완료!
↑ 이것이 Iteration (반복 횟수)
10 Epochs = 이 과정을 10번 반복
= 총 18,750번의 Batch 처리
🔄 1. for 반복문 - AI 학습의 심장
비유: 수학 문제집을 3번 반복해서 풀면 실력이 오르죠? AI도 똑같습니다. 전체 데이터를 여러 번 반복해서 보면 점점 똑똑해집니다. 이 "1번 다 보기"를 Epoch이라고 합니다.
실행해보기: Epoch 시뮬레이션
python# AI 학습 = 데이터를 여러 번 반복해서 보는 것! # Epoch: 전체 데이터를 1번 다 보는 것 print("📚 수학 문제집 반복 학습 비유") print("=" * 40) score = 50 # 처음 실력: 50점 for epoch in range(1, 6): # 5번 반복 학습 score = score + (100 - score) * 0.3 # 매번 부족한 만큼 30% 향상 print(f"Epoch {epoch}/5: 실력 = {score:.1f}점") print(f"\n결과: 5번 반복하니 {score:.1f}점까지 올랐습니다!") print("→ AI도 이렇게 데이터를 반복해서 보면 점점 정확해집니다")
📦 2. 중첩 for 루프 - Batch 처리
비유: 선생님이 시험지 100장을 채점한다고 생각해보세요. 100장을 한꺼번에 들고 채점할 수 없으니, 10장씩 묶어서 채점합니다. 이 "10장 묶음"이 바로 Batch입니다!
왜 Batch가 필요한가?
| 상황 | 문제 | 해결 |
|---|---|---|
| 데이터 100만 장 | 컴퓨터 메모리에 다 못 올림 | 32장씩 나눠서 처리! |
| 한 장씩 처리 | 너무 느림 | 묶어서 한번에 처리! |
용어 정리
| 용어 | 비유 | 의미 |
|---|---|---|
| Epoch | 문제집 1번 다 풀기 | 전체 데이터 1회 학습 |
| Batch | 10장씩 묶음 | 한 번에 처리하는 데이터 묶음 |
| Iteration | 묶음 1개 채점 | 1개 배치 처리 = 1회 |
실행해보기: Batch 처리 시뮬레이션
python# 시험지 채점 비유로 Batch 처리 이해하기! total_papers = 20 # 전체 시험지 20장 batch_size = 5 # 5장씩 묶어서 채점 epochs = 3 # 3번 반복 채점 (실수 줄이기 위해) papers = [f"시험지{i+1}" for i in range(total_papers)] print(f"📝 전체 시험지: {total_papers}장") print(f"📦 Batch 크기: {batch_size}장씩 묶음") print(f"🔄 Epoch: {epochs}번 반복") print(f"→ 1 Epoch당 {total_papers // batch_size}번 채점 (Iteration)") print("=" * 50) for epoch in range(1, epochs + 1): print(f"\n🔄 Epoch {epoch}/{epochs}") print("-" * 40) iteration = 0 for i in range(0, total_papers, batch_size): batch = papers[i:i+batch_size] # 5장씩 꺼내기 iteration += 1 print(f" Iteration {iteration}: {batch} 채점 완료 ✓") print(f" → Epoch {epoch} 끝! (총 {iteration}번 채점)") print(f"\n✅ 모든 채점 완료!") print(f" 총 Iteration 수: {epochs} × {total_papers // batch_size} = {epochs * (total_papers // batch_size)}회")
✋ 3. if 조건문 - Early Stopping
비유: 공부를 계속 하는데 성적이 더 이상 안 오른다면? 그만하는 게 맞죠! AI도 마찬가지로, 더 이상 나아지지 않으면 학습을 멈춥니다. 이것을 Early Stopping이라고 합니다.
실행해보기: Early Stopping 시뮬레이션
python# Early Stopping = "더 나아지지 않으면 그만두기" import random random.seed(42) best_score = 0 # 최고 성적 patience = 0 # 연속으로 안 나아진 횟수 max_patience = 3 # 3번 연속 안 나아지면 중단! print("🎯 Early Stopping 시뮬레이션") print("규칙: 3번 연속 최고 기록 갱신 못하면 STOP!") print("=" * 50) for epoch in range(1, 20): # 최대 20번 학습 # 시뮬레이션: 초반엔 잘 오르고, 후반엔 정체 score = min(50 + epoch * 8 + random.randint(-5, 5), 95) if score > best_score: best_score = score patience = 0 print(f"Epoch {epoch:2d}: 성적 = {score}점 ✅ 최고 기록 갱신! (저장)") else: patience += 1 print(f"Epoch {epoch:2d}: 성적 = {score}점 ⚠️ 안 나아짐 ({patience}/{max_patience})") if patience >= max_patience: print(f"\n🛑 Early Stopping! {epoch}번째에서 중단") print(f" 이유: {max_patience}번 연속 최고 기록 갱신 실패") break print(f"\n📊 최종 최고 성적: {best_score}점") print("→ 실제 AI에서는 '성적' 대신 'loss(오차)'가 줄어드는지 확인합니다")
📉 4. 학습률 스케줄링
비유: 목적지를 찾을 때, 처음엔 큰 걸음으로 빠르게 근처까지 간 다음, 작은 걸음으로 정확한 위치를 찾죠? AI의 **학습률(learning rate)**도 이렇게 점점 줄여갑니다.
실행해보기: 학습률 변화 시뮬레이션
python# 학습률 = AI가 한 번에 얼마나 크게 배울지 정하는 값 # 처음엔 크게, 나중엔 작게! initial_lr = 0.1 # 처음 학습률 print("📉 학습률 스케줄링 시뮬레이션") print("=" * 50) for epoch in range(1, 11): # 구간별로 학습률 조정 if epoch <= 3: lr = initial_lr # 초반: 큰 보폭 phase = "🏃 큰 걸음" elif epoch <= 7: lr = initial_lr * 0.1 # 중반: 중간 보폭 phase = "🚶 중간 걸음" else: lr = initial_lr * 0.01 # 후반: 작은 보폭 phase = "🐌 작은 걸음" print(f"Epoch {epoch:2d}: 학습률 = {lr:.4f} {phase}") print("\n→ 학습률이 점점 줄어들어 정밀하게 최적점을 찾습니다!")
🔁 5. while 반복문
비유: "95점 넘을 때까지 공부한다!" 처럼, 목표에 도달할 때까지 계속 반복하는 것이 while 반복문입니다. 몇 번 반복할지 미리 모를 때 사용합니다.
실행해보기: 목표 달성까지 반복
python# while = "조건이 만족될 때까지 계속 반복" import random random.seed(1) target = 90 # 목표: 90점 score = 40 # 현재 실력: 40점 epoch = 0 print(f"🎯 목표: {target}점 이상 달성하기!") print(f"현재 실력: {score}점") print("=" * 40) while score < target: # 90점 넘을 때까지 반복! epoch += 1 improvement = random.randint(3, 15) # 매번 3~15점 향상 score = min(score + improvement, 100) print(f"Epoch {epoch}: +{improvement}점 향상 → 현재 {score}점") print(f"\n🎉 목표 달성! {epoch}번 만에 {target}점을 넘었습니다!") print("→ while은 '몇 번 할지 모르지만, 될 때까지!' 할 때 사용합니다")
🧩 종합 예제: AI 학습 전체 과정 시뮬레이션
지금까지 배운 for, 중첩 for, if(Early Stopping), 학습률 스케줄링을 모두 합친 종합 시뮬레이션입니다.
pythonimport random random.seed(42) # === 설정 === epochs = 15 batch_size = 4 total_data = 12 initial_lr = 0.1 best_loss = float('inf') # 무한대 (아직 최고 기록 없음) patience = 0 max_patience = 3 print("🤖 AI 학습 전체 과정 시뮬레이션") print(f" 데이터: {total_data}개 | Batch: {batch_size}개씩 | 최대 {epochs} Epochs") print("=" * 55) loss = 1.0 # 초기 오차 for epoch in range(1, epochs + 1): # 1. 학습률 스케줄링 if epoch <= 5: lr = initial_lr elif epoch <= 10: lr = initial_lr * 0.1 else: lr = initial_lr * 0.01 # 2. Batch 처리 (중첩 for 루프) batch_count = 0 for i in range(0, total_data, batch_size): batch_count += 1 loss = loss * (0.85 + random.uniform(-0.05, 0.05)) # 시뮬레이션 # 3. Early Stopping (if 조건문) if loss < best_loss: best_loss = loss patience = 0 status = "✅ 최고 기록!" else: patience += 1 status = f"⚠️ 정체 ({patience}/{max_patience})" print(f"Epoch {epoch:2d} | lr={lr:.4f} | {batch_count} batches | loss={loss:.4f} | {status}") if patience >= max_patience: print(f"\n🛑 Early Stopping! (Epoch {epoch}에서 중단)") break print(f"\n📊 최종 결과: 최저 loss = {best_loss:.4f}") print("\n💡 이 시뮬레이션에서 배운 것:") print(" • for → Epoch 반복") print(" • 중첩 for → Batch 단위 처리") print(" • if → Early Stopping (더 나아지지 않으면 중단)") print(" • 학습률 → 점점 줄여서 정밀하게 학습")
💡 핵심 요약
| 구문 | AI에서의 역할 | 비유 |
|---|---|---|
| for + range | Epoch 반복 | 문제집 여러 번 풀기 |
| 중첩 for | Batch 처리 | 시험지 묶어서 채점 |
| if | 조건부 저장/분기 | 최고 점수면 저장 |
| break | Early Stopping | 안 나아지면 그만 |
| while | 목표 기반 학습 | 90점 넘을 때까지 |
✅ 학습 체크리스트
- • Epoch, Batch, Iteration 구분 가능
- • Early Stopping 코드 이해
- • 학습률 스케줄링 필요성 이해
- • 전체 학습 루프 구조 파악
레슨 정보
- 레벨
- Level 0: Python 기초
- 예상 소요 시간
- 6분 24초
- 참고 영상
- YouTube 링크
💡실습 환경 안내
코드 블록의 ▶ 실행 버튼을 누르면 브라우저에서 바로 Python을 실행할 수 있습니다.
별도 설치 없이 NumPy, Matplotlib 등 기본 라이브러리를 사용할 수 있습니다.