머신러닝과 딥러닝/머신러닝

부스팅(Boosting)

Stat_in_KNU 2021. 2. 15. 17:38

도입

이번에는 앙상블 기법 중 하나인 부스팅에 대해서 정리해보려고 합니다. 캐글과 같은 대회에서 쉽게 접할 수 있는 많은 알고리즘이 부스팅 기반 알고리즘입니다. 그만큼 가장 핫하고 중요한 분야라고 할 수 있습니다.

 

수식은 최소화하고 글로만 정리하겠습니다

 

부스팅(Boosting)

부스팅은 한마디로 이전 모델에서 좋은 결과를 내지 못했으니 가중치를 주어서 성능을 높이는 방식입니다. 

학창시절 수능 공부를 할 때 수학과 과학에는 강했지만 국어와 영어와 같은 언어과목에는 약했습니다. 이때, 국어와 영어에 더 가중치를 두어서 학습해서 전체 성적을 올리는 방법이 부스팅이라고 하면 비슷한 비유가 될 것 같습니다 ㅎㅎ

 

 

출처 : https://blog.naver.com/winddori2002/221837065744 

부스팅은 복원 샘플링을 통해 다수의 샘플 N개를 만들어서 순차적으로 학습합니다.

샘플 1에서 잘 분류하지 못한 데이터에 가중치를 주고 샘플 2로 넘겨줍니다. 또한, 복원 랜덤 샘플링이기 때문에 샘플 2에는 샘플 1에 포함되지 않는 데이터도 있습니다. 해당 데이터에도 가중치를 줍니다. (순차적입니다)

최종평가를 진행하는데 있어서 마지막으로 학습된 모델만이 아니라 이제까지 학습된 모델을 모두 고려해서 적용합니다.

이러한 방식은 정확도를 높이는데 큰 도움을 주겠지만 outlier에 취약할 수 있습니다.

 

 

AdaBoost(Adaptive Boosting)

AdaBoost는 부스팅 알고리즘 중 가장 널리 사용되는 방법 중 하나입니다. 앞서 부스팅 알고리즘은 마지막으로 학습된 모델만 사용하는 것이 아니라 가중치를 갱신한 모든 모델을 같이 고려한다고 했습니다. 기존에서는 개별 모델에서 동일한 가중치를 주었다면 adaboost는 모델에 가중치를 별도로(상이하게) 주는 개념입니다.

 

그러면 어떻게 모델에 가중치를 상이하게 줄까요?

특정 모델이 오분류를 했다면 해당 데이터의 가중치를 증가시키고, 제대로 분류했다면 해당 가중치를 감소하는 방향으로 진행합니다.

 

Process를 요약하면 

 

1. 데이터 N개의 개별 가중치를 1/N으로 초기화(initialization)

2. 오분류된 데이터들의 가중치 합을 최소화하는 weak model을 찾는다.

3. 2번에서 나온 모델의 오분류된 데이터 가중치 합을 통해 모델의 개별 가중치를 찾는다.

4. 모델과 모델 가중치를 통해 최종 모형을 구성한다.

5. 오분류 데이터에는 가중치를 증가하고 아니라면 감소시켜 데이터 가중치를 초기화한다.

6. 2~5번 반복

 

GBM(Gradient Boosting)

GBM의 경우 오차를 미분한 gradient를 줌으로써 모델을 보완하는 방식입니다. DNN에서와 같이 Gradient descent(경사하강법)을 이용합니다. 경사하강법은 제가 딥러닝과 관련해서 포스팅 했던 

statinknu.tistory.com/23

 

DNN(Deep Neural Net)의 전체적인 Flow

매번 수박 겉핥기 식으로 딥러닝 공부를 하고, 또 코드를 긁어서 쓰는 수준에 그쳤었습니다. 그러다 S사 면접에서 전문가들의 깊이 있는 질문에 답하지 못했던 아쉬움이 남아, 늦었지만 딥러닝

statinknu.tistory.com

를 참고하시면 좋을 것 같습니다.

Loss function을 최소화하는 방향으로 모델을 빌드하는 과정이라고 생각하면 될 것 같습니다.

 

결국, train set에 target 대신 gradient를 적용하고, loss function에 넣으면 계속해서 gradient descent 과정을 거치면서 잔차를 줄여가는 과정이라고 할 수 있습니다. 

초기화 단계에서는 상수함수로 시작하지만 트리 모델이 들어가면서 gradient를 고려하면서 학습합니다.

 

Process를 요약하면

 

1. 초기값으로 상수함수를 적용합니다.  

2. Loss function을 최소화 하는 gradient를 구합니다.

3. gradient를 base modelm의 타겟 값으로 사용하여 gradient를 고려한 학습을 진행합니다.

4. 학습률을 더해 최종 모형을 만듭니다.

5. 2~4 반복

 

GBM은 Boosting 중에서도 XGBoost, LightGBM, CatBoost의 근간이 된 알고리즘 입니다.

 

 


마무리

추상적으로만 알고있던 부스팅을 정리할 수 있는 시간이 되었습니다. 특히 gradient descent는 딥러닝과 머신러닝 알고리즘에도 많이 쓰이는 등 현재 ML/DL에서는 빼놓을 수 없는 개념이라는 것을 깨달았습니다. 다음에는 부스팅으로 부터 파생된 다양한 알고리즘들을 정리하도록 하겠습니다!

 

참고

blog.naver.com/winddori2002/221837065744

 

[바람돌이/머신러닝] 앙상블(Ensemble Learning)(2) - 부스팅(Boosting), AdaBoost, Gradient Boosting(GBM) 이론

안녕하세요. 오늘은 저번은 저번 포스팅에 이어서 앙상블 기법 중 부스팅 알고리즘에 대해서 정리하려고 합...

blog.naver.com