[DL] 딥러닝 모델 학습 기술: 이론

jul ee·2025년 6월 11일

데이터 성장기

목록 보기
129/139

🖇  1. 콜백 (Callbacks)
🖇  2. 학습 단위 (Batch)
🖇  3. 데이터 스케일링 (Data Scaling)
🖇  4. 학습률과 에폭 (Learning Rate & Epochs)
🖇  5. 은닉층과 뉴런 수 (Hidden Layers & Neurons)
🖇  6. 활성화 함수 (Activation Function)
🖇  7. 가중치 초기화 (Weight Initialization)
🖇  8. 옵티마이저 (Optimizer)


딥러닝 모델의 성능에 있어서 '학습 기술'이 중요하게 작용한다. 어떤 활성화 함수를 사용할지, 가중치는 어떻게 초기화할지, 학습률은 얼마나 줄지, 배치 단위는 어떻게 설정할지 등 세부적인 설정이 전체 결과를 결정짓게 된다.

이 글에서는 이러한 딥러닝 학습 기술들의 특징을 기반으로 반드시 알아야 할 요소를 주제별로 정리해 보았다. 그 개념과 흐름을 이해하는 데 중점을 두었다.



🖇  1. 콜백 (Callbacks)

콜백은 모델 학습 중간에 특정 조건을 만족하면 실행되는 기능이다.
Keras에서는 fit() 함수의 인자로 callbacks 리스트를 통해 지정할 수 있다.

ModelCheckpoint

  • 일정 주기로 모델의 가중치를 저장해두는 기능
  • 학습 도중 중단되거나 성능이 나빠진 경우, 가장 좋은 성능의 가중치를 복구할 수 있음

EarlyStopping

  • 검증 성능이 개선되지 않으면 학습을 자동 중단시킴
  • patience 만큼의 여유 기간을 두고 개선 여부를 판단
  • 과적합을 방지하고, 불필요한 에폭을 줄이는 데 유리함
  • 기본적으로는 monitor='val_loss'를 기준으로 조기 종료를 판단하며, 필요에 따라 val_accuracy나 다른 지표로 변경 가능함
  • restore_best_weights=True로 설정하면 별도 저장 없이도 최적 가중치를 자동 복원

LearningRateScheduler

  • 학습이 진행됨에 따라 학습률을 점차 줄이거나 일정한 전략으로 조절
  • 초기에는 빠르게 학습하다가 후반에 더 정밀한 수정을 가능하게 함

TensorBoard

  • 학습 과정의 손실, 정확도, 학습률 등의 변화를 시각화하여 확인 가능
  • 로그 파일을 저장할 디렉토리를 지정하면 웹 인터페이스로 간편하게 모니터링 가능

💡 이처럼 콜백은 학습 도중 모델이 과적합되지 않도록 막아주고, 가장 성능이 좋았던 상태를 자동으로 저장하거나 복원해서 실수 없이 안정적으로 학습을 마칠 수 있게 해준다.




🖇  2. 학습 단위 (Batch)

전체 데이터를 한 번에 학습시키는 Full Batch 방식은 이론상 정확하지만, 계산 효율이 매우 떨어진다. 대신 다음의 방식들이 자주 사용된다.

Stochastic Gradient Descent (SGD)

  • 데이터 샘플을 하나씩 학습에 사용
  • 진동이 심하고 수렴 경로가 불안정하지만 메모리 효율이 높음

Mini-Batch

  • 전체 데이터를 일정한 크기(n)로 분할하여 학습
  • SGD의 장점(속도)과 Batch의 장점(안정성)을 적절히 결합한 형태
  • 학습 속도, 수렴 안정성, 메모리 사용 사이의 균형을 잡기 위함

Batch Size가 작을수록 진동이 커지고 시간이 오래 걸리지만, 일반화에 유리한 경우도 있다.

💡 실제로 대부분 Mini-Batch 방식을 사용한다. 적절한 배치 크기 선택은 하드웨어, 메모리, 데이터 특성에 따라 달라진다.




🖇  3. 데이터 스케일링 (Data Scaling)

입력 데이터의 스케일이 너무 다르면 특정 특성이 가중치 학습에 불균형한 영향을 미친다. 이로 인한 왜곡을 방지하기 위해 전처리가 필요하다.

표준화 (Standardization)

  • 평균을 0, 분산을 1로 조정 (z-score normalization)
    →  정규분포 형태로 스케일 조정
  • 선형 회귀, PCA, 신경망 등 대부분의 기법에서 안정적인 학습을 유도함
  • 딥러닝에서는 표준화가 더 일반적이며, 배치 정규화(Batch Normalization)나 층 정규화(Layer Normalization)와도 관련 깊음

정규화 (Normalization)

  • 모든 값을 0~1 범위로 조정 (min-max scaling)
  • 이미지 픽셀과 같이 고정 범위가 있는 경우에 적합

💡 표준화는 모델이 정규분포 전제를 포함할 때 유리하고, 정규화는 범위 제한이 필요한 상황에 자주 사용된다.




🖇  4. 학습률과 에폭 (Learning Rate & Epochs)

학습률 (learning rate)

→  손실 함수의 기울기(gradient)에 곱해지는 값

  • 가중치를 얼마나 크게 변화시킬지를 결정함
  • 너무 크면 최솟값을 지나쳐 버릴 수 있고(overshoot) → 발산
  • 너무 작으면 수렴 속도가 느려짐
  • 보통 초기에는 큰 값을 주고 점차 줄이는 방식(step decay, cosine decay 등)을 사용함
    • Step Decay:  일정 에폭마다 학습률을 줄임
    • Cosine Annealing:  학습률을 코사인 함수 곡선처럼 점차 감소
    • Warm-up:  초반 몇 에폭 동안 학습률을 천천히 증가시킴

에폭 (epochs)

→  전체 데이터를 몇 번 반복 학습할지를 의미

  • 학습률이 작아질수록 충분한 학습을 위해 더 많은 에폭이 필요해짐
  • 적절한 에폭은 실험을 통해 찾아야 함 (EarlyStopping을 통해 자동 조절 가능)

💡 학습률과 에폭은 서로 보완 관계이고, 일정 학습률 이하로 줄어들면 더 이상 손실 감소 효과가 없기 때문에 EarlyStopping과 연동하는 것이 일반적이다.




🖇  5. 은닉층과 뉴런 수 (Hidden Layers & Neurons)

딥러닝 모델의 표현력은 은닉층(hidden layer)의 수와 각 층의 뉴런(neuron) 수에 따라 달라진다.

  • 층이 너무 적으면 패턴을 학습하지 못함 → 과소적합
  • 너무 많으면 학습 데이터에 과도하게 적합함 → 과대적합
  • 일반적으로 1~3개의 은닉층으로도 충분한 성능을 낼 수 있으며, 층 수보다 뉴런 수 조절이 더 민감하게 작용하는 경우도 많음

💡 적절한 구조는 데이터의 복잡도에 따라 달라지고, Dropout이나 정규화를 통해 복잡도 제어가 가능하다.

💡 중요한 건 층의 수가 아니라 필요한 만큼의 표현력만 확보하는 것이다.




🖇  6. 활성화 함수 (Activation Function)

딥러닝은 선형 모델로는 표현할 수 없는 비선형 패턴을 학습해야 하므로 활성화 함수가 필요하다.
→  딥러닝이 단순 선형 회귀보다 뛰어난 이유는 비선형 활성화 함수 덕분이다.

Sigmoid 계열

  • Sigmoid, Tanh, Softsign 등
  • 출력이 제한적(0~1 또는 -1~1)
  • 출력값이 0 또는 1 근처에서 평탄해져서 기울기 소실(vanishing gradient)이 발생할 수 있음
  • RNN의 출력층 등 특수한 경우에만 사용됨

ReLU 계열

  • ReLU, Leaky ReLU, ELU, SELU 등
  • 기울기 소실 문제가 적고 연산 속도가 빠름
  • 단점: 음수 입력에서 출력이 0이 되어 뉴런이 죽는 문제(dead neuron)가 생길 수 있음 →  ReLU
  • 대부분의 CNN, DNN에서 기본 활성화 함수로 채택

💡 ReLU가 기본값으로 사용되고, 음수 대응이 필요한 경우 Leaky ReLU 등을 고려한다.




🖇  7. 가중치 초기화 (Weight Initialization)

신경망 학습은 적절한 초기 가중치 없이는 불가능하다.

모든 가중치를 0으로 초기화하면 모든 뉴런이 같은 출력을 내고, 역전파가 동작하지 않는다. 무작위로 초기화하되, 분포를 조절하여 효율적인 학습이 가능하게 하게 해야 한다.

다음은 대표적인 초기화 방법이다.

Xavier 초기화

  • 입력과 출력의 노드 수에 기반하여 분포 조정
  • Sigmoid, Tanh 등 대칭 함수에 적합

He 초기화

  • ReLU 계열 함수에 최적화
  • 평균 0, 표준편차 √(2/n) 분포

💡 올바른 초기화는 학습이 안정적으로 수렴하도록 해주고, 빠른 속도로 최적점에 도달할 수 있도록 만든다.




🖇  8. 옵티마이저 (Optimizer)

옵티마이저는 손실 함수가 최소가 되도록 파라미터를 조정하는 역할을 한다.

  • SGD: 기본 경사 하강법. 단순하지만 느림

  • Momentum, NAG: 경사 방향에 관성을 부여하여 진동 방지

  • Adagrad: 파라미터별 학습률 조절. 자주 업데이트되는 파라미터에 작은 학습률 부여

  • RMSprop: 최근 그래디언트만 반영하여 학습률 조절. RNN 등에서 효과적

  • Adam: 모멘텀 + RMSprop 결합. 대부분의 모델에서 기본값으로 채택

💡 옵티마이저는 모델의 수렴 속도, 안정성, 일반화 성능을 결정하는 중요한 요소다.

💡 딥러닝에서는 대부분 Adam을 시작점으로 사용하고, 성능 향상 필요시 Lookahead, LAMB, Ranger 등의 최신 기법을 탐색한다.




9. 과소적합과 과대적합

모델이 너무 단순하거나 너무 복잡하면 학습 성능에 문제가 발생한다.

과소적합 (Underfitting)

  • 학습 데이터를 충분히 반영하지 못한 상태
  • 모델이 지나치게 단순하거나, 에폭이 부족할 때 발생
  • 해결: 더 복잡한 모델, 더 많은 에폭, 더 좋은 특징 추출

과대적합 (Overfitting)

  • 학습 데이터에 과하게 맞춰져서 새로운 데이터에 일반화되지 않는 상태
  • 너무 많은 파라미터, 너무 많은 학습 횟수, 너무 적은 데이터에서 발생
  • 해결: L1/L2 정규화, Dropout, 데이터 증강, 학습 조기 종료, 모델 단순화

💡 결국 좋은 모델은 학습 데이터에 너무 덜 맞춰서도, 너무 과하게 맞춰서도 안 된다. 일반화 성능을 중심으로 모델을 평가하고 조정해야 한다.




인사이트 및 회고

딥러닝은 모델을 많이 쌓는 것보다 학습을 잘 되게 만드는 설계가 훨씬 중요하다는 것을 알 수 있었다. 에폭을 늘리면 일단 성능이 나아지는 줄 알았는데 학습률이나 가중치 초기화가 잘못되면 아예 시작부터 학습이 안 된다는 걸 이해하였다.

EarlyStopping 같은 콜백이 왜 필요한지, 옵티마이저마다 어떤 차이가 있는지를 이해하는 것도 학습의 안정성에 있어 중요하다는 것을 알았다.

앞으로 학습이 안 되는 상황이 오면 무작정 구조를 바꾸기보다 먼저 학습 환경을 점검해 봐야겠다는 기준이 생겼다.

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글