정답부터 말하면 그건 아무도 몰라.

How Much Training Data is Required for Machine Learning?을 바탕으로 How Do You Know You Have Enough Training Data?추가한 번역/의역/추가 글입니다. 번역이 이상하다고 느끼시는 분들은 원문을 참고해주세요. 원문의 저자가 번역을 하지 않기를 부탁하여 목차와 일부 내용만 가져오고, 내부 내용은 여러 자료를 통해 정리했습니다.

다양한 데이터셋의 크기

머신러닝과 딥러닝 등 데이터에 관련된 프로젝트에서 가장 중요한 질문 중 하나는 다음과 같습니다.

얼마나 많은 데이터가 필요합니까?

문제의 복잡성과 알고리즘에 따라 필요한 데이터의 양은 다릅니다.

하지만 문제의 복잡성과 알고리즘을 선택하더라도 답하기는 어려운 질문입니다. 하지만 이 질문에 대해 고려해볼 수 있는 몇 가지 방법이 있습니다.

한 번 이 고민을 함께 생각해봅시다.

Why Are You Asking This Question?

이 문제를 해결하기 위해서는 얼마나 많은 데이터가 필요한가요?

데이터의 양에 대한 고민은 왜 중요할까요?

이 질문에 대한 답에 따라 프로젝트의 다음 단계를 생각할 수 있기 때문입니다. 예를 들면 다음과 같습니다.

  • 데이터가 너무 많습니다 : 데이터에서 학습가능한 부분을 고려하고, 여러 학습 곡선을 통해 데이터가 얼마나 큰지 체크합니다.
  • 데이터가 너무 적습니다 : 데이터를 더 모으거나, 데이터를 늘리는 방법을 고려해야 합니다.
  • 아직 데이터를 모으지 않았습니다 : 데이터를 수집하고, 충분한 지 평가하는 방법을 고려해야 합니다. 데이터 수집에 대한 비용이 클 경우, 전문가와 상의하는 것이 좋습니다.

보다 일반적이고 평범한 질문으로 다음과 같은 질문이 있을 수 있습니다.

  • DB에서 export할 레코드는 얼마나 되나요?
  • 원하는 수준의 성능을 만들기 위해 데이터가 얼마나 필요한가요?
  • 모델 성능에 대한 충분한 확인을 위해 얼마나 데이터가 필요한가요?
  • 모델을 비교하기 위해서 얼만큼의 데이터가 필요한가요?
  • train/test split 또는 k-fold 교차 검증을 사용해야하나요?

어떤 이유로 질문을 하는지 아는 것은 중요합니다. 그렇다면 이제 다시 묻겠습니다.

그래서 얼마나 많은 데이터가 필요할까요?

1. ~에 따라 다릅니다.

cbc

처음부터 핵심을 말씀드리면, 아무도 여러분의 모델에 필요한 데이터의 양은 알 수 없습니다.

이 문제에 대한 답은 알 수 없습니다. 다만 수 많은 반복적 경험을 통해서 필요한 양을 찾아가야 합니다.

머신러닝 모델에서 필요한 데이터의 양은 다양한 요소에 따라 다릅니다. 예를 들면 다음과 같은 요소가 있습니다.

  • 문제의 복잡도(The complexity of the problem) : 입력에서 출력까지 이뤄지는 (우리는 알 수 없는) 함수
  • 학습 알고리즘의 복잡도(The complexity of the learning algorithm) : 문제의 함수를 어느 정도 근사하고 (가중치 등등을) 매핑 시켜주는 학습 알고리즘

이렇게 “~에 따라 다르다.” 라는 대답은 여러분이 처음 질문했을 때 들을 수 있는 답변일 것입니다.

2. 사전 연구를 참고하세요.

papers

이미 많은 분들이 머신러닝에 관련된 연구를 진행하였습니다. 또한 이에 대한 자료는 많이 출판되었고, github 등을 통해 소스코드까지 공유되어 있는 자료도 많습니다.

또한 논문의 출판과 동시에 이를 구현하시는 분들이 많아 소스코드 찾는 것은 쉽습니다.

그렇기에 비슷한 프로젝트에 대한 사전연구를 통해 자료수를 예측해 볼 수 있습니다. 또한 알고리즘 성능이 데이터 크기에 따라 얼만큼의 성능을 내는지에 관한 논문들도 존재합니다.

유명하고 많이 언급되는 문제에 대해서는 분명 필요한 데이터 양에 대한 정보는 얻을 수 있을 것입니다.

여러 연구를 미리 찾아보는 것은 좋습니다. 저자는 다음과 같은 링크를 추천했습니다.

그리고 개인적인 추천으로는 다음과 같은 사이트도 존재합니다.

또한 학습 알고리즘으로 라이브러리를 사용하는 경우, documentation에도 언급하는 경우가 많기에 그런 부분도 참고하면 좋습니다. (ex. tensorflow, keras, scikit-learn 등등)

3. 도메인 전문 지식을 활용하세요.

expert

해결하려는 문제의 대표적인 데이터 샘플이 필요합니다.

예시로 세포와 암세포를 구분하는 문제라면, 세포는 완벽하게 정상인 세포이고 암세포는 암세포만 존재하는 사진이 필요합니다.

이런 대표 샘플은 독립적이고, 균등한 분포를 가지고 있어야 합니다. 머신러닝에는 이런 말이 있습니다.

GIGO : Garbage in, Gabage out.

머신러닝은 결국 입력과 출력을 매핑해주는 역할입니다. 좋은 데이터를 입력으로 줘야, 좋은 결과를 얻을 수 있을 것입니다.

즉, 입력과 출력의 특징 간의 존재할 수 있는 관계들을 합리적으로 찾아낼 수 있는 충분한 데이터가 있어야 합니다. 이런 관계에 대한 생각은 분야에 대한 전문적인 지식이 많을수록 생각할 수 있을 것입니다.

도메인에 대한 전문성은 필요한 데이터 규모를 예측하는 데 좋은 인사이트를 줄 수 있을 것입니다. 특성 공학은 언제나 환영입니다.

4. 통계적 경험을 사용하세요.

통계적 휴리스틱(경험적) 방법을 사용하여 필요한 데이터 수를 점진적으로 찾는 방법도 있습니다.

흔히 분류 문제에서 많이 사용하는 방법으로, 임시적인 방편입니다. 다음과 같은 방법을 고려해 볼 수 있습니다.

  • 클래스 별 데이터 수 : 클래스 별로 최소 필요 데이터 수를 조정합니다. 10배씩 늘려가며 로그 스케일로 데이터 사이즈를 키워보는 방법입니다.
  • 입력 feature 수 : 입력에 대한 feature가 있을 때, feature 수보다 x% 많은 데이터가 필요합니다. (feature가 많을수록 문제가 복잡해지므로)

점진적인 방법 말고는 어떤 방법이 존재할까요? 아래와 같은 방법들을 사용할 수 있습니다.

  • 정규 분포에 따른 표본 크기 추정
  • VC 차원 사용. 아래는 이에 대한 간단한 식입니다.
\[N = F(\frac{VC+ln(\frac{1}{d})}{epsilon})\]

물론 이 방법도 임시 방편이라는 것 명심하세요.

5. 비선형 모델은 더 많은 데이터를 필요로 합니다.

강력한 머신러닝 모델은 비선형인 경우가 많습니다. 예시로는 랜덤 포레스트나 딥러닝(인공신경망) 등이 있습니다.

비선형 모델의 특징은 입력과 출력의 특성간의 복잡한 비선형 관계를 학습할 수 있다는 점입니다. 이런 특징에 의해 딥러닝이 이렇게 많은 관심을 받게 되었습니다.

비선형 모델은 선형 모델에 비해 유연하고, 매개변수도 따로 설정할 필요가 없습니다. 하지만 이런 장점과 데이터의 수는 트레이트-오프 관계입니다. 유연하고, 매개변수를 따로 설정할 필요가 없는 대신 데이터의 수는 더 많이 필요합니다.

선형 모델이 클래스 당 100단위의 샘플로 성능을 낸다면, 비선형 모델은 클래스 당 1000단위의 샘플이 필요할 수 있습니다.

데이터를 더 많이 사용할 수 없고, 컴퓨터 자원이 부족하다면 도메인 지식을 활용하여 feature engineering을 통해 그 부분을 매꿔야겠죠?

6. 학습 곡선을 활용하세요.

이 방법은 새로운 머신러닝 알고리즘을 개발하거나, 기존의 알고리즘의 성능을 평가하기 위해서 사용합니다. 정확히는 모델의 성능과 데이터 사이즈의 관계를 그래프로 표현하는 학습 곡선(learning) 에 관한 것입니다.

이런 방법은 알고리즘 개발자 분이 연구를 진행하고 출판하지 않았을 수도 있으며, 알고리즘에 따라 시도하지 않았을 수도 있습니다.

우선적으로 가용 데이터와 기존의 좋은 머신러닝 모델(ex. 랜덤 포레스트)을 사용하는 것입니다.

x축을 훈련 테스트 세트의 크기, y축을 모델의 성능으로 plotting한다면 데이터의 크기가 특정 문제에 대한 모델에 미치는 영향을 알 수 있을 것입니다.

이 결과를 통해 여러분은 숙련된 모델을 개발하는 데 필요한 데이터의 양을 예상할 수 있습니다. 그리고 결과가 안좋아지는 지점(변곡점)까지 필요한 데이터의 양도 어느정도 예상할 수 있습니다.

많은 글에서 일반적인 모델을 만들기 위해 이 방법을 가장 추천하고 있습니다.

이에 대한 학습곡선 방정식도 있는데, 이에 관해 관심이 있는 분들은 개인적으로 찾아보시는 것을 추천합니다.

7. 가볍게는 다음과 같이 이야기할 수 있습니다.

머신러닝 알고리즘은 여러모로 많은 수의 데이터가 필요합니다. 보통 고전적 통계 방법보다 더 많은 데이터를 필요로 합니다.

보통 필요 데이터 수에 대한 가벼운 질문에 대해서는 다음과 같은 답을 드릴 수 있습니다.

가능한 최대의 데이터를 가져와 사용하세요.

또한 여기에 제가 도메인에 대한 지식도 없다면, 다음과 같은 답변을 드릴 수 있습니다.

  • 수천개의 데이터가 필요합니다.
  • 최소 수백개의 데이터가 필요합니다.
  • 모델이 평균적으로 성능을 내기 위해서는 수만, 수십만 개의 데이터가 필요합니다.
  • 딥러닝과 같이 어려운 문제에 대해서는 수백만, 수천만개의 데이터가 필요합니다. (처음부터 학습하기 위해서는.)

무성의한 답변이라고 생각할 수도 있겠지만, 이것이 현실입니다.

도메인에 대한 지식이 없고, 머신러닝을 진행하고자 한다면 좋은 데이터를 많이 모으는 것이 가장 중요하니까요.

이미 학습된 모델을 사용하면 수치가 달라질 수는 있겠지만, 이미 학습된 모델에서는 수만, 수십만개의 데이터를 통해 학습했다는 점을 기억합니다.

8. 할 수 있는만큼 모으세요.

max

빅데이터는 머신러닝과 함께 논의되지만, 예측 모델에서는 꼭 빅데이터가 필요하지 않을 수 있습니다.

하지만 일부 문제는 물론 가지고 있는 모든 데이터, 빅데이터를 필요로 합니다. 예를 들면 간단한 통계적 기계 번역기가 있습니다.

가장 중요시하게 생각해야하는 부분은 머신러닝은 추측을 위한 방법론이라는 사실입니다. 주어진 데이터와 아에 연관성이 없는 데이터라면 모델은 이 edge case를 예측할 수 없을 것입니다. edge case를 없애기 위해서는 그에 따른 다양한 데이터셋이 존재해야 합니다.

마치 고양이 사진이 없는 데이터에서 고양이를 분류하는 것은 매우 어려운 문제입니다.

그러기 위해서 적어도 판별하고 싶은 문제에 대해서는 최대한 다양하고 많은 수의 데이터셋을 구하는 것이 중요합니다.

추천 자료

저자가 추천해준 자료들과 개인적으로 찾은 자료 중 이 질문에 대한 이해를 높일 수 있는 자료를 선별해봤습니다.

이 논문은 학습 곡선을 통해 데이터셋의 필요 크기를 계획하는 방법에 관한 논문입니다. 12년 논문이라 꽤나 이전 논문이지만, 이런 문제에 대한 논의를 하기에 좋은 논문인 것 같습니다.

the rule of 10이라는 규칙에 대한 글입니다. 훈련 데이터 수와 모델의 파라미터 수를 10:1로 하는 것입니다. 저는 처음 들었지만 꽤나 유명한 법칙이네요. 반드시 적용되는 것은 아니지만 많은 문제에서 경험적으로 좋은 성능을 냈다고 합니다.

학습 곡선에 대한 자료입니다. 이 사이트의 경우 머신러닝에 관한 여러 자료를 담고 있어, 그냥 공부하시는 분들에게도 좋은 사이트인 것 같습니다.

VC 곡선에 대한 영상 자료입니다. 많은 stackoverflow에서 이 강의를 추천하기에 가져왔습니다.

Summary

경험적인 방법을 통한 학습을 제외하고, 실질적으로 데이터 수를 예측할 수 있는 방법은 없습니다. 그렇기에 분야에 대해 더 공부하고, 데이터를 꾸준히 모으는 것이 현실적인 답안입니다.

물론 딥러닝에 있어, 이미 사전에 훈련된 모델이 있다면 재사용을 통해 필요한 데이터셋을 줄이는 방법도 있습니다. 이 경우에 있어서는 사전에 훈련된 모델과 문제의 상관도에 따라서 필요한 데이터셋의 수가 급격하게 줄어들 수도, 아무런 상관이 없을 수도 있습니다.

정말 운이 좋은 경우에는 100개 정도의 데이터셋만 존재해도 괜찮을 수 있습니다. 이와 관련된 글들은 다음을 참고하면 좋을 것 같습니다.

부족하지만 데이터 사이즈를 고민하는 분들에게 좋은 자료가 되면 좋겠습니다.

Reference

본문 제외 자료

Leave a Comment