29

mini_bang·2025년 2월 13일

📌 Gradient Boosting: 왜 이렇게 작동할까?

Gradient Boosting은 기존 모델의 오류를 반복적으로 보완하여 점점 더 정확한 예측 모델을 만들어내는 기법이야.
이는 최적화(Optimization) 관점에서 손실 함수를 단계적으로 줄이는 과정으로 이해할 수 있어.


1️⃣ 초기 모델 설정: ( F_0(x) )

[
F0(x) = \arg\min{\gamma} \sum_{i=1}^{n} L(y_i, \gamma)
]

✔️ 왜 이렇게 할까?

  • 초기 모델을 단순한 상수 값으로 설정하는 이유는 손실 함수를 최소화하는 기본적인 출발점을 만들기 위해서야.
  • 예를 들어, 회귀 문제에서 MSE(평균제곱오차)를 최소화하는 (\gamma)는 타겟 값 ( y )의 평균이 돼.
  • 이렇게 하면 모델이 처음부터 너무 복잡해지는 걸 막고, 간단한 시작점을 제공해.

💡 예시

  • 회귀 문제: 평균제곱오차(MSE) → ( F_0(x) = \text{평균}(y) )
  • 이진 분류 문제: 로지스틱 손실 → ( F_0(x) = \text{log-odds}(\text{클래스 비율}) )

2️⃣ 반복 과정 (( m = 1 ) to ( M ))

(1) Pseudo-Residuals 계산 (잔차)

[
r{im} = -\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \Bigg|{F(x) = F_{m-1}(x)}
]

✔️ 왜 이렇게 할까?

  • 머신러닝에서는 손실 함수 ( L(y, F(x)) )를 최소화하는 방향으로 학습해야 해.
  • 경사하강법(Gradient Descent) 원리에 따라, 손실 함수의 기울기(gradient)를 계산해서 최적 방향을 찾음.
  • ( r_{im} )은 손실 함수의 기울기(gradient)로, 현재 모델이 틀린 정도를 나타냄.

💡 이해하기 쉽게 정리

  • 선형 회귀에서 잔차(Residuals)는 단순히 ( y_i - \hat{y}_i ) 이지만,
  • Gradient Boosting에서는 손실 함수의 기울기(gradient)를 사용하여 오차를 보정함.

🎯 핵심 아이디어

  • 새로운 모델은 단순한 예측값이 아니라, 현재 모델이 부족한 부분(오차)을 예측하는 모델이어야 함.
  • 그래서 ( r_{im} )을 새로운 학습 데이터의 타겟 값으로 사용해!

(2) 새로운 약한 학습기 ( h_m(x) ) 학습

  • 방금 구한 pseudo-residuals ( r_{im} )을 목표로 설정하여 새로운 의사결정나무(약한 학습기)를 학습해.
  • 즉, 새로운 트리는 기존 모델이 틀린 부분을 더 잘 맞추도록 훈련됨.

✔️ 왜 이렇게 할까?

  • 새로운 모델이 단순히 데이터를 다시 예측하는 게 아니라, 이전 모델이 틀린 부분을 수정하는 역할을 해야 하기 때문이야.
  • Gradient Boosting은 각 단계에서 틀린 부분을 줄이는 방향으로 모델을 개선하는 방식이므로,
    새로운 모델은 오차(잔차)를 예측하는 역할을 하게 됨.

(3) 적절한 가중치 ( \gamma_m ) 찾기

[
\gammam = \arg\min{\gamma} \sum{i=1}^{n} L(y_i, F{m-1}(x_i) + \gamma h_m(x_i))
]

✔️ 왜 이렇게 할까?

  • 새로 만든 ( hm(x) )를 기존 모델 ( F{m-1}(x) )에 얼마나 반영할지 결정해야 해.
  • 너무 많이 반영하면 과적합(overfitting)될 수 있고, 너무 적게 반영하면 학습이 더딜 수 있어.
  • 손실 함수 ( L(y, F(x)) )를 최소화하는 최적의 ( \gamma_m ) 값을 찾아야 함.

🎯 핵심 아이디어

  • 오차를 줄이는 방향으로 업데이트하되, 최적의 업데이트 크기를 조절해야 함.
  • ( \gamma_m )을 찾는 과정은 일반적으로 1차원 최적화 문제로 풀 수 있어.

(4) 모델 업데이트

[
Fm(x) = F{m-1}(x) + \gamma_m h_m(x)
]

✔️ 왜 이렇게 할까?

  • 기존 모델에 새로운 트리를 추가하면서 개선하는 방식이야.
  • 단순히 트리를 쌓는 게 아니라, 오차를 줄이는 방향으로 점진적으로 학습하는 것이 핵심!

🎯 핵심 아이디어

  • 처음부터 복잡한 모델을 만들지 않고, 작은 변화를 반복해서 최적의 모델을 만들어감.
  • 이는 경사하강법(Gradient Descent) 원리와 유사한데, 잔차(residual)를 학습하는 방식으로 구현된다는 점이 다름.

3️⃣ 최종 모델 ( F_M(x) ) 출력

  • 여러 번 반복하면서 점진적으로 개선된 모델 ( F_M(x) )을 최종적으로 사용.

📌 Gradient Boosting을 왜 이렇게 할까?

Gradient Boosting은 경사하강법(Gradient Descent) 개념을 트리 기반 모델에 적용한 방법이야.

✅ 경사하강법(Gradient Descent)과의 관계

  • 일반적인 경사하강법에서는 모든 가중치를 한 번에 업데이트하지만,
  • Gradient Boosting에서는 각 단계에서 작은 트리를 추가하면서 경사하강법처럼 업데이트하는 거야.

✅ 일반적인 머신러닝 모델과 비교

방법방식특징
선형 회귀전체 데이터에 대해 한 번에 최적 가중치 학습단순하지만 유연성이 부족
랜덤 포레스트독립적인 여러 개의 트리의 평균을 사용개별 트리가 서로 영향을 주지 않음
Gradient Boosting기존 모델의 오차를 줄이는 방향으로 트리를 추가이전 모델을 보완하는 방식으로 학습

✅ Gradient Boosting의 핵심 철학

  1. 기존 모델의 오차를 보완하는 방식으로 학습
  2. 잔차(residuals)를 점진적으로 줄이는 방식으로 최적화
  3. 경사하강법을 트리 모델에 적용한 개념
  4. 과적합을 방지하기 위해 적절한 학습률(learning rate)과 트리 깊이 조절이 필요

🚀 정리: Gradient Boosting의 원리

  1. 초기 모델을 단순한 상수값으로 설정 → 손실 최소화 시작점
  2. 모델의 오차(잔차)를 계산 → 현재 모델이 어디서 틀렸는지 파악
  3. 새로운 약한 학습기를 학습 → 오차를 예측하는 작은 트리 추가
  4. 최적의 가중치(learning rate) 찾기 → 업데이트 크기 조절
  5. 모델 업데이트 → 기존 모델을 보완하는 방식으로 개선
  6. 여러 번 반복하여 최적의 최종 모델 완성 🚀

0개의 댓글