1. 개요[편집]
| 그래디언트 부스팅 Gradient Boosting | |
|---|---|
| 제안 | J. H. Friedman (2001, Annals of Statistics 29:1189–1232) |
| 발상 | 함수공간에서의 최급강하법 |
| 적합 대상 | 손실의 음의 기울기 = 유사잔차 |
| 겨냥하는 것 | 편향 — 배깅과 정반대 |
| 핵심 손잡이 | 학습률 $\nu$ · 트리 수 $M$ · 깊이 $J$ · 부표집률 |
| 주요 구현 | XGBoost (2016) · LightGBM (2017) · CatBoost (2018) |
| 현재 위치 | 정형 데이터 기본기 — 아직 신경망에 안 밀렸다 |
그래디언트 부스팅(gradient boosting)은 미분 가능한 임의의 손실함수에 대해, 현재까지 만든 모형이 남긴 손실의 음의 기울기(유사잔차)에 약한 학습기를 하나씩 적합시켜 더해 가는 순차적 앙상블 방법이다. 프리드먼이 2001년 Annals of Statistics 논문 “Greedy Function Approximation: A Gradient Boosting Machine”에서 정식화했다.
계보상으로는 AdaBoost의 일반화다. 프리드먼·해스티·팁시라니(2000)가 AdaBoost를 “지수손실에 대한 전진 단계적 가법 모형”으로 재해석하자마자 자연스러운 질문이 따라 나온다 — 손실이 꼭 지수함수여야 하나? 답은 아니오이고, 임의 손실로 가려면 가중치 갱신식 같은 손실별 특수 공식 대신 기울기라는 공통 언어가 필요했다. 그것이 이 방법이다. 지수손실을 넣으면 AdaBoost가 되고, 제곱오차를 넣으면 “잔차에 트리를 적합”이라는 가장 단순한 형태가 되며, 로지스틱 손실·후버 손실·핀볼 손실·포아송 이탈도·순위 손실 등 무엇을 넣어도 절차는 똑같다.
배깅 계열인 랜덤 포레스트와의 대비를 처음에 못 박아 두자. 배깅은 편향이 작고 분산이 큰 학습기를 평균 내 분산을 죽인다. 부스팅은 편향이 크고 분산이 작은 학습기를 쌓아 편향을 죽인다. 그래서 랜덤 포레스트는 트리를 깊게 키우고 가지치기하지 않지만, 그래디언트 부스팅은 깊이 3~6의 얕은 트리를 쓴다. 랜덤 포레스트는 트리를 늘려도 과적합하지 않지만, 그래디언트 부스팅은 트리를 늘리면 반드시 과적합한다 — 이 정규화 파라미터이기 때문이다. 두 방법이 같은 부품(결정 트리)을 쓴다는 이유로 비슷하게 취급되곤 하는데, 실제로는 손잡이의 방향이 전부 반대다.
2. 함수공간에서의 경사하강[편집]
보통의 경사하강법은 파라미터 벡터를 움직인다. 그래디언트 부스팅의 발상은 움직이는 대상을 함수 자체로 놓는 것이다. 총 손실
를 에 대해 줄이고 싶은데, 가 무한차원이라 대놓고 미분할 수는 없다. 대신 훈련점에서의 함수값 이라는 차원 벡터만 생각하면 기울기가 그냥 나온다.
이 을 유사잔차(pseudo-residual)라 부른다. 최급강하법이라면 에 이 벡터를 더하면 되지만, 그러면 훈련점에서만 정의된 물건이라 새 에서 값을 낼 수 없다. 그래서 한 단계를 더 밟는다 — 유사잔차 벡터를 약한 학습기로 근사한다.
즉 기울기 방향을 가설 부류 위로 정사영한 것이 실제 이동 방향이다. 여기서 유사잔차 적합이 손실이 무엇이든 항상 제곱오차 회귀라는 점이 이 방법의 공학적 미덕이다. 손실을 바꿔도 트리 학습 코드는 그대로고, 계산 함수 하나만 갈아 끼우면 된다.
은 선형탐색으로 정한다. 약한 학습기가 회귀 트리일 때 프리드먼이 특별히 강조한 것이 여기다(그가 TreeBoost라 부른 것). 트리는 잎 마다 상수를 내놓으므로 잎마다 독립적으로 최적 상수를 따로 풀 수 있다.
트리 구조는 제곱오차로 찾고, 잎 값은 진짜 손실로 다시 푼다. 이 두 단계 구조가 그래디언트 부스팅의 실제 골격이다. 제곱오차 손실에서는 이고 이 그냥 잎 평균이라 두 단계가 일치하지만, 절대오차에서는 이고 잎 값은 중앙값이 되며, 이항 로지스틱 손실에서는 이고 잎 값은 닫힌 형태가 없어 뉴턴 한 스텝
으로 근사한다. 이 뉴턴 근사가 다음 세대 구현들의 출발점이 된다.
3. 세 손잡이의 상호작용[편집]
학습률(수축) . 매 단계 이동을 배로 줄인다. 왜 일부러 덜 가느냐 — 각 트리가 자기 유사잔차에 과적합하는데, 그 과적합분까지 전부 반영하지 않고 조금씩만 반영하면 다음 트리가 교정할 여지가 남기 때문이다. 프리드먼의 실험 결론은 명확했다. 를 줄이면 거의 항상 일반화가 좋아지며, 대가는 필요한 트리 수 이 대략 배로 늘어나는 것뿐이다. 이 권장값으로 굳었고, 실무 감각으로는 ” 는 예산이 허락하는 만큼 낮게, 은 조기 종료가 정한다”가 맞다. 이 사실상 한 개의 유효 자유도라서 둘을 독립적으로 튜닝하는 것은 낭비다.
부표집. 프리드먼(2002)의 확률적 그래디언트 부스팅은 매 단계 훈련 표본의 부분집합(~)만 비복원추출해 트리를 적합시킨다. 배깅의 분산 감소 효과가 부스팅 안에 들어오는 셈인데, 프리드먼이 관찰한 것은 정확도 개선이 부표집률에 민감하고 표본이 작을수록 부표집이 오히려 해롭다는 점이었다. 여기에 열(특징) 부표집을 얹는 것이 XGBoost가 랜덤 포레스트에서 빌려 온 아이디어이며, 실무에서 행 부표집보다 효과가 큰 경우가 흔하다.
트리 깊이 . 이게 가장 오해가 많다. 잎이 개인 트리는 최대 차 상호작용을 표현한다. 따라서
- (그루터기): 상호작용이 전혀 없는 순수 가법 모형 . 해석하기 좋고 잡음에 강하다.
: 23차 상호작용까지. 대부분의 실제 문제에서 최적 구간이다.- : 고차 상호작용을 허용하지만 그만큼 잡음도 외운다.
프리드먼의 권장이 이고 이건 20년이 지나도록 거의 안 바뀌었다. “부스팅의 약한 학습기는 약해야 한다” 는 AdaBoost의 조언이 여기서는 “데이터에 실재하는 상호작용 차수만큼만 깊게”로 정밀화된 것이다.
이 셋과 은 서로 얽혀 있다. 를 낮추면 이 커지고, 를 키우면 같은 에서 더 빨리 과적합하며, 부표집은 유효 를 흐리게 만든다. 정직한 절차는 와 를 먼저 고정하고 검증셋 조기 종료로 을 자동 결정하는 것이다. 을 격자탐색으로 튜닝하고 있다면 뭔가 잘못됐다.1
4. XGBoost — 2차 근사와 정규화된 이득[편집]
첸과 게스트린(2016)의 XGBoost는 이론적으로 새 것이라기보다 뉴턴 부스팅을 목적함수에 정직하게 써넣고, 그로부터 분할 기준까지 유도한 구현이다. 단계 의 목적을 에 대해 2차까지 전개한다.
여기에 트리 복잡도 벌점을 명시적으로 붙인다.
는 잎 개수, 는 잎 값이다. 는 결정 트리의 비용복잡도 가지치기와 같은 형태의 벌점이고, 는 잎 값에 대한 축소로 능형회귀와 같은 역할을 한다.
트리 구조를 고정하면 잎 에 속한 표본들의 1·2차 기울기 합 , 로 목적이 잎마다 분리된 2차식이 되므로 최적 잎 값이 닫힌 형태로 나온다.
이 값이 트리 구조의 점수다. 그러면 분할 기준은 유도의 문제일 뿐이다 — 한 노드를 좌우로 쪼갰을 때의 점수 개선이
이며, 이게 XGBoost의 그 유명한 이득 공식이다. 눈여겨볼 점 둘. 첫째, 이건 지니나 엔트로피처럼 손으로 고른 불순도가 아니라 손실의 2차 근사에서 자동으로 떨어져 나온 것이다. 손실을 바꾸면 가 바뀌고 이득 공식은 그대로다. 둘째, 항 덕분에 이득이 음수인 분할은 애초에 안 만들어진다 — 사전 가지치기가 목적함수 안에 내장돼 있다.
구현 쪽 기여도 못지않게 컸다.
- 희소 인식 분할 탐색. 결측값(과 원-핫의 0)에 대해 좌·우 중 기본 방향을 학습으로 정한다. 결정 트리 문서의 MIA 방식이며, 대리 분할보다 싸고 결측 패턴에 정보가 있을 때 더 강하다. 비결측 항목만 훑으므로 희소 데이터에서 속도가 데이터 밀도에 비례한다.
- 가중 분위수 스케치. 분할 후보를 전수 조사하지 않고 근사 분위수로 뽑되, 2차 기울기 를 가중치로 삼는다. 목적식을 완전제곱으로 정리하면 가 곧 표본의 가중치 역할을 하기 때문이며, 이 근사 알고리즘 덕에 데이터가 메모리를 넘어가도 돌아간다.
- 캐시·블록 구조. 특징별로 정렬된 압축 열 블록에 저장해 분할 탐색을 병렬화하고, 코어 밖(out-of-core) 학습까지 지원한다. 부스팅은 트리 사이가 순차적이라 트리 수준 병렬화가 불가능하므로, 병렬화는 전부 “한 트리 안의 분할 탐색” 수준에서 일어난다. 랜덤 포레스트가 공짜로 얻는 병렬성을 부스팅은 이렇게 힘들게 산다.
5. LightGBM과 CatBoost[편집]
LightGBM(커 외, 2017)의 무기는 둘이다.
- 히스토그램 기반 분할. 연속 특징을 미리 개 정도의 이산 구간으로 이진화해 두고, 분할 탐색을 구간 단위 누적 히스토그램으로 처리한다. 정렬이 사라져 노드당 비용이 에서 으로, 메모리도 8비트 정수로 떨어진다. 여기에 히스토그램 뺄셈 트릭이 붙는다 — 부모의 히스토그램에서 한 자식 것을 빼면 다른 자식 것이 공짜로 나오므로, 표본이 적은 쪽만 실제로 계산하면 된다.
- 리프 단위(leaf-wise) 성장. 기존 구현들이 레벨 단위로 깊이를 한 층씩 균등하게 늘리는 것과 달리, 전체 잎 중 이득이 가장 큰 하나를 골라 쪼갠다. 같은 잎 개수에서 손실을 더 많이 줄이지만 트리가 비대칭적으로 깊어져 과적합 위험이 크므로,
num_leaves와max_depth로 반드시 묶어 둬야 한다. “LightGBM이 XGBoost보다 잘 과적합한다”는 실무 경험담의 원인은 대부분 여기이고,num_leaves를 근처로 방치한 설정이 범인이다.2
여기에 GOSS(기울기가 큰 표본은 다 쓰고 작은 표본은 표집해 가중 보정)와 EFB(상호배타적인 희소 특징들을 한 특징으로 묶기)가 얹힌다.
CatBoost(프로호렌코바 외, 2018)는 다른 문제를 판다. 고카디널리티 범주형을 반응값 통계량(target statistic)으로 인코딩하면 그 표본 자신의 라벨이 자기 특징에 새어 들어가 훈련·추론 분포가 달라진다. CatBoost의 순서형 목표 통계량은 표본들에 인위적 순서를 매기고 각 표본의 인코딩에 자기보다 앞선 표본만 쓴다. 같은 논리를 부스팅 전체에 적용한 것이 순서형 부스팅으로, 유사잔차를 계산할 때 그 표본을 보지 않은 모형을 쓴다 — 이름은 다르지만 정신은 랜덤 포레스트의 OOB와 같다. 트리를 완전 균형 이진(oblivious) 트리로 제한해 추론을 극도로 빠르게 만든 것도 특징이다.
DART(라시미 & 길라드-바흐라흐, 2015)도 언급할 만하다. 부스팅에서 앞쪽 트리들이 지나치게 지배적이 되는 현상을 완화하려고, 유사잔차를 계산할 때 기존 트리 일부를 무작위로 빼고 계산한다. 드롭아웃을 트리 앙상블로 옮긴 것이며 LightGBM에 옵션으로 들어 있다.
6. 왜 표 형식 데이터에서 아직도 이기는가[편집]
이미지와 언어는 신경망이 완전히 가져갔는데, 엑셀 표 앞에서는 2016년의 XGBoost가 2026년에도 기준선이다. 슈바르츠-지브와 아르몬(2022), 그리고 그린슈타인 외(2022)의 체계적 비교가 이 관찰을 확인했고, 후자는 원인을 세 가지 귀납 편향으로 정리했다.
- 신경망은 매끄러운 함수 쪽으로 편향돼 있다. 표 형식 데이터의 참 함수는 대체로 불규칙하다 — 임계값에서 툭 꺾이고, 구간마다 다르게 움직인다. 실제로 표 데이터의 목표 함수를 인위적으로 매끄럽게 만들면 신경망과 트리의 격차가 줄어든다. 조각별 상수 모형이 계단을 잘 못 만든다고 결정 트리 문서에서 흠으로 잡았던 성질이, 여기서는 정확히 맞는 편향이 된다.
- 무의미한 특징에 신경망이 훨씬 약하다. 정형 데이터셋에는 예측력 없는 열이 잔뜩 섞여 있는데, 트리는 분할 기준상 그런 열을 그냥 안 고른다. 신경망은 입력층에서 전부 섞어 놓고 시작하므로 잡음 특징을 제거하면 성능이 크게 오른다.
- MLP는 회전 불변인데 표 데이터는 아니다. 완전연결 신경망은 입력을 직교변환해도 (초기화 분포까지 포함하면) 본질적으로 같은 함수족을 학습한다. 그런데 표의 각 열은 “나이”, “혈압”처럼 개별적 의미를 가진 좌표축이고, 축을 섞으면 정보가 파괴된다. 축평행 분할이라는 트리의 제약은 이 구조를 그대로 존중한다.
여기에 실무적 이유가 더 붙는다. 스케일링·인코딩이 필요 없고, 결측을 알고리즘이 처리하며, 표본이 수천 개 수준이어도 잘 돌고, 학습이 몇 초~몇 분이라 반복 실험이 가능하다. 정형 데이터에 특화된 트랜스포머 계열(TabNet, FT-Transformer, SAINT 등)이 계속 나오지만, 공정한 튜닝 예산 아래 벤치마크를 돌리면 여전히 부스팅과 비기거나 진다는 것이 현재의 대체적 결론이다.3
7. 실무 감각과 한계[편집]
- 조기 종료가 사실상 유일한 정규화 절차다. 검증셋을 떼고
early_stopping_rounds를 걸어라. 교차검증으로 을 정하고 전체 데이터로 재학습할 때는 폴드 평균 을 데이터 증가분만큼 살짝 늘려 주는 것이 관례. - 잡음 라벨에 약하다. 순차적으로 못 맞힌 표본을 계속 파고드는 구조라 AdaBoost가 겪는 문제를 정도만 덜하게 물려받는다. 후버 손실이나 절대오차처럼 강건한 손실로 갈아 끼울 수 있다는 것이 그래디언트 부스팅의 큰 장점이며, 이게 프리드먼이 논문에서 강조한 실용적 동기이기도 했다.
- 외삽은 여전히 못 한다. 잎이 상수를 내놓는 한 랜덤 포레스트와 똑같이 훈련 범위 밖에서 평평해진다. 트리 앙상블 전반의 성질이지, 부스팅이 극복한 것이 아니다.
- 단조 제약과 상호작용 제약. 주요 구현 모두 “이 특징에 대해 예측이 단조 증가”를 강제할 수 있다. 규제 산업(신용평가, 보험 요율)에서 물리적·정책적 사전지식을 모형에 박아 넣는 실용적 수단이고, 정확도를 조금 내주는 대신 심사를 통과시킨다.
- 해석은 사후 도구에 의존한다. 트리 수백 그루의 가법 모형이므로 개별 트리의 해석가능성은 진작에 사라졌다. TreeSHAP처럼 트리 구조를 이용해 섀플리 값을 다항 시간에 정확히 계산하는 방법이 표준처럼 쓰이지만, 이건 모형이 무엇에 의존하는지를 말할 뿐 인과가 아니라는 설명 가능한 인공지능의 일반적 경고가 그대로 적용된다.
- 확률 보정. 로지스틱 손실로 학습해도 조기 종료 지점·수축 정도에 따라 출력 확률이 치우칠 수 있다. 확률 자체가 의사결정에 쓰이면 플랫 스케일링이나 등위회귀로 보정하는 단계를 넣는다.
8. 관련 문서[편집]
- AdaBoost · 결정 트리 · 랜덤 포레스트
- 경사하강법 · 확률적 경사하강법 · 뉴턴법
- 편향-분산 분해 · 교차검증 · 부트스트랩
- 능형회귀 · 라쏘 · 대리 모델
- 드롭아웃 · 심층 학습 · 과적합
9. Footnotes[편집]
-
그래서 부스팅의 하이퍼파라미터 탐색 공간을 짜면서
n_estimators를 100/300/1000 으로 격자에 올려 두는 코드는 실질적으로 조기 종료를 손으로, 그것도 세 점만 찍어서 하는 것이다. 격자 크기가 세 배로 늘고 얻는 건 조기 종료보다 나쁜 답이다. 그럼에도 인터넷 예제 코드의 절반은 여전히 이 모양이다. ↩ -
LightGBM 문서가
num_leaves를 보다 작게 잡으라고 명시해 두었는데도 이 사고가 끊이지 않는 이유는, XGBoost 설정을 그대로 옮겨 붙이는 관습 때문이다. 레벨 단위 성장에서 최대 깊이 10은 “잎이 최대 1024개까지 가능”이라는 뜻이고 실제로는 훨씬 적게 나오지만, 리프 단위 성장에서num_leaves=1024는 정말로 1024개를 채우러 간다. ↩ -
이 결론에는 조건이 붙는다는 점도 정직하게 적어 둔다 — 비교 벤치마크들은 대체로 표본이 수천~수십만 개인 중소 규모 정형 데이터셋을 대상으로 한다. 표본이 수천만 개를 넘고 특징에 자연스러운 구조(텍스트 필드, 시계열, 고카디널리티 ID 임베딩)가 섞이면 이야기가 달라지며, 실제로 대형 추천·광고 시스템은 진작에 신경망으로 갔다. “부스팅이 이긴다”는 문장의 유효 범위는 캐글 표 데이터 대회 크기라고 보면 대체로 맞다. ↩