Skip to main content

최적화 기초

최적화(Optimization)는 손실 함수를 최소화하는 파라미터를 찾는 과정으로, 모든 ML 학습 알고리즘의 핵심 엔진입니다.

학습 목표

  • 손실 함수(Loss Function)의 역할과 종류를 이해합니다.
  • 경사 하강법(Gradient Descent)의 원리와 변형을 파악합니다.
  • 학습률(Learning Rate)이 학습에 미치는 영향을 이해합니다.
  • 볼록 최적화(Convex Optimization)의 기본 개념을 학습합니다.

왜 중요한가

ML 모델을 “학습한다”는 것은 곧 손실 함수를 최소화하는 파라미터를 찾는 최적화 문제를 푸는 것입니다. 경사 하강법을 이해하면 학습률 설정, 수렴 문제 진단, 최적화 알고리즘 선택의 근거를 갖추게 됩니다.

핵심 개념

손실 함수 (Loss Function)

모델의 예측과 실제 값 사이의 차이를 수치로 측정합니다.
손실 함수수식용도관련 알고리즘
MSE(1/n)sum((y-y_hat)^2)회귀선형 회귀
MAE(1/n)sum(|y-y_hat|)회귀 (이상치 강건)Huber 회귀
Cross-Entropy-sum(y*log(y_hat))분류로지스틱 회귀
Hinge Losssum(max(0, 1-y*y_hat))분류 (마진)SVM
import numpy as np

y_true = np.array([3.0, 5.0, 2.5, 7.0])
y_pred = np.array([2.8, 5.2, 2.3, 6.8])

# MSE (Mean Squared Error)
mse = np.mean((y_true - y_pred) ** 2)
print(f"MSE: {mse:.4f}")  # 0.0450

# MAE (Mean Absolute Error)
mae = np.mean(np.abs(y_true - y_pred))
print(f"MAE: {mae:.4f}")  # 0.2000

경사 하강법 (Gradient Descent)

손실 함수의 기울기(그래디언트)를 따라 파라미터를 반복적으로 갱신합니다. 핵심 아이디어: 산에서 내려갈 때 가장 경사가 급한 방향으로 한 걸음씩 내딛는 것과 같습니다.
파라미터_new = 파라미터_old - 학습률 * 기울기
import numpy as np

# 간단한 1차원 경사 하강법 시뮬레이션
# 손실 함수: f(x) = x^2 (최솟값: x=0)

x = 5.0             # 초기값
learning_rate = 0.1  # 학습률
history = [x]

for step in range(20):
    gradient = 2 * x        # f'(x) = 2x
    x = x - learning_rate * gradient  # 파라미터 갱신
    history.append(x)

print(f"최종 x: {x:.6f}")   # 0에 수렴
print(f"반복 횟수: {len(history) - 1}")

경사 하강법 변형

변형배치 크기특징장단점
배치 GD전체 데이터안정적 수렴느림, 메모리 많이 사용
확률적 GD (SGD)1개 샘플빠른 갱신노이즈 많음, 불안정
미니배치 GDn개 샘플균형 잡힌 접근실무에서 가장 많이 사용
from sklearn.linear_model import SGDClassifier

# SGD를 사용한 분류 (미니배치 경사 하강법)
model = SGDClassifier(
    loss="log_loss",     # 로지스틱 손실 (= 교차 엔트로피)
    learning_rate="optimal",
    max_iter=1000,
    random_state=42
)
model.fit(X_train, y_train)

학습률 (Learning Rate)

학습률은 경사 하강법에서 가장 중요한 하이퍼파라미터입니다.
학습률영향
너무 큰 경우발산 — 최솟값을 지나쳐서 손실이 오히려 증가
너무 작은 경우수렴이 매우 느림 — 학습 시간 과다
적절한 경우빠르고 안정적으로 최솟값에 수렴
# 학습률에 따른 수렴 비교
learning_rates = [0.01, 0.1, 0.5, 1.5]
for lr in learning_rates:
    x = 5.0
    for _ in range(30):
        x = x - lr * (2 * x)
    print(f"학습률 {lr}: 최종 x = {x:.4f}")

볼록 최적화 (Convex Optimization)

  • 볼록 함수: 지역 최솟값 = 전역 최솟값인 함수입니다. 선형 회귀의 MSE 손실이 대표적입니다.
  • 비볼록 함수: 여러 지역 최솟값이 존재합니다. 신경망의 손실 함수가 해당합니다.
볼록 함수에서는 경사 하강법이 항상 전역 최솟값을 찾지만, 비볼록 함수에서는 초기값에 따라 지역 최솟값에 빠질 수 있습니다.

AI/ML에서의 활용

알고리즘최적화 방법손실 함수
선형 회귀정규방정식 or GDMSE
로지스틱 회귀GD / L-BFGSCross-Entropy
SVMQP (이차 계획법)Hinge Loss
SGD ClassifierSGD다양한 선택 가능
XGBoost2차 근사 최적화커스텀 가능
네. Adam, RMSProp, AdaGrad 등의 적응형 학습률 방법이 딥러닝에서 많이 사용됩니다. scikit-learn에서는 L-BFGS, Newton-CG 등의 2차 최적화 방법도 사용합니다.
정규화는 손실 함수에 파라미터 크기에 대한 페널티를 추가합니다. L1 정규화(Lasso)는 |w|를, L2 정규화(Ridge)는 w^2를 더합니다. → 과적합과 과소적합

체크리스트

  • MSE와 Cross-Entropy 손실 함수의 차이를 설명할 수 있다
  • 경사 하강법의 갱신 규칙을 설명할 수 있다
  • 학습률이 학습에 미치는 영향을 설명할 수 있다
  • 볼록 함수와 비볼록 함수의 차이를 이해한다

다음 문서