Hello Computer Vision

[머신러닝] Gradient Boost 공부해보기 (GBM) 본문

머신러닝

[머신러닝] Gradient Boost 공부해보기 (GBM)

지웅쓰 2023. 2. 5. 16:58

지난번에는 Boosting이 무엇인지에 대해서 알아보고 Adaptive Boosting 에 대해서도 공부해보았다.

 

그리고 이번에는 Gradient Boosting 에 대해서 공부해보려고 한다.

 

Gradient Boosting이란?

일단 직관적으로 어떤 기법인지 생각해보았을 때 배경이 되는 것은 역시 Boosting일 것이고(Sequential)

모델들을 부스팅하는 과정에서 하는 업데이트 방식을 Gradient를(경사하강법)사용하는 것이 아닐까 생각이 된다.

(Adatpive Boosting에서는 gradient를 사용하는 것이 오차에 대해서 추가적인 가중치를 부과함으로써 모델을 업데이트하였다.)

https://deepai.org/machine-learning-glossary-and-terms/gradient-boosting

 

이를 잘 설명해주는 것이 위 이미지라고 생각한다.

Regression모델을 한번 생각해보았을 때 첫번째 iteration에서는 x = 30부근에서 가지가 split이 한번 되었음을 확인할 수 있고

이에 대한 왼쪽 노드들과 오른쪽 노드들의 잔차는 오른쪽 이미지로 확인할 수 있다.(Regression에서의 각 노드들의 평균으로 계산된다)

그렇다면 GBM의 주 목적이라고 한다면 이러한 잔차를 최소화 하는 것이기 때문에 두번째 모델을 이렇게 나온 잔차를 줄이기 위해 생성된다.

잔차는 $\hat{y} - f_{1}(x)$로 표현할 수 있는데 이러한 잔차를 계속되는 반복 실험으로 줄이는 것이며

$y - f_{1}(x) - f_{2}(x) ... -f_{n}(x)$ 이렇게 반복해가면서 잔차를 줄이는 것이다.

(그림에서는 많이 잔차가 줄어들지 않은 것처럼 표현됐지만 반복될 수록 줄어든다)

 

물론 신경망에서 어떤 문제를 푸냐에 따라 어떤 loss function을 주는 것이 다른만큼 여기서도 역시

어떤 손실함수를 사용하냐에 따라서 결과가 조금씩 다를 것이다.

 

 

이러한 과정을 잘 나타내주는 이미지는 위와 같다. 

 

GBM의 장점 및 단점

장점이라고 한다면 단순한 모델면서도 훌륭한 performance를 내는 것이다.

 

단점이라고 한다면 역시 overfitting문제가 두드러진다. 

일반적으로 우리들을 둘러싼 데이터들은 어느 한 공식, 회귀선, 곡선으로 정확히 들어맞지않으며 항상 noise들이 존재한다.

그렇지만 이 모델은 그러한 노이즈들 조차 학습하는 것이 모델의 단점이라고 할 수 있다.

이러한 단점을 해결하기 위해서는 subsampling, shrinkage 방법 등이 있다.

subsampling같은 경우 전체 데이터셋에서 실험이 진행될수록 전체데이터셋의 일부만 사용하는 것이다.(이 방법은 bagging과 비슷하다)

shrinkage는 뒷 모델에 대해서 가중치를 덜 주는 것이다. 아무래도 훈련 초기에 오류가 더 클 것이며 iteration이 반복될 수록 

사소한 노이즈들조차 학습할 가능성이 있다. 이를 한번 수식으로 나타내보면

$ y - f_{1}(x) - 0.9 *f_{2}(x)- *0.8 f_{3}(x)- f_{1}(x)- ...- *0.1f_{n}(x)$ 이렇게 가중치를 다르게 주는 것이 한 방법이다.

 

지금까지 GBM에 대해서 가볍게 알아보았습니다.