정답은?
아무도 모른다!
왜 그럴까?
프로젝트에서 다루는 문제의 복잡성은 정말 다양하다. 개와 고양이를 구분하는 비교적 간단한 분류 문제부터 조직 슬라이드에서 특정 림프구를 구분하는 비교적 복잡한 문제도 있다. 그럼 이 두 문제를 학습하기 위한 충분한 데이터의 양은 동일할까? 정확히는 모르지만 아마도 대부분의 사람들이 직감적으로 다를 것이라 생각할 것이다.
그래서 얼마나 필요한데?
문제의 복잡성과 사용하는 모델의 따라서 충분하다고 말할 수 있는 데이터의 양은 다르다고 말할 수 있다. 하지만 얼마나 필요한가? 대답하기는 어렵지만, 이 정도로 생각해 볼 수는 있을 것 같다.
상황에 따라 다르다
정해진 답은 없으며, 경험에 따라서 답을 찾아갈 뿐이다. 앞서 언급했듯, 문제의 복잡성이나 학습 알고리즘의 복잡도 등에 따라서 필요한 데이터의 양은 다르며 반복적으로 비슷한 문제를 해결하다 보면 어느 정도 감이 생긴다는 정도로 말할 수 있다.
구글링으로 유추하자
이미 많은 사람들이 앞서서 머신러닝에 관련된 연구를 진행했고 이와 관련된 자료들은 논문이나 깃헙 등에서 손쉽게 찾아볼 수 있다. 내가 진행하는 프로젝트가 세상에서 유일무이한 정말 특이한 케이스의 문제가 아닌 이상 관련 자료를 찾아볼 수 있을 것이고 이를 바탕으로 사전에 필요한 데이터의 양을 가늠해 볼 수 있을 것이다. 또한, 데이터의 양에 따른 성능을 비교하는 논문들도 있으니 참고하면 좋을 것이다.
(이런 자료를 찾아보기 위해서 나는 Arxiv와 Paper with Code를 자주 사용하곤 한다)
도메인에 대한 전문성을 활용하자
데이터가 무조건적으로 많다고 해서 좋은 것은 아니다. 데이터에 불필요한 데이터만 많이 있다면, 그 결과 또한 쓸모없을 것이다. 머신러닝은 결국 입력과 출력을 매핑해주는 역할로 좋은 결과를 위해서는 좋은 데이터 역시 필요하다.
좋은 데이터는 무엇일까? 입력과 출력 간의 관계를 합리적으로 찾을 수 있을 정도로 충분한 데이터가 좋다고 말할 수 있다. 전문 지식을 활용하거나 전문가의 도움을 받아 이러한 관계에 대해 깊게 생각해 볼 수 있으며 이러한 생각은 데이터의 양을 예측하는데 도움이 될 것이다.
통계적 방법을 사용하자
통계적 휴리스틱 방법을 사용해서 데이터의 수를 찾아가는 방법도 있다. 물론, 정답이라기보다는 임시적인 방편이다. 점진적으로 찾는 방법은 다음과 같다.
- 클래스 별 데이터 수 : 클래스 별 최소 데이터 수를 점진적으로 늘려가며 데이터 사이즈를 키워보는 방법
- 입력 Feature의 수 : 입력에 대한 Feature 수보다 n% 많은 데이터를 사용하는 것
- 모델 Parameters의 수 : 각 Parameter에 대해 n개의 독립적인 예제를 두는 것
그 외에도 정규 분포를 활용하여 표본을 추정하는 등의 방법이 있다.
비선형 모델은 많은 데이터가 필요하다
비선형 모델을 사용하는 딥러닝은 선형 모델에 비해서 더 유연하고 따로 매개변수를 설정할 필요도 없는 장점이 있지만 그만큼 비선형 모델은 많은 데이터가 필요하다. 하지만, 이 말은 반대로 선형 모델을 사용하면 필요한 데이터의 수는 상대적으로 적다는 것이다. 단, 그만큼 이런 관계나 매개변수를 설정하기 위한 전문지식이 더 필요해질 것이다.
모델과 데이터의 관계를 표현하자
학습 데이터의 양과 모델의 성능으로 그래프를 그려서 특정 문제에 대해 데이터의 크기가 모델에 미치는 영향을 알 수 있을 것이다. 이러한 그래프를 학습 곡선(Learning Curve)이라고 부른다. 학습 곡선을 그려보면서 필요한 데이터의 양을 유추할 수 있고 최소한의 데이터의 양도 예상해 볼 수 있을 것이다.
솔직히 간단히 말해서
뭐 그래서 얼마나 필요한 것일까?
꼭 대답을 듣고 싶다면, 전문 지식을 활용하거나 특별히 생각하지 않고 그냥 간단하게 이렇게 말할 수 있다.
- 수천 개의 데이터가 필요하다
- 최소 수백 개의 데이터가 필요하다
- 어느 정도 성능을 보장하려면 수만, 수십만 개의 데이터가 필요하다.
- 학습을 처음부터 하는 경우라면 이보다도 더 많은 데이터가 필요할 것이다.
그래서 결론은?
결론은 그냥 모을 수 있는 만큼 모아라! 최대한 많이라고 말할 수 있다. 그리고 이미 수십만 개의 데이터로 학습된 모델을 잘 활용하는 것도 좋은 방법이다.
머신러닝은 결국 추측의 과정이다. 한번도 보여주지 않은 것을 맞춰보라고 하는 것은 정말 어렵기에 적어도 해결하려는 문제에 대해 최대한 다양하고 많은 수의 데이터를 구하는 것이 가장 중요하다.
끝으로
결론은 결국 필요한 데이터의 양을 예측할 수 있는 방법은 없다. 따라서 데이터를 최대한 많이 모으고 관련 분야를 공부하고 경험을 쌓는 것이 해결책이라고 볼 수 있다.
그리고 이미 수십만 개의 데이터로 사전에 학습된 모델을 잘 활용하는 것이 현실적으로 가장 좋은 방법이라고 생각한다. 특히, 비슷한 문제를 다루는 모델을 찾는다면 비약적으로 필요한 데이터의 수를 줄일 수 있을 것이다. 정말로 운이 좋다면 100개 정도의 데이터만으로도 괜찮을 수 있다고 한다. (이와 관련된 참고자료)
Reference
'Study > AI' 카테고리의 다른 글
딥러닝의 핵심, 역전파 (0) | 2022.02.13 |
---|---|
모델의 평가지표란? (0) | 2022.02.06 |
딥러닝이란 무엇일까? (0) | 2022.01.15 |
Deep Learning Library for video understanding (0) | 2021.11.30 |
Knowledge Distillation 구현 (0) | 2021.11.29 |