Learning
인공지능 학습 과정에서 Active Learning 이란 아직 레이블링이 되어 있지 않은 데이터(unlabeled data) 중에 모델 학습에 가장 효과적일 것 같은 데이터를 고르는 작업을 말합니다. 여기서 말하는 효과적인 학습이란, 결과적으로 가지고 있는 데이터셋 전체를 잘 학습했을 때의 기대 성능이 100이라면 샘플링 작업 속도 측면에서 ‘어떻게 하면 100에 빠르게 도달할 수 있는지’ 또는 ‘혹시 그 이상의 성능을 확보할 수 있는지’가 있을 수 있습니다.
인공지능 모델 입장에서는 아직 공부한 적도 없는 문제들(데이터)인데, 누가 나한테 더 도움이 될지 어떻게 알아?라고 할 수 있지만, 사실 사람도 직감적으로 알 때가 있습니다. 어떤 문제가 더 어려운지, 어떤 챕터를 공부하면 지금 나에게 더 중요할지.
데이터헌트에서는 AI 모델을 통해 사전 레이블링(Pre-labeling) 작업을 하고 이후 사람 작업자가 작업을 수정합니다. 이를 설명하기 위해 하나의 상황을 만들어 보겠습니다.
손을 다쳐서 문제를 직접 푸는데 시간이 많이 걸리는 나(작업자)는 학교 시험을 대비하여 친구(AI)에게 컨닝 페이퍼(pre-label)를 부탁했습니다. 친구가 공부를 잘할수록 내가 직접 풀 문제도 적어지고 시험 성적도 올라갈 것 같습니다. 그래서 공부를 잘하는 나는 친구에게 수업을 해주기로 했습니다.
컨닝 페이퍼 버전 1
얼핏 보면 훌륭한 것 같지만 결국 모델은 초기 소량의 데이터로만 학습한 그다지 똑똑하지 않은 모델일 가능성이 높습니다. 제대로 공부도 하지 않은 친구가 만든 컨닝 페이퍼는 신뢰하기 어려운 구석이 많을 것 같습니다… 오히려 우리의 머리를 복잡하게 할 가능성이 높겠죠.
그래서 주기적으로 친구에게 공부를 가르쳐 주기로 했습니다. 24시간 붙어 공부를 가르쳐주기는 어려우니까 적당한 주기로 수업을 진행해 보겠습니다.
컨닝 페이퍼 버전 2
작업자가 작업을 진행할수록 모델이 공부하는 내용이 많아집니다. 만약 수업을 하루에 한 번씩 진행한다면 매일매일 똑똑해지는 모델을 만들 수 있고, 우리가 얻는 컨닝 페이퍼는 점점 더 정답에 가까워지고 신뢰할 수 있을 것 같습니다.
하지만 모든 내용을 한 번씩 공부한다고 해서 각 내용에 대한 실력이 똑같기는 어렵습니다. 이해가 잘 되는 내용이 있으면 그렇지 않은 내용도 있을 수 있으니까요. 그래서 친구가 잘 모르는 내용 위주로 수업을 진행하면 더 효과적일 것 같습니다
컨닝 페이퍼 버전 3
자기가 약한 부분을 직접 파악하고 더 공부하겠다는 친구가 너무 대견스럽습니다. 이렇게 열심히 공부한 친구가 만들어 준 컨닝페이퍼를 갖고 시험을 보면 혹시 만점을 받는 건 아닌지 벌써부터 기대가 됩니다.
Active Learning 의 이런 과정을 그림으로 표현하면 아래와 같습니다.
그림을 통해 본 Active Learning 에서는 여러 가지 요소들이 존재합니다.
이 중 가장 연구가 활발하게 진행되고 중요하게 다뤄지는 샘플링 방법에 대해 알아보고, 데이터헌트에서는 어떤 방법으로 Active Learning 을 통해 샘플링 작업 속도 에 효과적으로 도입했는지 살펴보겠습니다.
사실 Active Learning 에는 여러 가지 방법론이 존재합니다.
Membership Query Synthesis(현재 모델이 학습했으면 하는 데이터를 직접 생성하는 방법), Stream-based Selective Sampling(순차적으로 오는 데이터를 두고 학습 여부를 결정하는 방법), 그리고 Pool-based Sampling(보유한 전체 데이터를 두고 그 안에서 어떤 데이터를 먼저 학습할지 결정하는 방법)이 대표적입니다. 이번에는 그중 Pool-based Sampling에 대해 이야기하려 합니다. 그 이유는 아래에서 부연 설명하도록 하겠습니다.
데이터헌트에서는 Active Learning의 몇 가지 전략 중 Pool-based Sampling을 적용할 경우가 많습니다. 왜냐하면 작업에 앞서 전체 데이터셋을 확보하는 경우가 많기 때문입니다. 그리고 실제 서비스에서도 많은 데이터를 먼저 보유하고 있는 상황이 많은지 Pool-based 방식에서 가장 많은 연구가 이루어지고 있습니다.
많은 데이터 중 어느 것을 먼저 학습시키면 모델이 더 빠르게 똑똑해질까요? 이것 또한 방법이 여러 가지 존재하지만 그중 Uncertainty Sampling이 주목받고 있습니다. 구현도 쉽고, 범용적이며, 샘플링 속도 도 빠르는 장점이 크기 때문입니다. (이 점은 상당히 중요합니다. 모델은 쉬더라도 작업은 계속 진행되기 때문에 최대한 빠르게 pre-label을 전달할 수 있어야 하기 때문이죠.)
Uncertainty Sampling이란 단어 그대로 불확실성에 의거하여 데이터를 고르는 방법입니다. 모델이 뭐가 답인지 많이 헷갈릴수록 어려운 문제라는 것이 전제입니다. 불확실성을 판단하는 방법은 크게 3가지가 있는데, 그중 Maximum Entropy라는 엔트로피 기반의 불확실성 계산이 가장 유명합니다.
가장 간단한 분류(Classification) 문제를 살펴보겠습니다. 이 모델은 3가지 클래스를 분류하고 있고 각 입력 데이터에 대해 얻은 결과는 아래와 같습니다.
Least Confidence: 가장 유력한 클래스의 확률이 가장 낮은 데이터 선택
Margin Sampling: 가장 유력한 클래스(Top-1)와 그다음 유력한 클래스(Top-2)의 확률 차이가 가장 작은 데이터 선택
Maximum Entropy: Entropy가 가장 높은 데이터 선택
각 방법에서 서로 다른 결과를 얻을 수 있습니다. 그중 Maximum Entropy 방법이 가장 효과가 좋다고 알려져 있습니다 (정보 이론에서 엔트로피의 개념을 열심히 강조하는 것은 다 이유가 있었다).
예시는 데이터 단 3개를 들었지만 실제로는 적게는 1만 개, 많게는 10만 개 단위의 큰 데이터 중에서 먼저 학습해야 할 녀석들을 골라야 합니다. 시간이 많이 걸리는 일이기도 하고, 모종의 이유로 전체 데이터를 대상으로 위와 같은 과정을 거치지는 않는데 데이터헌트에서는 어떤 이유에서 그랬는지 또 실험 결과는 어땠는지 설명하겠습니다.
Beluch et al.에서 연구한 내용에 따르면 Unlabeled set에서 K-most uncertain samples를 뽑는 방법은 그다지 효과적이지 않다고 말하고 있습니다. 그 이유는 데이터셋 사이즈 대비 클래스의 수나 복잡도가 떨어지는 데이터에서는 정보의 중복이 발생하기 쉽기 때문이라고 합니다. 따라서 핵심은
의 사이즈를 어느 정도로 설정할 것인가는 실험에 따라 다를 수 있습니다. 저희의 실험에서는 전체 데이터 사이즈의 10%로 설정했습니다.
실험 방법
이렇게 했을 때 실험 결과는 mAP 기준 0.41 → 0.41로 변화가 없었습니다. 여기서 비교 군은 Active Learning을 진행하지 않고 무작위로 데이터를 골라 학습을 진행한 모델입니다.
분명 논문을 통해 연구된 내용으로는 효과적이었던 알고리즘이 이번 실험에선 왜 효과가 없었을까요? 그 이유를 여러 가지 생각해 봤습니다.
저희는 이 중 세 번째 – 샘플링 방법을 수정해 보기로 했습니다. 왜냐하면 첫 번째는 작업 스케줄링에 크게 영향을 줄 수 있고, 두 번째는 제어하기 어려운 요소이기 때문이었습니다.
생각해 보면 이 방법이 시사하는 바는 무엇일까요? 예시를 들어보겠습니다.
전교생이 1000명 있는 학교에서 임의로 5개 학급으로 나눠 놓고 하나의 학급에서 성적 순으로 100명을 선발하는 것으로 표현할 수 있습니다.
모델이 현재 어려워하는 데이터만 모아서 학습을 진행하기보다는 조금 더 넓은 범위의 학습이 효과적이지 않을까요? 우리는 이것을 학습 데이터가 경계(decision boundary) 근처에 편향(bias) 되었다고 이야기하고 이런 학습은 특정 클래스에 편향된 학습을 야기하거나, 앞으로 학습해야 할 다른 데이터의 분포를 잘 고려하지 못하는 generalized 가 덜 된 학습을 유도하게 될 것입니다. 따라서 이 문제를 해결하기 위해 다른 방법을 제안했습니다.
실험 방법
데이터 샘플링에 있어 decision boundary에 너무 집중되지 않은 Generalized Subset을 만들기 위해 나머지 그룹에서 정말 랜덤하게 샘플링을 수행합니다. 과 에서 샘플링 되는 데이터의 비율을 50:50으로 만들 수도, 30:70으로 만들 수도 있습니다. 하지만 이 실험에서는 너무 다양한 실험을 진행하지는 않았고 50:50으로 진행했습니다.
결과는 0.41 → 0.43으로 같은 양의 데이터를 학습했음에도 여러 번의 반복 실험 결과 유의미한 샘플링 속도 성능 향상을 얻을 수 있었습니다.
이번 글에서는 Active Learning에 대해 설명하고 데이터헌트에서 샘플링 작업 속도 에 어떻게 적용했는지에 대해 소개했습니다.
작업자의 작업 효율 향상을 위해 Pre-label을 전달하는 데 사용되는 모델을 학습하는 과정에서, 아무 전략 없이 학습하는 것이 아니라 아주 복잡하지는 않지만 나름의 전략과 실험을 통해 더 나은 모델을 만들 수 있었습니다.