📌 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의 핵심 철학
- 기존 모델의 오차를 보완하는 방식으로 학습
- 잔차(residuals)를 점진적으로 줄이는 방식으로 최적화
- 경사하강법을 트리 모델에 적용한 개념
- 과적합을 방지하기 위해 적절한 학습률(learning rate)과 트리 깊이 조절이 필요
🚀 정리: Gradient Boosting의 원리
- 초기 모델을 단순한 상수값으로 설정 → 손실 최소화 시작점
- 모델의 오차(잔차)를 계산 → 현재 모델이 어디서 틀렸는지 파악
- 새로운 약한 학습기를 학습 → 오차를 예측하는 작은 트리 추가
- 최적의 가중치(learning rate) 찾기 → 업데이트 크기 조절
- 모델 업데이트 → 기존 모델을 보완하는 방식으로 개선
- 여러 번 반복하여 최적의 최종 모델 완성 🚀