┌──────────────── 1 스텝(step) ────────────────┐
데이터 →│ 배치 샘플링 → 순전파 → 손실 계산 → 역전파(그래디언트) → 가중치 갱신 │→ 다음 스텝
└──────────────────────────────────────────────┘
↑배치 크기 ↑활성화 함수 ↑소실/폭발 ↑학습률·스케줄
배치 크기 : 한 번의 갱신에 쓰는 샘플 수 → 메모리·GPU 활용·일반화에 영향
학습률 : 한 스텝에 가중치를 얼마나 움직일지 → 발산 vs 정체를 가른다
그래디언트 : 층을 거슬러 곱해지며 0으로 사라지거나(소실) 폭주(폭발)
1 에폭 : 전체 학습 데이터를 한 번 다 훑는 것 = (샘플 수 / 배치 크기) 스텝
한 번의 가중치 업데이트에 쓰는 샘플 수다.
배치 크기 장점 단점 작음 (예: 32)노이즈가 일반화에 도움, 메모리↓ 업데이트 잦아 느릴 수 있음, 노이즈 큼 큼 (예: 1024+)GPU 활용↑, 업데이트 안정 메모리↑, 평탄 최소점 놓쳐 일반화 저하 가능
조합 수렴 속도 메모리 일반화 언제 고르나 작은 배치 + 작은 학습률 느림 낮음 대체로 양호 GPU 메모리가 빠듯하고 안정성이 우선 작은 배치 + 큰 학습률 불안정 낮음 발산 위험 권장하지 않음(잡음 + 큰 스텝의 최악 조합) 큰 배치 + 큰 학습률 빠름 높음 조정 필요 대형 GPU에서 처리량을 올릴 때(선형 스케일링 경험칙) 큰 배치 + 작은 학습률 매우 느림 높음 정체 위험 배치만 키우고 학습률을 안 올린 전형적 실수
배치를 키우면 보통 학습률도 함께 키워야 수렴 속도가 유지된다(선형 스케일링 경험칙).
GPU 메모리 초과(OOM)의 흔한 원인이 과도한 배치 크기다 → 배치 축소 또는 gradient accumulation.
작은 배치의 그래디언트 잡음은 손실 표면의 날카로운 최소점을 빠져나와 더 평탄하고 일반화 좋은 영역으로 향하게 돕는다는 관점이 있다. 반대로 매우 큰 배치는 그래디언트가 정확해져 안정적이지만 이런 탐색성을 잃어 일반화가 떨어질 수 있다. 그래서 배치 크기는 단순 속도 문제가 아니라 최적화·일반화 트레이드오프다.
학습률(learning rate)은 한 스텝에 가중치를 얼마나 움직일지다. 학습에서 가장 민감한 하이퍼파라미터.
너무 큼 → 손실이 발산하거나 진동(NaN loss)
너무 작음 → 수렴이 매우 느리고 지역 최소에 갇힘
적정 → 안정적으로 감소
스케줄 동작 언제 쓰나 Step decay 일정 에폭마다 일정 비율로 감소 단순하고 예측 가능한 감쇠가 필요할 때 Exponential decay 지수적으로 점차 감소 부드럽게 계속 줄이고 싶을 때 Cosine annealing 코사인 곡선으로 부드럽게 감소 후반부 미세 조정을 살리고 싶을 때 Warmup 초반에 작은 학습률에서 점차 키움 초기 불안정 억제 — 대형 모델·트랜스포머에서 흔함
판별 신호:
"손실이 NaN / 발산 / 크게 진동" → 학습률이 너무 큼 .
"학습이 거의 안 움직임 / 너무 느림" → 학습률이 너무 작음 또는 그래디언트 소실.
깊은 신경망에서 역전파 시 그래디언트가 곱해지며 생기는 문제다.
문제 증상 대응 Vanishing gradient(소실) 앞쪽 층이 거의 학습 안 됨, 손실 정체 ReLU 계열 활성화, 배치 정규화, 잔차 연결(ResNet), 적절한 가중치 초기화 Exploding gradient(폭발) 손실 NaN/발산, 가중치 급증 그래디언트 클리핑 , 학습률↓, 배치 정규화
증상 가장 유력한 원인 1차 처방 오답 보기로 쓰이기 쉬운 대응 몇 스텝 만에 손실 NaN 학습률 과다 / 그래디언트 폭발 학습률↓ + 그래디언트 클리핑 배치를 1로 축소, 정규화 전부 제거 손실이 크게 진동만 함 학습률 과다 학습률↓, 스케줄 도입(cosine·step) 에폭만 늘리기 초기부터 손실 평탄, 앞쪽 층 가중치 정지 그래디언트 소실 ReLU 계열, 배치 정규화, 잔차 연결, 초기화 모든 활성화를 시그모이드로 교체 (악화시킨다)손실이 아주 천천히만 감소 학습률 과소 학습률↑, warmup 후 감쇠 모델을 더 키우기 학습 시작 직후 OOM 배치 크기 과대 / 모델 크기 배치↓, 그래디언트 누적, 혼합 정밀도 학습률 조정(무관) 손실은 줄지만 GPU 사용률 30% 데이터 로딩·I/O 병목 Profiler로 병목 확인 후 파이프라인 개선 학습률·정규화 손대기(무관)
hyperparameters = {
"gradient_clipping" : 1.0 , # 그래디언트 노름 상한
"lr_scheduler" : "cosine" ,
}
시그모이드·tanh는 포화 구간에서 미분값이 0에 가까워, 깊은 망에서 그래디언트가 연쇄적으로 0으로 수렴(소실)한다. ReLU는 양수 구간 미분이 1이라 이를 완화한다. 폭발은 반대로 1보다 큰 값이 연쇄 곱해져 발산하는 것이며, 그래디언트 클리핑으로 노름 상한을 둬 억제한다. 배치 정규화와 잔차 연결은 양쪽 문제 모두를 완화하는 구조적 장치다.
학습 중 텐서(그래디언트, 가중치, 손실 등)를 캡처해 학습 이상을 자동 탐지 한다.
내장 규칙 무엇을 잡나 대응 vanishing_gradient그래디언트가 0에 수렴 ReLU·배치 정규화·잔차 연결·초기화 exploding_tensor텐서 값 폭주 / NaN·Inf 학습률↓, 그래디언트 클리핑 overfit학습·검증 격차 확대 정규화↑, 증강, 조기 종료 overtraining검증 지표가 개선을 멈추고 악화 학습 조기 중단 loss_not_decreasing손실 정체 학습률·초기화·데이터 점검 class_imbalance클래스 분포 편중 오버샘플링·클래스 가중치·지표 재선정 saturated_activation활성화 포화(시그모이드·tanh) 활성화 함수 교체, 정규화
규칙 위반 시 CloudWatch 이벤트 발생 → 자동 알림이나 학습 조기 중단 트리거 가능.
텐서를 S3에 저장해 사후 분석.
from sagemaker.debugger import Rule, rule_configs
rules = [
Rule.sagemaker(rule_configs.vanishing_gradient()),
Rule.sagemaker(rule_configs.loss_not_decreasing()),
]
est = Estimator( ... , rules = rules)
판별 신호: "학습 도중 그래디언트 소실/폭발·과적합·손실 정체를 자동으로 탐지·알림" → Debugger .
학습의 시스템 자원·성능 병목 을 분석한다(모델 품질이 아니라 효율).
Profiler가 보는 신호 해석 조치 방향 GPU 사용률 낮음, CPU 사용률 높음 데이터 전처리가 CPU 바운드 전처리 오프로드, 워커 수 조정 GPU가 주기적으로 유휴 데이터 로딩·I/O 대기 병목 입력 모드 변경(Pipe/FastFile), 프리페치 GPU 메모리 여유가 큼 배치가 작아 자원을 못 씀 배치 크기↑(학습률도 함께 조정) 전 구간 자원 저활용 인스턴스 과대 선택 더 작은/적은 인스턴스로 비용 절감
CPU/GPU 사용률, GPU 메모리, I/O 대기, 데이터 로딩 병목 등 시스템 메트릭을 수집한다.
"GPU가 놀고 있다(저활용)", "데이터 로딩이 병목", "CPU 바운드" 같은 진단과 권고 리포트를 낸다.
비용 최적화: 인스턴스가 비효율적으로 쓰이면 더 작은/적은 인스턴스를 권고한다.
도구 무엇을 보나 언제 언제 쓰면 안 되나 Debugger 학습 중 텐서 = 모델 품질 이상 학습 작업 실행 중 자원 병목·비용 분석에는 부적합 Profiler CPU/GPU·I/O = 자원·성능 학습 작업 실행 중 그래디언트 소실·과적합 탐지에는 부적합 Model Monitor 배포된 엔드포인트의 입력·예측 드리프트 학습이 아니라 배포 후 운영 학습 중 이상 탐지 용도로 고르면 오답
판별 신호:
"학습 품질 이상(소실/폭발/과적합)" → Debugger .
"자원 활용·병목·GPU 저활용·학습 속도/비용 비효율" → Profiler .
⚠️ 함정 : Debugger·Profiler·Model Monitor 셋을 섞은 보기가 있다. 품질=Debugger / 자원=Profiler / 배포 후 드리프트=Model Monitor , 이 한 줄이면 대부분 갈린다.
기법 효과 언제 쓰나 주의 혼합 정밀도(FP16/BF16) 메모리↓, 속도↑ 큰 배치·대형 모델 수치 안정성 확인 필요 그래디언트 누적 작은 배치를 여러 번 모아 큰 배치 효과 메모리 제약으로 큰 배치가 불가할 때 스텝당 시간이 늘어난다 체크포인트 중단 지점부터 재개 긴 학습, Spot 중단 대비(Day1 연계) S3 경로 설정이 없으면 무의미
⚠️ 함정 : "GPU 메모리 초과"라고 무조건 모델 병렬이 답은 아니다. 모델 자체가 안 들어가면 모델 병렬 , 배치 때문이면 그래디언트 누적·혼합 정밀도·배치 축소 다.
학습이 기대대로 되지 않는다
├─ 작업이 아예 실패하는가?
│ └─ OOM 오류 → 메모리 문제
│ ├─ 모델 자체가 단일 GPU에 안 들어감 → 모델 병렬(Day1)
│ └─ 배치 때문 → 배치↓ / 그래디언트 누적 / 혼합 정밀도
├─ 손실이 NaN·발산·큰 진동인가?
│ └─ 예 → 학습률 과다 또는 그래디언트 폭발
│ → 학습률↓ + 그래디언트 클리핑 (+ 배치 정규화)
├─ 손실이 거의 안 줄고 평탄한가?
│ ├─ 앞쪽 층 가중치가 거의 안 변함 → 그래디언트 소실
│ │ → ReLU 계열 / 배치 정규화 / 잔차 연결 / 초기화 재검토
│ └─ 전 구간이 느리게만 감소 → 학습률 과소 → 학습률↑, warmup
├─ 손실은 잘 줄지만 학습이 느리고 비싼가?
│ └─ 예 → 자원 문제 → Profiler로 병목 확인
│ ├─ GPU 유휴 / I/O 대기 → 입력 파이프라인 개선
│ └─ 전 구간 저활용 → 인스턴스 축소로 비용 절감
└─ 손실은 줄지만 검증이 나빠지는가?
└─ 예 → 일반화 문제(Day3) → 정규화·증강·조기 종료
(Debugger의 overfit / overtraining 규칙으로 자동 탐지 가능)
지문 단서 고를 답 이유 "몇 스텝 만에 손실이 NaN으로 발산" 학습률↓ + 그래디언트 클리핑 학습률 과다·폭발의 전형적 증상 "앞쪽 층 가중치가 갱신되지 않고 손실 정체" ReLU·배치 정규화·잔차 연결·초기화 그래디언트 소실 완화 기법들 "모든 활성화를 시그모이드로 바꾼다" 오답 보기 포화로 소실을 오히려 악화시킨다 "소실·과적합·손실 미감소를 자동 탐지하고 알림·조기중단" SageMaker Debugger 내장 규칙 + CloudWatch 이벤트 트리거 "GPU 사용률이 낮고 데이터 로딩 병목이 의심된다" SageMaker Profiler 시스템 메트릭으로 병목·비용 진단 "큰 배치로 OOM인데 배치 효과는 유지하고 싶다" 그래디언트 누적 여러 작은 배치의 그래디언트를 모아 한 번에 갱신 "배치를 키웠는데 수렴이 더 느려졌다" 학습률도 함께 키운다 선형 스케일링 경험칙 "배포 후 입력 분포가 변한 것 같다" Model Monitor 학습 도구가 아니라 운영 모니터링
내일은 Week 8 전체(학습 작업·AMT·일반화·최적화)를 종합 복습하며 시험 관점으로 묶는다.
배치 크기(batch size) : 가중치를 한 번 갱신할 때 쓰는 샘플 수. 메모리와 GPU 활용, 일반화에 동시에 영향을 준다.
학습률(learning rate) : 한 스텝에 가중치를 얼마나 움직일지 정하는 값. 학습에서 가장 민감한 하이퍼파라미터.
학습률 스케줄 / warmup : 학습이 진행되면서 학습률을 점점 줄이는(step·exponential·cosine) 규칙 / 반대로 초반에 아주 작게 시작해 서서히 키워 초기 불안정을 줄이는 구간.
그래디언트 소실(vanishing gradient) : 역전파에서 기울기가 층을 거치며 0에 가까워져 앞쪽 층이 학습되지 않는 현상. 시그모이드·tanh의 포화가 주범이다.
그래디언트 폭발(exploding gradient) : 반대로 기울기가 연쇄적으로 커져 손실이 NaN으로 발산하는 현상. 그래디언트 클리핑으로 노름에 상한을 둬 억제한다.
잔차 연결(residual connection) / 배치 정규화 : 입력을 몇 개 층 건너뛰어 더해 기울기가 지름길로 흐르게 하는 구조(ResNet) / 층 출력을 배치 단위로 정규화해 학습을 안정시키는 기법. 둘 다 소실·폭발을 완화한다.
혼합 정밀도 / 그래디언트 누적 : FP16/BF16을 섞어 써 메모리를 줄이고 속도를 높이는 방법 / 작은 배치들의 기울기를 모아 한 번에 갱신해 큰 배치 효과를 내는 기법. 둘 다 OOM 회피에 쓴다.
SageMaker Debugger : 학습 중 텐서를 캡처해 소실·폭발·과적합 등 품질 이상을 내장 규칙으로 자동 탐지하고 CloudWatch 이벤트를 띄우는 기능.
SageMaker Profiler : CPU/GPU 사용률과 I/O 등 시스템 자원 을 분석해 병목과 비용 비효율을 짚어주는 기능.
OOM(Out Of Memory) : GPU 메모리 초과 오류. 배치가 과대하거나 모델 자체가 디바이스에 안 들어갈 때 발생한다.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
딥러닝 모델을 학습하는데 몇 스텝 만에 손실이 NaN으로 발산한다. 가장 가능성 높은 원인과 대응은?
A 학습률이 너무 작다 — 학습률을 더 줄인다 B 학습률이 너무 크거나 그래디언트 폭발 — 학습률을 낮추고 그래디언트 클리핑 적용 C 배치 크기가 너무 작다 — 배치를 1로 줄인다 D 정규화가 과해서다 — 정규화를 모두 제거한다 매우 깊은 신경망에서 앞쪽 층의 가중치가 거의 갱신되지 않고 손실이 초기부터 정체된다. 이 그래디언트 소실 문제를 완화하는 기법으로 가장 거리가 먼 것은?
A ReLU 계열 활성화 함수 사용 B 배치 정규화 적용 C 잔차 연결(ResNet) 도입 D 모든 활성화를 시그모이드로 교체 학습 중 그래디언트 소실, 과적합, 손실 미감소 같은 학습 품질 이상을 자동으로 탐지하고 위반 시 알림이나 조기 중단을 트리거하려 한다. 가장 적합한 SageMaker 기능은?
A SageMaker Profiler B SageMaker Model Monitor C SageMaker Debugger D SageMaker Clarify 학습 작업의 GPU 사용률이 낮고 데이터 로딩에서 병목이 의심된다. 시스템 자원 활용과 병목을 분석해 비용·속도를 개선하려 한다. 가장 적합한 도구는?
A SageMaker Profiler B SageMaker Debugger 규칙 C Automatic Model Tuning D SHAP 값 분석 대형 모델 학습 중 큰 배치 크기 때문에 GPU 메모리 초과(OOM)가 발생한다. 배치가 주는 효과를 유지하면서 메모리 제약을 회피하는 기법은?
A 학습률을 0으로 설정 B 검증 세트를 제거 C 그래디언트 누적(gradient accumulation)으로 작은 배치를 여러 번 모음 D 에폭 수를 늘림