1. 손실 함수 (Loss Function)

모델의 예측값과 실제값의 차이를 수치화하는 함수. 신경망이 최소화하려는 목표.

손실 함수의 역할

  • 모델의 성능을 정량적으로 측정
  • 학습의 방향을 제시
  • 역전파의 시작점

2. 회귀 문제의 손실 함수

2.1 평균 제곱 오차 (MSE - Mean Squared Error)

특징:

  • 가장 많이 사용되는 회귀 손실
  • 오차를 제곱하여 큰 오차에 더 큰 페널티
  • 미분 가능

사용 시기:

  • ✅ 일반적인 회귀 문제
  • ✅ 이상치가 적을 때

코드:

# Keras
model.compile(loss='mse', optimizer='adam')
 
# PyTorch
import torch.nn as nn
criterion = nn.MSELoss()

2.2 평균 절대 오차 (MAE - Mean Absolute Error)

특징:

  • 이상치에 강건 (MSE보다)
  • 모든 오차를 동등하게 취급

사용 시기:

  • ✅ 이상치가 많을 때
  • ✅ 모든 오차를 균등하게 다루고 싶을 때

코드:

# Keras
model.compile(loss='mae', optimizer='adam')
 
# PyTorch
criterion = nn.L1Loss()

2.3 Huber Loss

특징:

  • MSE와 MAE의 조합
  • 작은 오차에는 MSE, 큰 오차에는 MAE
  • 이상치에 강건하면서 미분 가능

사용 시기:

  • ✅ 이상치가 있지만 정확한 예측도 중요할 때

3. 분류 문제의 손실 함수

3.1 이진 크로스 엔트로피 (Binary Cross-Entropy)

사용:

  • 이진 분류 (0 또는 1)
  • 출력층: Sigmoid

예시:

실제값 y = 1, 예측 ŷ = 0.9
BCE = -[1×log(0.9) + 0×log(0.1)] = 0.105 (낮음 = 좋음)

실제값 y = 1, 예측 ŷ = 0.1
BCE = -[1×log(0.1) + 0×log(0.9)] = 2.303 (높음 = 나쁨)

코드:

# Keras
model.compile(loss='binary_crossentropy', optimizer='adam')
 
# PyTorch
criterion = nn.BCELoss()  # Sigmoid 포함 안 됨
# 또는
criterion = nn.BCEWithLogitsLoss()  # Sigmoid 포함

3.2 범주형 크로스 엔트로피 (Categorical Cross-Entropy)

사용:

  • 다중 클래스 분류 (K개 클래스 중 하나)
  • 출력층: Softmax
  • 레이블: One-hot encoding

예시:

3개 클래스, 실제 클래스 = 1 (원-핫: [0, 1, 0])
예측 확률 ŷ = [0.1, 0.8, 0.1]
CCE = -[0×log(0.1) + 1×log(0.8) + 0×log(0.1)] = 0.223

코드:

# Keras
model.compile(loss='categorical_crossentropy', optimizer='adam')
 
# PyTorch
criterion = nn.CrossEntropyLoss()  # Softmax 포함

3.3 Sparse Categorical Cross-Entropy

범주형 크로스 엔트로피와 동일하지만 레이블이 정수 형태

사용:

  • ✅ 다중 클래스 분류
  • 레이블: 정수 (0, 1, 2, …, K-1)
  • One-hot encoding 불필요

예시:

레이블: 1 (정수)
예측: [0.1, 0.8, 0.1]
동일한 손실 계산

코드:

# Keras
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')

4. 손실 함수 선택 가이드

문제 유형손실 함수출력 활성화
회귀 (일반)MSENone (선형)
회귀 (이상치 많음)MAE, HuberNone
이진 분류Binary Cross-EntropySigmoid
다중 분류 (one-hot)Categorical Cross-EntropySoftmax
다중 분류 (정수)Sparse Categorical Cross-EntropySoftmax

5. 역전파 (Backpropagation)

출력층에서 입력층 방향으로 기울기를 계산하여 가중치를 업데이트하는 알고리즘

핵심 아이디어

연쇄 법칙 (Chain Rule) 사용:

역전파 과정

1단계: 순전파

  • 입력 → 은닉층 → 출력층
  • 예측값 계산

2단계: 손실 계산

3단계: 출력층 기울기

4단계: 역방향 전파

각 층 에서:

5단계: 가중치 업데이트

역전파 예시

# PyTorch에서 자동으로 처리
loss = criterion(outputs, labels)
loss.backward()  # 자동으로 모든 기울기 계산
optimizer.step()  # 가중치 업데이트

6. 기울기 문제

6.1 기울기 소실 (Vanishing Gradient)

문제:

  • 깊은 신경망에서 초기 층으로 갈수록 기울기가 0에 가까워짐
  • 학습이 매우 느려지거나 멈춤

원인:

  • Sigmoid, Tanh의 기울기가 최대 1보다 작음
  • 여러 층을 거치며 기울기가 곱해져 소실

해결책:

  • ✅ ReLU 활성화 함수 사용
  • ✅ 배치 정규화 (Batch Normalization)
  • ✅ 잔차 연결 (Residual Connection, ResNet)
  • ✅ 적절한 가중치 초기화 (He, Xavier)

6.2 기울기 폭발 (Exploding Gradient)

문제:

  • 기울기가 너무 커져 가중치가 불안정하게 업데이트
  • NaN 값 발생

해결책:

  • 기울기 클리핑 (Gradient Clipping)
  • ✅ 적절한 가중치 초기화
  • ✅ 낮은 학습률
  • ✅ 배치 정규화

기울기 클리핑 예시:

# PyTorch
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
 
# Keras (optimizer에 내장)
optimizer = keras.optimizers.Adam(clipnorm=1.0)

7. 최적화 알고리즘 (Optimizers)

7.1 경사 하강법 (Gradient Descent)

배치 경사 하강법 (Batch GD)

특징:

  • 전체 데이터셋 사용
  • 느리지만 안정적
  • 메모리 많이 필요

확률적 경사 하강법 (SGD)

특징:

  • 한 번에 하나의 샘플 사용
  • 빠르지만 불안정
  • 메모리 효율적

미니배치 경사 하강법 (Mini-batch GD) ⭐

특징:

  • 작은 배치 단위로 학습
  • 가장 많이 사용 (보통 32, 64, 128, 256)
  • 속도와 안정성의 균형

코드:

# PyTorch
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
 
# Keras
model.compile(optimizer='sgd', loss='mse')

7.2 모멘텀 (Momentum)

특징:

  • 이전 기울기의 방향을 일부 유지
  • 진동을 줄이고 수렴 속도 향상
  • 관성 효과
  • 보통

비유: 공을 언덕 아래로 굴리면 관성으로 계속 굴러감

코드:

# PyTorch
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

7.3 RMSprop

특징:

  • 각 파라미터마다 적응적 학습률
  • 기울기가 큰 방향은 학습률 감소
  • RNN에서 효과적
  • 보통 ,

코드:

# PyTorch
optimizer = torch.optim.RMSprop(model.parameters(), lr=0.001)

7.4 Adam (Adaptive Moment Estimation) ⭐

Momentum + RMSprop의 조합. 가장 많이 사용되는 옵티마이저

편향 보정 (Bias Correction):

가중치 업데이트:

하이퍼파라미터:

  • (1차 모멘텀)
  • (2차 모멘텀)
  • (학습률)

특징:

  • 가장 많이 사용
  • ✅ 대부분의 경우 잘 작동
  • ✅ 하이퍼파라미터 튜닝이 덜 필요
  • ✅ 적응적 학습률

코드:

# PyTorch
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
 
# Keras
model.compile(optimizer='adam', loss='mse')
# 또는 커스텀
from tensorflow.keras.optimizers import Adam
optimizer = Adam(learning_rate=0.001)

7.5 AdamW

Adam에 가중치 감쇠(Weight Decay)를 올바르게 적용한 버전

특징:

  • Adam보다 일반화 성능 향상
  • Transformer 모델에서 많이 사용
  • L2 정규화와 Weight Decay의 차이 수정

코드:

# PyTorch
optimizer = torch.optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)

8. 옵티마이저 선택 가이드

상황추천 옵티마이저
일반적인 경우Adam
빠른 수렴 필요Adam, AdamW
일반화 성능 중요SGD + Momentum, AdamW
RNN, LSTMAdam, RMSprop
TransformerAdamW
대규모 데이터SGD + Momentum
처음 시작Adam (기본 선택)

9. 학습률 스케줄링 (Learning Rate Scheduling)

9.1 고정 학습률

장점: 간단 단점: 최적이 아닐 수 있음


9.2 스텝 감쇠 (Step Decay)

예: 매 10 에포크마다 학습률을 절반으로

# PyTorch
from torch.optim.lr_scheduler import StepLR
scheduler = StepLR(optimizer, step_size=10, gamma=0.5)

9.3 지수 감쇠 (Exponential Decay)

# PyTorch
from torch.optim.lr_scheduler import ExponentialLR
scheduler = ExponentialLR(optimizer, gamma=0.95)

9.4 코사인 어닐링 (Cosine Annealing)

특징:

  • 부드럽게 감소
  • 주기적 재시작 가능 (Warm Restarts)
# PyTorch
from torch.optim.lr_scheduler import CosineAnnealingLR
scheduler = CosineAnnealingLR(optimizer, T_max=50)

9.5 워밍업 (Warmup)

처음 몇 에포크 동안 학습률을 서서히 증가

사용:

  • Transformer 모델
  • 대규모 배치 학습

9.6 ReduceLROnPlateau ⭐

검증 손실이 개선되지 않으면 학습률 감소

# PyTorch
from torch.optim.lr_scheduler import ReduceLROnPlateau
scheduler = ReduceLROnPlateau(
    optimizer, mode='min', factor=0.5, patience=5, min_lr=1e-7
)
 
# 학습 루프에서
val_loss = validate(...)
scheduler.step(val_loss)  # 검증 손실 전달
# Keras
from tensorflow.keras.callbacks import ReduceLROnPlateau
reduce_lr = ReduceLROnPlateau(
    monitor='val_loss', factor=0.5, patience=5, min_lr=1e-7
)
model.fit(X, y, callbacks=[reduce_lr])

핵심 요약

손실 함수 선택

  • 회귀: MSE (일반), MAE (이상치 많음)
  • 이진 분류: Binary Cross-Entropy
  • 다중 분류: Categorical Cross-Entropy

옵티마이저 선택

  • 🥇 1순위: Adam (기본 선택)
  • 🥈 2순위: AdamW (Transformer, 일반화 중요)
  • 🥉 3순위: SGD + Momentum (대규모 데이터)

학습률

  • 기본값: Adam (0.001), SGD (0.01)
  • ReduceLROnPlateau로 자동 조정 추천

기억할 것

  • ✅ 손실 함수는 문제 유형에 따라 선택
  • ✅ Adam이 대부분의 경우 잘 작동
  • ✅ 학습률 스케줄링으로 성능 향상
  • ✅ 기울기 소실/폭발 문제 주의

다음 학습

  1. 정규화_기법 (Regularization) - 과적합 방지와 안정적인 학습
  2. 딥러닝_실전_가이드 - 하이퍼파라미터 튜닝과 문제 해결

딥러닝 기초