XGBoost는 그래디언트 부스팅 프레임워크에 따라 최적화된 분산 그래디언트 부스팅 머신 러닝 알고리즘을 구현하는 오픈 소스 소프트웨어 라이브러리입니다.
XGBoost는 그래디언트 부스팅 프레임워크에 따라 최적화된 분산 그래디언트 부스팅 머신 러닝 알고리즘을 구현하는 오픈 소스 소프트웨어 라이브러리입니다.
익스트림 그래디언트 부스팅(Extreme Gradient Boosting)의 줄임말인 XGBoost는 확장 가능한 분산 그래디언트 부스티드 결정 트리(GBDT) 머신 러닝 라이브러리입니다. 회귀, 분류, 순위 지정 문제를 위한 최고의 머신 러닝 라이브러리로, 병렬 트리 부스팅을 제공합니다.
XGBoost를 이해하려면 먼저 지도 머신 러닝, 결정 트리, 앙상블 학습, 그래디언트 부스팅 등 XGBoost의 기반이 되는 머신 러닝 개념과 알고리즘을 파악하는 것이 중요합니다.
지도 머신 러닝은 레이블과 특징이 있는 데이터 세트에서 패턴을 찾도록 알고리즘을 사용하여 모델을 훈련시킨 다음, 훈련된 모델을 사용하여 새로운 데이터 세트의 특징에서 레이블을 예측합니다.
결정 트리는 참/거짓으로 출력되는 특징 관련 if-then-else 질문 트리를 평가하고 올바른 결정을 내릴 확률을 산정하는 데 필요한 최소 질문 수를 추정하여 레이블을 예측하는 모델을 생성합니다. 결정 트리는 분류에 사용하여 범주를 예측할 수도 있고 회귀에 사용하여 연속적인 숫자 값을 예측할 수도 있습니다. 아래의 간단한 예제에서 결정 트리는 침실의 크기와 수(특징)를 기반으로 주택 가격(레이블)을 추정하는 데 사용됩니다.
그래디언트 부스팅 결정 트리(GBDT)는 분류와 회귀를 위한 결정 트리 앙상블 학습 알고리즘으로, 랜덤 포레스트(Random Forest)와 유사합니다. 앙상블 학습 알고리즘은 여러 머신 러닝 알고리즘을 결합하여 더 나은 모델을 얻습니다.
랜덤 포레스트와 GBDT 모두 여러 개의 결정 트리로 구성된 모델을 구축합니다. 차이점은 트리를 구축하고 결합하는 방식입니다.
랜덤 포레스트는 배깅(bagging)이라는 기법을 사용하여 데이터 세트의 무작위 부트스트랩 샘플에서 전체 결정 트리를 병렬로 생성합니다. 최종 예측 결과는 모든 결정 트리 예측 결과의 평균입니다.
'그래디언트 부스팅'이라는 용어는 하나의 약한 모델을 다른 여러 약한 모델과 결합하여 집합적으로 강력한 모델로 '부스팅' 또는 개선한다는 아이디어에서 비롯되었습니다. 그래디언트 부스팅은 부스팅에서 확장된 개념으로, 약한 모델을 추가적으로 생성하는 프로세스를 목적 함수에 대한 경사 하강(gradient descent) 알고리즘으로 공식화한 것입니다. 그래디언트 부스팅은 오차를 최소화하기 위해 다음 모델의 목표 결과를 설정합니다. 각 경우의 목표 결과는 예측 관련 오차의 기울기(따라서 그래디언트 부스팅이라고 함)를 기반으로 합니다.
GBDT는 얕은 결정 트리의 앙상블을 반복적으로 훈련시키며, 각 반복 시 이전 모델의 잔차를 사용하여 다음 모델을 피팅합니다. 최종 예측은 모든 트리 예측의 가중합입니다. 랜덤 포레스트의 '배깅'은 분산과 과적합을 최소화하는 반면, GBDT의 '부스팅'은 편향과 과소적합을 최소화합니다.
XGBoost는 확장 가능하고 매우 정확한 그래디언트 부스팅의 구현으로, 부스티드 트리 알고리즘 관련 컴퓨팅 성능의 한계를 극복하는 데 도움이 되므로, 주로 머신 러닝 모델의 성능과 연산 속도를 개선하기 위해 구축됩니다. XGBoost에서는 트리가 GBDT처럼 순차적으로 생성되는 것이 아니라 병렬로 생성됩니다. XGBoost는 수준별 전략을 따릅니다. 즉, 기울기 값 전체를 검토하고 이 부분합을 사용하여 훈련 세트의 가능한 모든 분기에서 분기의 품질을 평가합니다.
XGBoost는 거의 모든 Kaggle 구조화 데이터 대회에서 개인과 팀의 우승에 기여한 결과로 지난 몇 년간 큰 인기를 끌었습니다. 이러한 대회에서는 기업과 연구자가 데이터를 게시하면 통계학자와 데이터 마이너가 해당 데이터를 예측하고 설명하는 데 가장 적합한 모델을 만들기 위해 경쟁합니다.
초기에는 파이썬과 R로 구현된 XGBoost가 구축되었습니다. 현재 XGBoost는 인기에 힘입어 Java, Scala, Julia, Perl 및 기타 언어용 패키지 구현을 제공합니다. 이러한 구현으로 더 많은 개발자에게 XGBoost 라이브러리를 제공하고 Kaggle 커뮤니티 전반에서 더 큰 관심을 끌어낼 수 있게 되었습니다.
XGBoost는 다른 여러 도구 및 패키지와 통합되었습니다. 파이썬 매니아를 위한 Scikit-learn 그리고 R 사용자를 위한 캐럿 등이 그 예입니다. 또한 XGBoost는 아파치 스파크, Dask와 같은 분산 처리 프레임워크와 통합됩니다.
2019년에 XGBoost는 InfoWorld가 선정한 올해의 기술에 이름을 올렸습니다.
다음을 포함하여, XGBoost는 광범위한 이점과 속성을 자랑합니다.
다른 알고리즘과 비교하여 XGBoost 및 XGBoost 머신 러닝 모델은 데이터 사이언티스트에게 최고의 예측 성능 및 처리 시간 조합을 제공한다는 것이 주목할 만합니다. 이는 다양한 벤치마킹 연구를 통해 입증되어 온 바로, 데이터 사이언티스트들이 관심을 기울이는 이유입니다.
XGBoost를 사용하는 CPU 기반 머신 러닝 작업은 실행하는 데 문자 그대로 몇 시간이 걸릴 수 있습니다. 매우 정확한 최첨단 예측 결과를 도출하려면, 수천 개의 결정 트리를 생성하고 수많은 매개변수 조합을 테스트해야 하기 때문입니다. 수천 개의 효율적인 소형 코어로 구성된 대규모 병렬 아키텍처를 갖춘 그래픽 처리 장치, 즉 GPU는 수천 개의 병렬 스레드를 동시에 실행하여 컴퓨팅 집약적 작업을 강화할 수 있습니다.
NVIDIA는 엔드투엔드 데이터 사이언스 훈련 파이프라인을 전적으로 GPU에서 실행할 수 있도록 오픈 소스 데이터 분석 및 머신 러닝 가속화 플랫폼인 NVIDIA RAPIDS™를 개발했습니다. 이 제품군은 저수준 컴퓨팅 최적화를 위해 NVIDIA CUDA® 프리미티브에 의존하지만, 사용자 친화적인 파이썬 인터페이스를 통해 GPU 병렬성 및 고대역폭 메모리를 사용할 수 있도록 지원합니다.
분석과 데이터 사이언스의 일반적인 데이터 준비 작업에 중점을 둔 RAPIDS는 일반적인 직렬화 비용을 지불하지 않고도 Scikit-learn 및 다양한 머신 러닝 알고리즘과 통합되는 익숙한 데이터프레임 API를 제공합니다. 이를 통해 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다. 또한 RAPIDS에는 멀티 노드의 멀티 GPU 배포에 대한 지원도 포함되어 있어 훨씬 더 큰 규모의 데이터 세트 크기에서 대폭적으로 가속화된 처리와 훈련을 수행할 수 있습니다.
RAPIDS 팀은 Distributed Machine Learning Common(DMLC) XGBoost 조직과 긴밀하게 협력하고 있으며 이제 XGBoost에는 원활한 드롭인 GPU 가속화가 포함됩니다. 이를 통해 모델 훈련 속도를 크게 높이고 정확도를 향상하여 더 나은 예측을 생성할 수 있습니다.
XGBoost는 이제 GoAI 인터페이스 표준을 기반으로 구축되므로 cuDF, cuPY, Numba, 파이토치 등에서 제로 카피 데이터 가져오기를 수행할 수 있습니다. Dask API를 사용하여 여러 노드 또는 여러 GPU로 쉽게 확장할 수 있고, RAPIDS Memory Manager(RMM)가 XGBoost와 통합되므로 단일 고속 메모리 풀을 공유할 수 있습니다.
GPU 가속 XGBoost 알고리즘은 빠른 병렬 누적합 연산을 활용하여 가능한 모든 분할을 스캔할 뿐만 아니라 병렬 기수 정렬을 통해 데이터를 재분할합니다. 한 번에 한 단계씩 주어진 부스팅 반복 동안 결정 트리를 구축하고, 전체 데이터 세트를 GPU에서 동시에 처리합니다.
NVIDIA는 대규모 머신 러닝이 데이터 사이언티스트, 개발자 그리고 궁극적으로 최종 사용자에게 강력한 예측 기능을 제공한다는 것을 잘 알고 있습니다. 그러나 대규모 학습을 위해서는 온프레미스 및 클라우드 인프라에서 중요한 과제를 해결해야 합니다. 여기에는 방대한 데이터의 전처리 속도를 높인 다음, 컴퓨팅 집약적 모델의 훈련을 가속화하는 것이 포함됩니다.
NVIDIA는 Spark-XGBoost의 초기 릴리스를 통해 아파치 스파크 노드에서 XGBoost 머신 러닝 모델의 훈련과 추론을 지원했습니다. 이는 엔터프라이즈급 분산 머신 러닝을 위한 최고의 메커니즘으로 자리매김하는 데 기여했습니다.
GPU 가속 Spark XGBoost는 대규모 데이터의 전처리를 가속화하고 GPU 메모리에 더 큰 데이터 크기를 허용하며 XGBoost 훈련 및 튜닝 시간을 개선합니다.