AI Development

모델이 학습되지 않는 이유 - loss, grad_norm, learning_rate, epoch, batch_size 정리

쟤리 2025. 10. 29. 10:12
728x90
반응형

들어가며

딥러닝 모델을 학습시키다 보면, 이런 상황을 한 번쯤 겪게 됩니다.

" 손실 (Loss)은 줄지 않고 Accuracy는 비슷하네 .. learning rate를 낮춰야 하나? gradient가 터졌나? "

 

처음에는 그냥 epoch을 늘리면 되겠지하며 돌렸지만

학습이 오히려 불안정해지고 손실이 발산하는 경험을 했습니다.

 

이 문제를 해결하려면, 단순히 하이퍼파라미터를 감으로 조정하는 게 아니라

모델 학습의 핵심 지표인 loss, grad_norm, learning_rate, epoch의 관계를 정확히 이해해야 했습니다.

 


 

Loss - 모델이 얼마나 틀렸는가의 지표

Loss (손실함수)는 모델의 예측값과 실제값의 차이를 수치화한 값입니다.

즉, 모델이 얼마나 틀렸는가를 나타냅니다.

MSE (Mean Squared Error) 회귀 문제 예측값이 실제값과 얼마나 멀리 떨어졌는지
Cross Entropy Loss 분류 문제 예측 확률이 정답에 얼마나 가깝게 분포했는지

 

Loss 가 작을 수록 모델의 예측이 정답에 가깝다는 뜻입니다.

 

Loss 값이 감소하다가 어느 시점에서 더 이상 줄지 않거나, 갑자기 발산한다면 learning rate 나 gradient clipping을 점검해야 합니다.

이유는 learning rate가 너무 크면 모델이 손실의 최솟값을 지나쳐서 오히려 더 큰 손실로 튕겨 나가고, gradient가 너무 커지면 한 번의 업데이트에서 가중치가 과도하게 변하면서 손실이 안정적으로 줄지 못하고 발산하게 되기 때문입니다.

반대로 learning rate가 너무 작으면 손실이 미세하게 줄다가 local minima에 갇혀 수렴이 멈출 수도 있습니다

 


 

grad_norm - Gradient의 크기 (학습 안정성의 신호)

 

모델이 학습되는 과정에서 가중치(weight)를 업데이트하기 위해 역전파로 계산되는 값이 gradient 입니다.

grand_norm은 모든 gradient 벡터의 크기를 하나로 합친 값입니다.

즉, 가중치가 얼마나 크게 흔들리며 업데이트되는가를 나타냅니다.

 

grad_norm 이 너무 크면 :

-> gradient 폭주 

-> 학습 불안정, loss 발산

 

grad_norm 이 너무 작으면 :

-> gradient 소실

-> 학습 정체, Loss 감소 멈춤

 


 

learning_rate - 한 번에 얼마나 배우느냐

 

learning rate (학습률) 은 모델이 한 번의 업데이트에서 얼마나 크게 이동할지를 결정하는 하이퍼파라미터 입니다.

즉, 얼마나 과감하게 배울 것인가를 조절하는 값입니다.

 

Learning Rate 특징 결과
너무 큼 Loss 발산, 학습 불안정 학습 실패
너무 작음 학습 속도 느림, local minima에 갇힘 비효율적

 

+ Scheduler를 함께 사용해 epoch 마다 learning rate를 조정합니다.

 


 

epoch - 전체 데이터셋을 몇 번 반복 학습할 것인가

 

모델이 전체 학습 데이터를 한 번 모두 학습하는 횟수입니다.

예를 들어,

- 데이터셋 크기 : 10,000 개

- batch size : 100

- epoch = 1 -> 100 step 학습

 

이면

 

epoch이 10이면 전체 데이터를 10번 반복 학습한다는 뜻입니다.

loss가 plateau ( 더 이상 줄지 않는) 구간에서 멈추면 EarlyStopping을 사용해 불필요한 epoch 낭비를 줄입니다.

너무 많은 epoch은 overfitting (과적합) 위험이 있습니다.

 


 

batch_size - 한 번에 몇 개의 데이터를 학습에 사용하느냐

 

batch size는 한 번의 forward / backward 과정에서 사용하는 데이터의 개수입니다.

즉, 모델이 한 번의 업데이트에서 얼마나 많은 데이터를 보고 학습하느냐를 결정합니다.

 

batch size 장점 단점
작음 (예: 16~64) 빠른 피드백, 메모리 절약, 일반화 성능 향상 가능 gradient 노이즈 커짐, 수렴 불안정
큼 (예: 256~1024) gradient 안정적, 학습 속도 향상 (GPU 효율↑) 메모리 부담, local minima에 갇히기 쉬움

 

batch size가 너무 작으면 gradient 의 분산이 커져 loss의 진동 폭이 커지고

너무 크면 학습이 평균적인 방향으로만 이동해 세밀한 패턴 학습이 어려워집니다.

또한 batch size는 learning rate와 직결됩니다 

큰 batch에는 더 큰 learning rate가 적합합니다.

 

+ GPU 리소스에 따라 batch size를 조정하고, gradient accumulation 으로 메모리 제약을 우회하기도 합니다.

 


 

요소 역할 잘못 설정했을 때 문제 점검 포인트
Loss 학습 목표 지표 발산, 정체 lr / grad clipping
grad_norm 학습 안정성 지표 폭주, 소실 clipping / 초기화
learning_rate 학습 속도 발산 / 느린 수렴 scheduler, warmup
epoch 학습 반복 횟수 과적합 / 미학습 early stopping
batch_size 데이터 묶음 크기 불안정 / 과한 자원 사용 lr 연동, 메모리 최적화

 


 

모델이 학습되지 않을 때, 예전에는 "epoch을 더 돌리면 되겠지" 라고 생각했습니다.

하지만 실제로는 batch size, learning rate, gradient의 균형이 더 중요했습니다.

 

이 경험을 통해 배운 점

딥러닝 학습은 단순히 반복이 아니라, 안정적인 최적화를 설계하는 일이라는 것

728x90
반응형