MLOps-Selecting/Training Model

Selecting and Training Model

새로운 Datasets를 어떻게 다뤄야 하는지, test set에서는 잘 작동하는 모델이 real data에서는 잘 작동하지 않을 때 어떻게 해야 하는지 등 Production-ready model를 만드는 법에 대해서 알아본다.


Key challenges

Machine Learning system을 구축할 때, AI system은 Code + Data 라는 점을 생각하면 더욱 좋은 개발을 할 수 있다.

많은 Researcher들이 고정된 Data에 대해서 더 좋은 성능을 발휘하는 Model을 설계하는데에 시간을 쓴다.

하지만 그냥 github에서 적당한 모델을 가져와서 쓰고, 대신 많은 시간을 Data에 투자하는것이 더 효율적이고 좋은 성능을 도출할 때가 많다.

Model development 를 할 때 도전과제는 순차적으로 정의할 수 있다.

우선 Training set에서 모델이 잘 작동해야 할 것이다. Training set에 대해 잘 작동한다면 dev/test set에서도 model의 평가를 하고, 역시 잘 작동해야한다.

여기까지는 우리가 상식적으로 알고있는 당연한 도전과제지만, AI system을 상용화 하기 위해선 최종적을 Model은 business metric을 만족시켜야하고 project의 goal을 성취할 수 있어야 한다.

앞선 글에서 말했듯이 실제 환경에서는 다양한 요소에 따라 Input으로 오는 값이 변할 수 있기 때문에 dev/test set에서 잘 작동하는 Model을 만들었다고 project의 goal을 성취한것이 아니다.

Why low average error isn't good enough

Model이 매우 낮은 수준의 test set error를 보인다면 그 model은 뛰어나다고 할 수 있다. 하지만 그 Model이 바로 상용화가 될 수 있다는 의미는 아니다.

Performance on key slices of the dataset

Model production deployment에 적합하려면 특정의(disproportionately) 중요한 예제에 대해서 뛰어나야한다.

예를 들어 웹에 "Apple pie recipe", "Latest Movies", "Wireless data plan" 등의 검색을 한다고 하자. 이러한 Query들은 Informational and Transactional query 라고 부른다.

이런 정보들은 매우 다양하게 존재하기 때문에, 제일 최상의 결과를 제일 우선순위로 보여주지 않아도 User들은 그냥 넘어갈 수 있다.

하지만 "Standford", "Reddit" , "Youtube" 등의 검색을 수행한다고 하자. 이러한 Query는 Navigational query라고 부르며 원하는 목적지가 아주 명확하게 존재한다.

Youtube를 검색했는데 Youtube의 주소가 제일 상단에 위치하지 않는다면 User들로부터 신뢰를 잃을것이다.

이런 Data에 대해서 높은 weight를 주어 중요도를 올리는 방향으로 진행할 수도 있겠지만, 실제로 이런 방법은 문제를 해결하는데에 큰 도움을 주지 못할것이다. 이런점이 바로 Data의 key slices 에대한 Performance 고민으로 이어진다.

예를 들어 대출 승인 허가를 해주는 Service에서는 사람의 인종,성별,윤리,종교 등의 요소에 따라서 차별을 두면 안된다. 이런 차별이나 편견이 있으면 Learning algorithm이 아무리 높은 정확도를 갖고 있어도 실제로 상용화될수는 없을 것이다.


Rare classes

의료 진단에서 희귀병에 대한 Data가 있고 이 Data는 99%의 Negative(음성) 과 1%의 양성(Positive) 환자의 기록으로 구성되있다고 생각해보자.

이런 Dataset에 대해서는 Learning Algorithm이 아니라 그저 "0"을 print하는 간단한 알고리즘도 매우 높은 성능을 보일것이다. 하지만 이는 병을 진단하는데는 전혀 좋은 알고리즘이 아니다.

rare

X-Ray data에 대해 위와 같은 Condition들이 있다고 가정해보자.

만약 Effusion의 data가 10만개가 있고 Hernia의 data가 100개가 있는 상황에서 Hernia Condition의 성능은 더 낮다. 하지만 test set accuracy는 모든 Data에 대해서 동일한 가중치로 생각하기 때문에 만약 Hernia를 전혀 못맞춘다고 해도 전체 Accuracy는 여전히 높을것이다.

이러한 이유 때문에 Test set의 Accuracy가 높다고 해서 그 Model이 상용화 될 수 있다는것이 아니다. 실제 application에서 Hernia에 대한 case를 전혀 맞추지 못한다면, 그 service는 사용할 수 없을 것이다.



Establish baseline

Machine Learning Project를 시작하는 첫단계에서 많은 도움이 될 수 있는 것은 baseline을 정하는 것이다.

baseline

음성인식 모델을 개발할 때 여러가지 상황에 대한 정확도가 위와 같다고 하자.

네가지의 type 중 Low bandwidth가 다른 세개에 비해 많이 떨어지니 Low bandwidth의 성능을 올리는데 집중해야겠다고 생각할 수 있다.

하지만 그렇게 결정하기 전에, Baseline을 정하는것은 다음 task에 대해 좀 더 명확한 기준을 마련해준다.

human

각 Type에서 정확도를 Human-level performance와 비교해 봤을 때 정작 Low bandwidth의 정확도 향상 기대값은 거의 0%라는것을 알 수 있다.

대신, Car Noise에서는 4%의 여지가 남았있으므로 우리는 Car Noise의 Accuracy에 좀 더 집중하는것이 제일 효율적일 것이다.


Baseline을 수립하는 방법은 Unstructured data를 다루느냐 Structured data를 다루느냐에 따라 다소 달라질 수 있다.

Unstructured data는 Image, Audio, Text처럼 인간이 아주 능숙하게 해석할 수 있는 분야에 속한다. 인간이 이미 이러한 데이터를 해석하는데에 매우 뛰어나게 진화했기 때문에, Human-level performance를 baseline으로 잡는것은 좋은 방법일 수 있다.

반면 Structured data는 Excel sheet에 카테고리와 항목별로 정리되어 있는 대용량의 Data를 가르킨다. 이런 자료같은 경우에는 사람이 자료를 해석하는데에 그다지 뛰어나지 않기 때문에 Human-level performance를 baseline으로 잡는것은 좋은 생각이 아니다.

Ways to establish baseline

  • Human level performance (HLP)
  • Literature search for state-of-art/ open source
  • Quick and dirty implementation
  • Performance of older system

위와 같은 방법을 이용해서 Rough하게라도Baseline을 정하여 무엇이 어느정도까지 가능한지 파악하는것은 우리가 무슨 작업을 해야할지 우선순위를 정하는데 많은 도움을 줄 수 있다.



연관글

Establishing a baseline

Error analysis

Experiment tracking

Brundage, M., Avin, S., Wang, J., Belfield, H., Krueger, G., Hadfield, G., … Anderljung, M. (n.d.). Toward trustworthy AI development: Mechanisms for supporting verifiable claims∗. Retrieved May 7, 2021 http://arxiv.org/abs/2004.07213v2

Nakkiran, P., Kaplun, G., Bansal, Y., Yang, T., Barak, B., & Sutskever, I. (2019). Deep double descent: Where bigger models and more data hurt. Retrieved from http://arxiv.org/abs/1912.02292