Search

MRC Ensemble

Machine Reading Comprehension Task에 앙상블을 적용해 봅시다. 먼저 앙상블의 개념과 종류를 알아보고, MRC에 적용 가능한 방법을 찾아보겠습니다. 해당 포스트는 Reference를 개인 학습을 목적으로 정리한 글입니다. 자세한 내용은 원글을 방문해 주세요

What is Ensemble ?

앙상블은 통일, 조화를 뜻하는 프랑스어이다. 기계학습에서 앙상블은 Model Combining 라고도 한다. 하나의 예측 방법이 아니라 복수의 예측 모형을 결합하여 더 나은 성능의 예측을 할 수 있다. 결과적으로, 일반화(Generalization Capability)와 강건성(Robustness)을 향상시킨다.

앙상블의 종류

앙상블에는 수많은 방법들이 있고, 분류 기준에 따라 글마다 다양하게 소개된다. 이 글에서는 데이터사이언스스쿨의 분류 기준에 따라 대표적인 방법들을 정리했다.
앙상블은 크게 취합 방법론(aggregation)과 부스팅 방법론(boosting)으로 나눌 수 있다. 취합 방법론은 사용할 모델이 이미 결정되어 있지만, 부스팅 방법론은 사용할 모델을 점진적으로 늘려간다.
취합 방법론의 대표적인 방법들 - 다수결 투표 (Majority Voting) - 배깅 (Bagging) - 랜덤포레스트 (Random Forests) 부스팅 방법론의 대표적인 방법들 - 에이다 부스트 (AdaBoost) - 그레디언트 부스트 (Gradient Boost) ft.XGBoost 그 외 방법들 (데이터사이언스스쿨에서 소개되지 않아서 추가로 알아본) - 스태킹
Plain Text

취합 방법론 (Aggregation)

1 . Voting

보팅은 크게 하드 보팅 (Hard voting)과 소프트 보팅 (Soft voting)으로 나눌 수 있다. 하드 보팅 (Hard voting) : 각 모델들의 예측값을 바탕으로 다수결 투표하는 방식
소프트 보팅 (Soft voting) : 각 모델들의 예측 확률의 평균 또는 가중치 합을 사용 소프트보팅 中 예측 확률의 평균
소프트보팅 中 가중치 합 : 만약 각 모델들에 대한 신뢰도가 다를 경우, 예측 확률에 가중치를 부여할 수 있습니다.

2 . Bagging

Bootstrap Aggregating의 약자입니다. 이때 부트스트랩이란 주어진 데이터셋에서 random sampling하여 새로운 데이터셋을 만들어내는 것을 의미합니다. 이때 데이터의 중복 사용을 허용하면 Bagging, 허용하지 않으면 Pasting라고 부릅니다. 부트스트랩 예시
배깅에서는 부트스트랩을 통해 만들어진 여러 데이터셋을 바탕으로 각 모델을 학습합니다. 같은 모델을 사용하지만 서로 다른 결과를 출력하는 다수의 모델을 만들 수 있습니다. 이후 voting을 진행합니다.

3 . Random Forests

Bagging의 대표적인 예시로 Random Forests가 있습니다. 데이터사이언스에서는 이것을 하나의 앙상블 기법으로 소개했습니다.

부스팅 방법론 (Boosting)

부스팅은 반복적으로 모델을 업데이트하며 나아갑니다. 이전 iteration의 결과에 따라 데이터셋에 가중치를 부여합니다. 매 반복마다 각 데이터의 중요도에 따라 다른 보델이 만들어지게 됩니다. 결과적으로 모든 iteration에서 생성된 모델의 결과를 voting합니다.
부스팅 과정
배깅과 부스팅의 대략적인 모습

Ada Boost

Adaptive Boosting의 약자입니다.

Gradient Boost

Gradient Boost 알고리즘을 병렬 학습이 지원되도록 구현한 라이브러리로 XGBoost가 있다. 이외에도 CatBoost, NGBoost 등이 있다.

그 외 방법들

Stacking

그래서, MRC(기계독해)에 적절한 방법은 ?

앙상블은 Classification에만 많이 쓰이는 줄 알았는데.. 생각보다 너무 다양한 방법으로 앙상블이 가능했다.
MRC에 적절한 방법을 정리하자면,
1 ) 자연어 그대로를 하드보팅하는 방법 ⇒ 생각보다 성능이 좋다고 한다. 형태소, 불용어에 대한 전처리는 필요할 듯
2 ) start와 end position에 대해 소프트보팅하는 방법
⇒ 여러가지 모델을 사용하는 경우에는 모델마다 사용하는 Tokenizer가 다르기 때문에 토큰 단위의 소프트 보팅이 어렵다고 한다. 그러나 start와 end position은 가능해 보인다.
3 ) 배깅을 이용한 방법
⇒ 동일한 모델을 사용하기 때문에 구현이 보다 쉬울 것으로 보인다. 단, 우리가 가진 Train 데이터가 적기 때문에 배깅을 하는 경우 너무 적은 데이터로 모델을 학습할 수도 있다.
4 ) 부스팅을 이용한 방법
어렵지만 해보고 싶은 방식이다. 캐글에서도 XGBoost, NGBoost 등을 사용해 우승하는 사례가 많다고 한다.

Reference

Review

관련 논문을 찾았는데 아직 읽어보지는 못했다.
앙상블에는 수 많은 방법들이 있었고, 각각의 특징과 방법들이 너무도 다양해서 이들을 소개하는 방식도 글마다 달랐다. 보팅을 아예 소개하지 않는 곳도 있었다. 여러 분류 알고리즘(모델)을 사용하는 보팅, 하나의 분류 알고리즘을 사용하는 배깅과 부스팅으로 분류하는 곳도 있었다. 약간의 혼란이 있었지만 이해하는 데에 도움이 되었다.
보팅 배깅 부스팅 스태킹?