프로필사진

IT Anthology/encyclopedia

[알고리즘 중심의 머신러닝 가이드] 13. 위원회의 결정: 앙상블 학습

다각 2022. 1. 2. 15:22

이 글은 제이펍(Jpub)에서 발간된 <알고리즘 중심의 머신러닝 가이드(제2판)>을 공부하고 요약한 글입니다.


목차

들어가기 전에
13.1 부스팅
13.1.1 아다부스트
13.1.2 스텀핑
13.2 배깅
13.2.1 서브배깅
13.3 랜덤 포레스트
13.3.1 부스팅과 비교하기
13.4 분류기를 종합하는 다른 방법들


들어가기 전에

랜덤 포레스트에 대해 본격적으로 논하기 전, 랜덤 포레스트의 기본적인 개념인 '앙상블 학습'에 대해 다시 한번 짚고 넘어가고자 한다.
앙상블 학습의 정의와 목적에 대해 알아보도록 한다.

- 앙상블 학습(ensemble learning)이란?

더 좋은 예측 성능을 얻기 위해 약학습자(weak learners) 여러 개를 조합하여 강한 학습자(strong learner)를 만드는 것이다.
정의에 따르면, 우리가 앙상블 학습을 실제로 실행하기 위해서는 다음 두가지 사항을 알아야 한다.
(1) 약학습자 각각의 학습 방법에 대해
(2) 약학습자의 최종 조합 방법에 대해

- 앙상블 학습의 목적

정의에서 살짝 언급했듯이, '더 좋은 예측 성능을 얻기 위해' 앙상블 학습을 한다.
그렇다면 여기서, '더 좋은 예측 성능'을 얻는다는 것은, 어떤 의미일까?
바로 편향(bias)과 분산(variance)에 대해 더 좋은 성능을 보이는 것이다.
즉, 편향과 분산을 낮추어 더 정밀하고 정확한 예측을 하는 것이다.

13. 3 랜덤 포레스트

랜덤 포레스트의 정의

렌덤 포레스트는 앙상블 학습의 일종으로, 여러 개의 결정 트리를 이용하여 학습한다. 검출, 분류, 회귀 등의 다양한 문제에서 사용된다. (출처: 위키피디아)

랜덤 포레스트의 기본 아이디어

앙상블 학습의 기본은 다양한 약학습자를 조합하는 것이라고 언급한 바 있다.
그렇다면, 이러한 약학습자의 '다양성'은 어떻게 만들 것인가?
즉, 학습에 있어서 '무작위성'을 어떻게 높일 것인가?

랜덤 포레스트는 여기서 '배깅(bagging)'을 사용해 더욱 다양한 약학습자를 더욱 많이 생성해낸다.
여기서 중요한 것은, data에 대해서만 배깅을 하는 것이 아니라는 사실이다.
feature에 대해서도 배깅을 한다.*
데이터를 무작위로 일부 뽑아내에 샘플링 하는 것처럼, 피처도 무작위로 일부만 뽑아내어 여러 개의 결정트리를 만든다.
이렇게 하면 무작위성도 높아질 뿐더러, 덩치가 작아진 모델에 트레이닝 속도 역시 빨리진다.

랜덤 포레스트의 새로운 고민거리

이렇게 데이터뿐만 아니라 피처에 대해서도 배깅을 한다하면, 실제로 이것을 구현하는 사람들은 새로운 고민거리를 안게 된다.
그렇다면 대체 몇 개의 피처씩 뽑아야 할 것인가.
보통은, 회귀 문제에서는 1/3의 값을, 분류 문제에서는 전체 피처 수의 제곱근 값을 이용한다고 한다.
하지만 이는 통상적으로 추천하는 값이며, 랜덤 포레스트의 대표적인 알고리즘, CART를 만든 브레이만(Breiman)은 "어떤 문제를 푸냐에 따라 달려있으니, 제일 적당한 값 찾고 싶으면 걍 튜닝해서 사용하는 거 ㅊㅊ"이라고 밝혔다.

** 여기서 잠깐! 01**
피처의 부분 집합 개수(m)가 뭐가 그렇게 중요한데?
: 사실 많이 중요하진 않다. 랜덤 포레스트는 m에 그렇게 민감하지는 않다.
: 하지만 m의 값이 적당해야하는 이뉴는, m이 증가할 수록 트리 하나하나의 힘은 강해지지만, 트리 사이의 상관도도 같이 높아진다.
트리 간의 상관도가 높아진다? 다양성을 추구하는 앙상블 학습의 기본 정신이 무너지는 것...

** 여기서 잠깐! 02**
회귀 문제랑 분류 문제에서 추천하는 m값이 왜 그렇게 다른 건데?
: 회귀 문제에서는 분류 문제보다 m이 증가하고 감소함에 따른 변화가 크지 않기 때문에, 분류 문제보다 더 큰 m값을 설정해줘야 한다.
(참고: References on number of features to use in Random Forest Regression)

랜덤 포레스트가 좋은 이유

물론 렌덤 포레스트는 하나의 결정트리보다 더 좋은 성능을 내기 때문에 좋다고 말할 수 있다.
하지만 이것 말고도 또 다른 장점을 꼽으라면, 머신러닝의 다른 알고리즘과 비교해서 병렬로 실행할 수 있는 것을 최대 장점으로 뽑을 수 있다.
(연습용으로 하는 학습 말고 찐으로 결과를 내야하는 학습을 시켜야하는 사람이라면, 이 '병렬'이라는 단어를 무척이나 반길 것이다. 내 퇴근 시간을 앞당기는 마법의 단어이니까)
랜덤 포레스트는 학습 과정에서 각각의 트리가 상호 간에 영향을 끼치지 않고, 독립적으로 움직여 각각의 결론을 낸다.
즉, 학습 속도는 컴퓨팅 파워에 대해 선형으로 증가한다.

또한, 랜덤 포레스트는 (약간의 귀찮음만 감내하면), 내장된 테스트 데이터를 가질 수 있다.
부트스트랩은 약 35%의 데이터를 평균적으로 제외하고 샘플링하게 되는데, 이 데이터들을 잘 사용하면 데이터를 추가할 필요 없이 테스트 에러를 예측할 수 있는 것이다.

부스팅과의 차이점

부스팅 랜덤 포레스트
전체 피처를 매 단계 검색 (소비적) 피처의 부분 집합에 대해서만 검색 실행(빠름)
현재 단계는 지난 단계에 종속적 병렬적으로 실행 가능

-> 랜덤 포레스트의 트리를 트레이닝 하는 것은 비용이 매우 적으므로, 같은 계산 비용으로 압도적으로 많은 트리를 생성할 수 있어, 좋은 성능을 낸다.

13. 4 분류기의 종합

앙상블 학습에 대해 초반에 소개했던 바에 따르면, 앙상블 학습을 하기 위해 다음의 두가지 사항을 알아야 한다고 언급한 바 있다.

(1) 약학습자 각각의 학습 방법에 대해
(2) 약학습자의 최종 조합 방법에 대해

(1)은 위의 설명으로 충분히 설명이 된듯하고, 이제 (2)에 대해서 알아볼 차례이다.

다수결 투표

보통 랜덤 포레스트에서 '분류'는 다수결 투표(voting) 방식으로 결정하고, 회귀 문제에서는 평균을 내어 이 부분을 해결한다.

물론 이 다수결의 투표 결과가 얼마든지 틀릴 수도 있기 때문에, 똑똑한 인간들은 앙상블이 정답을 맞힐 확률까지 계산해버린다.

각 분류기가 성공적일 확률이 p일 때, 전체 앙상블이 정답을 맞힐 확률은 이항 분포를 따른다.

이에 따르면 각각의 분류기가 답을 맞힐 확률이 50% 정도만이라고 해도, 100개 정도의 분류기가 모여 있으면 앙상블이 정답을 맞힐 확률은 1에 가까워진다고 한다.

브래깅 알고리즘

회귀의 최종 값에 대해서는 평균을 낸다고 언급한 바가 있는데, 평균은 이상치(outlier)에 영향을 많이 받으므로 중앙 값을 사용하고, 이를 사용하면 '브래깅 알고리즘'이라고 부른다.

혼합 전문가(mixture of experts)

혼합 전문가(MoE)에서는 문제(task)를 subtask로 나누고, 이 subtask에 대해 각각의 예측값을 내놓아 pooling을 시도하는 방식이다.
이때 각 subtask의 예측값은 상관관계 게이트에 의해 다시 가중 투표된다.