본문 바로가기

Machine Learning

Boosting과 친해져보자!

Boosting (Type of Ensembling)

오늘 알아볼 것은 Machine Learning, 즉 기계 학습시에 사용되는 Ensemble Learning 의 기법 중 하나인 Boosting이 무엇인지, 그리고 Boosting의 종류로는 어떤 것들이 있으며 각각 어떤 특징을 가지고 있는지에 대한 것입니다.


Ensembling

이 글을 읽고 있는 분들 모두 아시다시피, 기계 학습 과정에서 우리는 새로운 데이터에 대해서 예측을 하기 위해 K-NN, SVM과 같은 여러 기계학습 알고리즘들 중 하나를 선택하게 됩니다.
그러나 이 하나의 모델만으로 단순히 예측할 수 있는 수준에는 한계가 있기에 사람들은 고민하였고, Ensemble 이란 새로운 기법을 만들어냈죠.

Ensemble은 프랑스어로 조화, 통일이라는 의미를 갖고 있으며 위의 여러개의 기계학습 알고리즘, 즉 모델(Model) 들을 학습시켜 그 모델들의 예측결과들을 이용해 하나의 모델보다 더 나은 값을 예측하는 방법을 말합니다.
Ensemble 학습에도 여러가지 종류가 있는데, 널리 알려진 Random Forest, 그 외에도 Bagging, Boosting, Stacking 등 여러가지 방법들이 존재합니다.

이 가운데 Boosting에 대해서 좀 더 자세히 알아보도록 하겠습니다.


Boosting

Boosting 은 맞추기 어려운 문제들을 맞추기 위해서 고안된 과정입니다. 다른 Ensemble 기법들과의 차이점이라면, 바로 위의 사진과 같이 여러번 반복하는 과정에서 이전 과정의 결과가 다음 과정의 결과에 영향을 미친다는 것입니다!

좀 더 자세히 알아보자면, Boosting 방식은 오답에 대해서 높은 가중치를 부여하여 집중적으로 이를 고치게 함으로써 모델의 정확도를 크게 향상시키게 됩니다.

이런 기본적인 개념을 기반으로 여러 Boosting 알고리즘들이 만들어졌는데, AdaBoosting (Adaptive Boosting), Gradient Boosting, 그리고 CatBoosting 등이 있습니다.


AdaBoosting

AdaBoosting은 크게 3가지 단계로 이루어집니다.

Step 1. 모든 데이터에 동일한 가중치를 부여한다

Step 2. 틀린 예측은 다음 단계에서 더 큰 가중치가 부여되어 ( 그림상에서는 커짐 ) 시작된다

Step 3. Step 2 를 알고리즘이 위의 가중치 높은 것들을 아래의 그림처럼 옳게 판별할 때까지 반복한다


Gradient Boosting (GBM ; M stands for Machine)

위에서 살펴본 AdaBoosting에는 단점이 몇가지 있는데, 그 중 하나가 바로 높은 weight 를 가진 data가 존재할 경우 그것의 판별을 알맞게 하려다가 그 주변의 데이터들이 잘못 분류될 가능성이 크다는 점입니다.

Gradient Boosting은 이 문제를 해결하기 위해서 가중치를 업데이트하는 방식을 기존의 단순한 지수 곱셈식 방식에서 경사하강법이라는 새로운 방법으로 바꾸었고, 통계적으로 AdaBoosting 보다 높은 정확도를 보여주게 됩니다.


Extreme Gradient Boosting (XGB)

Gradient Boosting 은 그 학습 성능의 우수함이 검증되었지만, 그만큼 복잡한 로직에 따른 수많은 반복이 학습과정에 포함되어 있기 때문에 수행시간 및 연산시간이 매우 오래 걸린다는 단점이 있습니다. XGBoosting은 이를 엄청나게 개선한 알고리즘으로 기존 알고리즘에 병렬처리 방식을 도입하여 수행시간 측면에서 비약적인 향상을 이루어내는데 성공하였습니다.


Light Gradient Boosting (LGBM ; M stands for Machine)

무언가 반복되는 느낌이지만 XGB 역시 매우 뛰어난 알고리즘이며 기존의 Gradient Boosting에 비해 비약적인 속도 향상이 이루어진 알고리즘임에도 불구하고 여전히 학습시간이 오래걸린다는 단점이 있습니다.

이런 단점을 극복하기 위해 등장한 알고리즘이 바로 LGBM으로, 이름에서 Light 라는 단어에서 무언가 베타버전과도 같은 느낌을 받을 수 있지만 이는 XGBoost 보다도 훨씬 빠른 학습시간과 적은 메모리 사용량을 자랑하는 훌륭한 알고리즘입니다.
LGBM이 XGB에서 더욱 더 속도를 향상시킨 비결에 대해서 조금만 알아보자면, 바로 의사결정트리(Decision Tree)와 관련이 있습니다.

갑자기 Tree가 나와서 의아해하실 수 있는데 Boosting 관련 알고리즘들은 주로 초기 모델로 이 의사결정트리를 사용하게 됩니다.
이 의사결정트리의 효율성을 유지하기 위해서 기존의 알고리즘들은 트리를 균형잡히게 분할하여 그 깊이가 유지되도록 해왔습니다.
그러나, LightGBM은 비대칭적인 트리를 생성하면서도 학습의 정확성에 영향을 끼치지 않는 새로운 방식을 찾아냄으로써 균형을 맞추는데에 필요한 시간소요를 없앴고, 큰 성능향상을 이루어냈습니다.


CatBoosting

CatBoost 역시 현재 여러곳에서 널리 사용되고 있는 Gradient Boosting 알고리즘의 여러 단점들을 보완한 알고리즘입니다.

CatBoosting이 Gradient Boosting에 비해 진화된 점은 크게 두가지를 꼽을 수가 있는데, 간단히 알아보도록 하겠습니다.

첫번째는 바로 범주형변수처리 방법의 개선을 통한 학습시간의 단축입니다.
대부분의 GBM은 위에서도 말했듯이 의사결정트리를 초기 모델로 삼아 학습의 기반으로 삼고 있습니다. 그러나 이를 모델로 삼는 과정에서 전처리로 인해 학습시간이 크게 늘어난다고 합니다.
CatBoost에서는 이러한 문제점을 모델의 훈련과 전처리를 동시에 병행하며 시간을 단축했습니다.

두번째 개선점은 바로 GBM의 Overfit되는 문제를 해결한 것입니다.
기존의 GBM은 학습 반복 과정에서 다음 단계의 의사결정트리에 현재 단계에서 쓰인 데이터를 재사용했기 때문에 Overfit에 취약하다는 문제점이 있었습니다.
이 문제를 알고리즘의 내부 순서 변경을 통해서 해결하였다고 합니다.

위의 두가지 내용은 매우 심화된 내용이기 때문에 간략하게 설명하였는데 혹시 더욱 자세히 알고싶으신 분이 있다면 아래 포스트를 참고해주세요!

https://gentlej90.tistory.com/100


마치며..

지금까지 Boosting의 여러가지 종류들에 대해서 알아보았는데요, 아무래도 실제 개념들을 다 이해하려면 각종 수학 공식들이 접목되기 때문에 상당한 난이도가 있어 이번 포스트에서는 그 개념과, 서로의 공통점과 차이점을 알아보는데에 초점을 맞추어보았습니다. 만약 여러분이 위 내용을 다 이해했고 더욱 더 심화된 내용과 함께 각각의 알고리즘들을 완벽히 알고싶으시다면 위에 소개한 링크와 같이 여러 곳에서 수학적으로 위의 내용을 다루고 있으므로 이를 통해 학습해보시면 좋을 것 같습니다!

tags: Machine Learning Documentation