Machine Learning/Algorithm

Ensemble model - GBM (Gradient Boosting Machine)

고슴군 2022. 7. 7. 22:46
  • Random Forest와 함께 굉장히 널리 사용되는 기법 중 하나
    • GBM에서 파생된 중요 알고리즘 세 가지 : XGBoost, LightGBM, CatBoost

 

  • Gradient Boosting = Gradient Descent + Boosting

 

  • Motivation (for regression problem) (classification도 가능)
    • 만일 회귀 모형의 잔차를 다음 단계에서 학습하는 모델을 구축한다면?
    • 즉, 현재 모델이 못 맞춘 것 만큼만 맞추는 모델을 만들어서 결합하면 맞출 수 있는것 아닌가?

 

  • 핵심 아이디어

  • 즉, 충분히 에러값이 작아질 때까지 모델을 충분히 만들어서 합하면 되지 않나? (y=f1(x)+f2(x)+...)
  • Adaboost는 못 맞추는 객체의 선택 확률값을 조정해서, 즉 선택 확률 분포를 조정했는데, GBM은 y값을 조정해서 맞추어야 하는 값이 무엇인지를 정해주자, 그렇게 guide 해주자는게 GBM.

 

  • Gradient Boosting
    • 개별 모델을 forward 방식으로 학습 (Adaboost와 동일)
    • 각 단계에서 새로운 Base Learner를 학습하여 이전 단계의 Base Learner의 단점을 보완
    • Gradient Boosting에서는 단점이 손실 함수(loss function)의 그래디언트(gradient)에 반영됨

 

  • loss function을 찾고자 하는 함수 f(x)로 미분한 값이 잔차의 음수값이 됨
    • DL에서도 loss를 최소화 하기 위한 weight를 찾는데, 이 때 찾고자 하는 weight로 loss를 미분하여 gradient 계산한다.
    • DL에서는 negative gradient 방향으로 weight를 조정해서 loss를 최소화하는 w 값을 찾아간다. negative gradient는 이런 의미를 가진다.
  • 즉, 잔차는 gradient의 음수와 같다
    • gradient의 음수의 의미는, gradient descent 를 할 때 gradient 정보를 갖고 있으면 0이 아닐 경우에는 역방향으로 움직여서 최소화된 함수를 찾아갈 수 있다는 것이다.
    • 실제값에서 함수값을 뺀 잔차를 활용하는 것이 negative gradient를 활용하는 것과 같아지는 것이다. 
    • 그래서 gradient를 이용한 boosting이다. gradient boosting machine 이라고 표현한다. 

 

  • 예시 (learner : stumpt tree)

 

 

  • Gradient Boosting Algorithm

 

 

  • 손실함수에 대한 gradient를 사용하기 때문에, 손실함수에 따라서 GBM의 성능이 매우 달라질 수 있다. 
    • 회귀모형의 경우 이렇게 네 가지 loss가 가장 많이 사용된다.
    • 처음부터 loss 까지 건드리는 것은 크게 성능을 dramatic 하게 변화를 내는 것은 아니기 때문에, 가장 기본적인 squared loss를 사용해보고, 거기에서부터 성능이 예상과 다르면 loss에 대한 설계를 바꿔가면서 tuning 해보는 것을 추천한다. 

 

 

  • 분류 모형에 대한 손실함수
    • 베르누이 loss는 adaptive loss 보다 log 값이기 때문에 더 작다. 그래서 adaptive loss가 오분류에 더 민감하게 반응하는 특징이 있다. 

 

 

  • GBM의 로직을 이해했다면 한 가지 의문점이 들 수 있다.
    • 모든 데이터는 y=f(x)+e, 로 함수에 의해서 만들어지는 f(x) 와 함께 자연 발생적인 노이즈(e) 가 반드시 포함되어 있다. 무조건 들어있다.
    • 만약 틀린 것 만큼, 즉 y-f1(x)를 목적으로 하는 f2(x) 모델을 만든다는 것은 노이즈도 학습하겠다는 것이다.
    • 노이즈는 학습하면 안된다. 자연발생적인 변동성이라서 노이즈까지 학습하게 되면 과적합의 위험이 굉장히 크다.
    • 따라서, 위의 설명대로 original 버전을 사용하면 과적합의 위험이 매우 높다.
    • 과적합 방지를 위한 여러가지 장치를 사용한다.
    • A 그래프의 빨간선으로 추정하면 좋지만, 과적합 방지 장치가 없으면 검정선과 같이 spiky하게 학습된다.
    • B 그래프를 봐도 과적합된 것을 볼 수 있다.

 

 

  • 첫 번째 장치 : subsampling 
    • DL의 dropout 개념과 비슷하다.
    • 일부러 학습 데이터의 일부분만 사용하는 것. 예를 들어 80%만 사용. 단, 비복원 추출한다. 80% 데이터의 gradient만 계산해서 학습한다. 일부를 억지로 놀림으로써, 모든 데이터에 과적합되는 것을 방지한다.
  • 두 번째 장치 : shrinkage
    • 뒷 모델의 경우에는 영향력을 줄여가도록 하는 것. 관례적으로 0.9 내외의 값을 사용한다. 

 

 

  • 과적합 방지 장치까지 된 gradient boosting machine은 RF에 필적할 정도로 성능이 상당히 좋다.
    • RF처럼 변수 중요도도 추출해준다.
    • IG : information gain
    • stumpt tree를 사용하기 때문에 L=2 이다.
    • Influence_j(T) : 결국 이 변수가 사용이 되었을 때, 그 상황에서의 information gain이 이정도다를 나타낸다. 이 방식으로 하나하나 tree에 대한 개별적인 변수의 중요도를 계산한다.
    • Influence_j : 모든 tree에 대한 j번째 변수에 대한 중요도를 더해서 평균내서 변수 최종 변수 중요도 계산한다. 

 

  • RF와 쌍벽을 이룬다. 
    • 성능 둘 다 좋다
    • 두 알고리즘 모두 변수 중요도를 산출해줄 수 있다.

 

반응형