최근 머신러닝, 딥러닝 등의 데이터를 활용한 기술적 요구, 서비스적 요구가 증가하고 있습니다.
단순히 기존에 웹 서비스, 앱 서비스를 제공해주는 것을 넘어서 사용자 데이터를 수집하는 방법, 저장하는 방법, 처리하는 방법에 대해서도 꾸준히 이야기가 나오고 있죠.
저는 최근에 저 중에서도 '머신러닝 프로젝트는 어떻게 관리되고, 어떻게 운용이 될까?'에 대해 정말 많이 궁금했었습니다.
이러한 프로젝트는 비교적 최근에 발생하고 있어서 어떤 것이 체계적인지 알 수 있는 방법이 많이 없었습니다.
예를 들어 웹 개발 같은 경우에는 Man Month 등을 계산해서 비용 계산하고, WBS나 간트 차트 등을 이용한 일정 관리 이후에 기획이 나오고 기획에 따른 개발 진행 등등 이런 프로세스가 있는 것으로 경험을 했는데(저의 적은 경험에 의하면..)
과연 머신러닝, 딥러닝 분야에서의 프로젝트 관리는 어떻게 되는 것인가입니다.
그러다가 머신러닝 프로젝트 관리에 대해서 강의가 나온 것이 있어 우연히 보게 되었습니다.
영어 실력이 매우매우매우매우매우 부족하기 때문에 무슨 말인지는 잘 모르겠으나, 일단 이해가 되는대로(?) 정리를 해보려고 합니다 ㅠㅠ
강의 자료는 여기서 들었습니다. -> https://fullstackdeeplearning.com/march2019
여기서 lecture 2의 내용을 들었습니다.
그럼 강의 내용을 정리합니다.
강의 주제
1. 머신러닝 프로젝트를 이해하기 위한 프레임워크 소개
2. 머신러닝 프로젝트의 셋팅과 계획을 위한 best practices 설명
강의 내용
먼저 머신러닝 프로젝트의 라이프 사이클에 대해서 설명했습니다.
가장먼저 계획과 프로젝트를 셋업해야 한다고 했습니다.
여기서는 robot과 관련 데이터로 example로 들어서 pose estimation이 나옵니다.
아무튼, estimation에 대한 결정, 그리고 목표와 요구사항 정의, 관련된 자원 등을 계획해야 한다는 것이죠.
그리고 앞선 과정이 끝이나면 데이터 수집과 라벨링 작업에 들어가야 합니다.
훈련에 필요한 오브젝트를 수집하고, 여기 예제는 로봇 데이터니까 센서 데이터를 셋업한다고 합니다. 그리고 이미지 등의 오브젝트를 캡쳐, ground truth 등의 작업을 수행합니다.
여기서 만약, 데이터 수집과 라벨링에 문제가 있다면 다시 1단계로 돌아갈 수 있다는 것을 말하였습니다.
어떠한 경우냐면 데이터를 얻기가 매우 힘들거나, 작업이 힘들다고 하면 이렇게 돌아갈 수 있다고 합니다.
데이터가 수집되고 나면 훈련과 디버깅(training & debugging) 과정을 진행한다고 합니다.
여기 예에서는 opencv에서의 베이스라인 구현, SOTA 모델을 찾는 작업, 작업에 대한 debug, model 향상 등의 작업을 말하였습니다.
하지만, 여기서도 마찬가지로 다시 이전 작업으로 돌아갈 수 있다고 하는데요.
만약, 데이터 수집이 더 필요하거나, 라벨링이 신뢰할 수 없다고 판단되면 다시 이전 작업으로 돌아가 다시 데이터를 수집하고 라벨링 한다고 합니다.
그리고 아예 첫 번째 단계로 돌아갈 수 있다고 하는데요.
task가 너무 어렵다고 판단되거나, 요구되는 각각의 다른 tade off를 비교해서 어떤 것이 중요한 것인지 고민할 때 돌아간다고 합니다.
이 training과 debugging 작업이 끝이 나면 deploying & testing 작업으로 들어간다고 합니다.
제품화를 하고, 테스트 하는 과정이라고 합니다.
하지만 여기서도 다시 돌아갈 수 있는 이슈가 있는데요.
lab에서 잘 동작이 되지 않으면 training & debugging 과정으로 돌아간다고 합니다.
돌아가게 되면 모델의 정확성을 계속 향상시키려고 하구요
그리고 그보다 앞선 단계로 돌아가게 되는 경우에는 데이터를 더 수집하거나, 매칭이 제대로 되지 않는 데이터를 수정하거나 등의 작업을 수행한다고 합니다.
그리고 아예 초기로 돌아갈 수도 있다고 합니다.
우리가 선택한 평가 지표가 제대로 동작하지 못할 때, 그리고 현실 세계에서 성능이 썩 좋지 못하면 다시 맨 처음 머신러닝 프로젝트를 계획하고 프로젝트를 셋업하는 과정으로 돌아간다고 합니다.
그래서 모든 그림을 나타내면 위와 같은 모습이 된다고 합니다.
그리고 그에 따라서 cross-proejct에 대해서도 언급하며 팀 구성, 팀원 고용, 인프라 등의 영역도 추가했습니다.
그러면 우리가 알아야 할 것은 무엇일까요?
도메인을 이해해야하고, 연구 영역에서 소개해야 한다고 합니다.
전체적으로 보면 머신러닝 프로젝트는 위와 같다고 합니다.
그 중 본 수업은 맨 위 machine learning planning & project setup 부분을 다룹니다.
그래서 이번 강의는
1. 프로젝트 우선순위 및 목표를 정하는 것
2. 메트릭을 선택하는 것
3. 베이스라인을 선택하는 것
에 대해서 진행한다고 합니다.
먼저 머신러닝 프로젝트 우선순위에서 영향력이 높은 머신러닝 문제에 대해서 이야기 합니다.
prioritizing machine learning projects의 키포인트는 2가지입니다.
1. 영향력이 높은 머신러닝 문제
2. 머신러닝 프로젝트에서 데이터 가용성이 영향력이 있지만 정확도 요구사항도 큰 역할을 수행한다고 합니다.
(사진이 잘렸네요. B. Cost of ML projects is driven by data availability, but accuracy requirement also plays a big role 입니다.)
일반적인 프로젝트 우선순위를 위한 프레임워크라고 합니다. x축, y축에 따라 보시면 됩니다.
즉, 효과도 좋고 활용도도 좋은 것이 high priority라고 합니다.
그러면 높은 효과를 위한 머신러닝 프로젝트의 mental model에 대해서 이야기를 해본다고 합니다.
2가지를 언급하는데요.
1. 값싼 예측의 이득을 어디서 받을 수 있을까?
2. 소프트웨어 파이프라인의 자동화에 대한 부분
입니다.
위 내용은 the economics of ai라는 책에 있는 내용이라고 합니다.
인공지능은 예측 비용을 줄일 수 있다.
의사 결정에 예측이 중심이 된다.
값싼 예측( Cheap prediction)이라는 것은 예측이 어디서나 되고, 너무 비쌌던 문제에 대해서도 된다
그러니, 저렴한 예측이 비즈니스에 큰 영향을 미칠 프로젝트를 찾아보아라 라는 것입니다.
그리고 andrej karpathy가 언급한 gradient descent가 당신보다 좋은 코드를 작성할 수 있다고 말한 것을 언급하면서
소프트웨어 2.0에 대해서 언급했습니다.
소프트웨어2.0(software2.0)은 기존의 단순히 프로그래밍을 하는 것이 아닌 데이터와 함께 일하는 것을 의미한다고 말합니다.
그리고 머신러닝 프로젝트의 실행 가능성에 대해서 언급했는데요.
cost drivers에 데이터 가용성, 정확성 요구, 문제의 어려움을 나누고 main consideration를 설명해주었습니다.
data availability에서는 데이터 얻기가 어려운지, 가격은 어떻게 되는지 등이고
accuracy requirement에서는 잘못된 예측에 대한 비용, 얼마나 유용한 정보가 자주 나오는지 등입니다.
왜 정확도 요구사항이 중요할까? 위 사진을 보면 머신러닝 프로젝트의 비용(cost)는 정확도에 비례하여 상승한다고 합니다.
그리고 제품 설계에 따라 정확도를 위한 needs를 줄일 수 있다고 하는데요.
예를 들어 페이스북에서는 바로 사람의 얼굴에 태그를 다는 것이 아닌 스스로 태그를 달 수 있게 한다는 등.. 여기는 무슨말인지 모르겠습니다.
영알못 죄송합니다..
뭐 아무튼 저 내용은 이번 발표에서 말하지 않고 내일(다음날) 있는 발표에서 언급한다고 합니다.
그리고 실행 가능성에 대한 휴리스틱 방법에 대해서 언급했는데요. 예시와 counter 예시가 있습니다.
예를 들어서 어떤 문장을 이해한다고 하면 풍자, 유머 같은 것을 이해하기 힘들다는 예시입니다.
FSR은 여기서 로봇과 관련된 예시 Full Stack Robotics 입니다.
로봇과 관련된 예시로 impact와 실행 가능성에 대해 이야기를 해준 내용입니다.
결국 프로젝트 우선순위의 key point는 영향력 있는 ML문제를 찾으려면 파이프라인의 복잡한 부분과 cheap prediction이 있는 곳을 찾아봐야 한다고 합니다.
그리고 ML 프로젝트의 cost는 데이터의 가용성과 정확도 요구사항에 의해 결정된다고 합니다.
다음은 평가 지표 metrics에 대해서 설명합니다.
현실 세계는 지저분하고 일반적으로 많은 메트릭에 관심이 있다고 합니다.
그러나 머신러닝 시스템은 단일 숫자로 최적화할 때 잘 작동된다고 합니다.
결과적으로는 메트릭을 혼합해서 사용해야 한다고 하고, 그 공식은 변경될 수 있다고 합니다.
이 부분은 confusion matrix에 대한 accuracy, precision, recall에 대한 리뷰입니다.
해당 부분의 설명은 넘어가겠습니다.
사진으로 참고해주세요!
왜 단일 메트릭을 선택해야 할 까요?
만약에 저렇게 3개의 모델이 있다면 어떤 것이 best model일까요?
가장 단순한 것은 단순히 평균을 내는 것입니다.
단순히 평균을 내어서 모델을 보면 model3이 채택됩니다. 하지만 일반적으로 잘 사용하지는 않는다고하네요
두 번째는 n 번째 평가나 Threshold에 대한 메트릭입니다.
thresholding metrics은 위 사진과 같은 경우를 뜻합니다.
먼저 임계값으로 지정할 메트릭을 선택하는 내용입니다.
여기서는 도메인 영역에 대한 판단과 모델 선택에 민감하지 않는 메트릭, 가치 있는 값에 근접하는 메트릭이 어떤 메트린인가? 를 봐야 한다고 합니다.
그 다음 임계값 선택입니다.
마찬가지로 도메인 영역에 대한 판단이 있어야 합니다. 그리고 기준 모델이 얼마나 잘 동작하는가? 등에 대한 의문을 가지고 있어야 한다고 합니다.
그래서 만약 임계값에 대한 모델을 가지고 단일 모델을 선택하면 model 2를 선택한다고 하네요
다음의 모델 메트릭은 더 복잡하고 도메인에 특화된 공식의 metrics 등입니다.
여기서는 mAP를 언급했습니다.
AP는 Average Precision으로 recall-precision 그래프에서 선 아래 영역을 뜻합니다.
그리고 mAP는 Mean Average Precision 입니다.
이렇게 하면 model1이 선택된다고 합니다.
그래서 아래에서는 로봇과 관련된 example로 설명을 쭉 이어나갑니다.
예시는 그냥 보시면 될 것 같네요
다음은 baseline에 대한 내용입니다.
baseline에서 key point는 2가지입니다.
1. 베이스라인은 모델 성능에 대해서 최소 하한선을 제공합니다.
2. 하한선이 tight할 수록 더 유용하다
왜 베이스라인이 중요할까요?
위는 같은 모델인데 다른 baseline을 보여줍니다.
이렇게 되면 다음 단계가 달라질 수 있기 때문에 baseline이 중요하다고 합니다.
그러면 baseline은 어딜 보아야하나?
외부 베이스라인은 비즈니스, 엔지니어링 요구, 공개된 결과 등을 볼 수 있습니다.
내부적으로는 scripted baseline이 있다고합니다. 여기에는 규칙 기반 방법이 있다고 합니다.
그리고 단순한 machine learning baseline이 있다고 합니다.
표준적인 feature-based model, basic neural network model 등이 해당된다고 합니다.
그리고 어떻게 하면 좋은 human baseline을 만들 수 있을까에 대한 내용입니다.
전문가의 손을 탈수록 더 좋은거네요 ㅎㅎ
하지만 그럴수록 데이터 수집이 어렵습니다.
그리고 아래 내용도 이에 해당되는 내용입니다.
이 내용이 과연 머신러닝 프로젝트 관리의 정답일까요?
그렇지 않다고는 생각합니다.
하지만, 이렇게 정리된 내용이 있다는 것에 감사를 드립니다.
내용이 정확하지 않을 수도 있고, 이게 정답이 아닐 수 있습니다.
참고해주세요
정리는 여기까지 하겠습니다.
'machine learning(머신러닝)' 카테고리의 다른 글
윈도우10에 xgboost 설치하기 - ensemble xgboost install (4) | 2019.11.18 |
---|---|
머신러닝, 딥러닝에서 데이터를 나누는 이유 - X_train, X_test, y_train, y_test이란? (32) | 2019.11.17 |
머신러닝 앙상블 부스팅(boosting) - Adaboost, Gradient Boosting (2) | 2019.11.16 |
머신러닝 앙상블 부스팅이란? - ensemble boosting (2) | 2019.11.15 |
머신러닝 bagging 앙상블 랜덤 포레스트(random forest)란? (2) | 2019.11.15 |