본문 바로가기
MLOps/MLOps Specialization

[Course 1] Week 2 - Summary Note: Select and Train a Model

by Steve-Lee 2021. 6. 14.

안녕하세요 Steve Lee입니다.

Coursera의 MLOps 신규 강좌 학습을 시작한 지 어느덧 2주 차가 되었습니다.

개인적으로 바쁜 한 주였는데요. 2주 차 강의도 열심히 한 번 정리해 보도록 하겠습니다.

그럼 시작하겠습니다.🙌

 

본 포스팅은 Coursera의 MLOps 특화 과정을 학습하며 정리한 정리노트입니다.

 

 

Week 2: Select and Train a Model


2주 차 'Select and Train a Model' 시간에는 모델 전략(model stratiges)과 주요 쟁점들(key challenges)에 대해 알아보도록 합니다. 이번 시간에는 Error Analysis, Strategeis to work with different data types 등을 다룹니다.

또한 클래스 불균형(class imbalance)과 왜곡된 데이터(highly skewed data)를 처리하는 방법에 대해 알아보도록 하겠습니다 🙌

 

학습 목표


  • Identify the key challenges in model development.
  • Describe how performance on a small set of disproportionately important examples may be more crucial than performance on the majority of examples.
  • Explain how rare classes in your training data can affect performance.
  • Define three ways of establishing a baseline for your performance.
  • Define structured vs. unstructured data.
  • Identify when to consider deployment constraints when choosing a model.
  • List the steps involved in getting started with ML modeling.
  • Describe the iterative process for error analysis.
  • Identify the key factors in deciding what to prioritize when working to improve model accuracy.
  • Describe methods you might use for data augmentation given audio data vs. image data.
  • Explain the problems you can have training on a highly skewed dataset.
  • Identify a use case in which adding more data to your training dataset could actually hurt performance.
  • Describe the key components of experiment tracking.

 

  • 모델 배포에 있어서 주요한 과제들을 살펴봅니다
  • 소수의 불균형한 중요 예에 대한 성능이 대부분의 예에 대한 성능보다 얼마나 중요한지 설명합니다
  • 훈련 데이터에서 희귀한 클래스가 성능에 미치는 영향을 설명합니다
  • 성능에 대한 베이스 라인(baseline)을 정하는 세 가지 방법을 정의합니다
  • 구조화된 데이터(structured data)와 구조화되지 않은 데이터(unstructured data)를 정의합니다
  • ML 모델링 시작단계를 나열합니다
  • Error Analysis를 위한 반복 프로세스를 설명합니다
  • 모델 정확도를 개선하기 위한 작업을 할 때 우선순위를 결정하는 핵심 요소들을 식별합니다
  • 오디오 데이터와 이미지 데이터를 비교하여 데이터 증대(data augmentation)에 사용할 수 있는 방법을 설명합니다
  • 고도로 치우친 데이터(higly skewed dataset) 세트에 대해 학습할 수 있는 문제를 설명합니다
  • 훈련 데이터 세트에 더 많은 데이터를 추가하면 실제로 성능이 저하될 수 있는 사용 사례를 식별합니다
  • 실험 추적(experiment tracking)의 핵심 구성 요소를 설명합니다

 

Week 1: Overview of the ML Lifecycle and Deployment에 대한 내용은 아래의 링크를 통해 살펴보실 수 있습니다.
 

[Course 1] Week 1 - Summary Note: Overview of the ML Lifecycle and Deployment

안녕하세요 Steve Lee입니다. 금주부터 Coursera의 MLOps 신규 강좌 학습을 본격적으로 시작하게 되었습니다. 🙌 본 포스팅은 Coursera의 MLOps 특화 과정을 학습하며 정리한 정리노트입니다. Week 1: Overview

deepinsight.tistory.com

 

강의 목차


  • Selecting and Training a Model
  • Error analysis and performance auditing
  • Data iteration
  • Graded assessment

강의 목차에 비해 강의에서 얻어가야 할 지식들이 다소 많게 느껴집니다... 하나씩 파헤쳐보도록 하겠습니다...!

 

Selecting and Training a Model

Modeling overview


이번 주에는 기계학습 모델 배포에 적합한 머신러닝 모델 구축을 위한 모범 사례에 대해 학습합니다. 

 

what you learn in  this week

  • some of the key challenges of trying to build a production-ready machine learning model
    • e.g.
    • how do you handle new datasets?
    • what if you do well in the test set, but for some reason, that still isn't good enough for your actual application?

 

프로덕트 배포를 위한 머신러닝 모델 구축 과정에서의 도전 과제들은 무엇이 있을까요?

새로운 데이터 셋이 학습 데이터로 입력될 경우 어떻게 처리할 수 있을까요?

또는 테스트 데이터 셋에서는 성능이 좋았던 모델이 실제 애플리케이션에서 성능이 좋지 않다면 어떻게 해야 할까요?

 

Week 2에서는 이러한 문제들을 하나씩 해결해나가도록 하겠습니다.

 

Key challenges


 

 

우선 한 가지 알아두셔야 할 점이 있습니다. 바로 Machine Learning system의 AI system은 코드와 데이터를 포함한다는 것입니다.

지난 수십년 동안 코드를 개선하는 방법에 대한 주장이 있었습니다. 실제로 많은 연구들은 연구원들이 데이터 세트를 다운로드하고 데이터 세트에서 잘 작동하는 모델을 찾기 위한 노력으로 성장했습니다. 그 결과 github을 찾아보면 문제를 해결하기 위한 좋은 솔루션들이 많다는 것을 확인하실 수 있습니다.

그리고 교수님께서는 데이터에 조금 더 많은 시간을 할애하는 것이 보다 효과적이라고 말씀해 주셨습니다. 왜냐하면 데이터가 일반적으로 문제에 훨씬 더 맞춤화 되어있기 때문입니다. 이번 주와 다음 주에 걸쳐 하나씩 살펴보도록 하겠습니다.

 

Model development is an iterative process


모델 개발 프로세스는 어떻게 될까?

모델 학습에서 하이퍼파라미터의 범주는 제한되어있기에 코드와 데이터에 시간을 할애하도록 하겠습니다.

모델 개발은 매우 반복적인 프로세스입니다. 일반적으로 모델 개발은 일부 모델, 하이퍼파라미터, 데이터로 학습을 시작한 다음 모델을 가져와 오류 분석을 수행하고 이를 사용하여 모델 하이퍼파라미터 또는 데이터를 개선하는 방법을 결정합니다. 기계 학습은 이러한 경험적 프로세스이기 때문에 이 루프를 매우 빠르게 여러 번 통과할 수 있는 것이 성능 향상의 핵심입니다.

한편 성능을 향상하는데 도움이 되는 것 중 하나는 루프를 통해 매번 데이터를 수정하는 방법이나 모델을 수정하는 방법 또는 하이퍼 매개 변수를 수정하는 방법입니다. 이 작업을 충분히 수행하고 좋은 모델을 얻은 후, 종종 유용한 마지막 단계는 더 많은 오류 분석을 수행하고 시스템이 최종 감사(final audit)를 거쳐 작동하는지 확인하는 것입니다.

위의 슬라이드로 살펴보면 Model + Hyperparameters + Data를 적절히 수정하며 학습을 진행하고 이에 대한 오류 분석을 수행합니다. 이 과정을 반복하고 최종적으로는 fianl audit을 통해 시스템이 작동하는지 확인하는 것입니다.

 

Challenges in model development


AI 시스템 개발의 어려운 점들에 대해 알아보자

1. training set에 대해 성능이 좋아야 한다

2. dev/test set에 대해 성능이 좋아야 한다

3. business metrics/project goal을 달성해야 한다

하지만 실제 대부분의 경우 머신러닝 개발 팀에서 dev/test set에 대해 좋은 성능을 달성하더라도 business metrics과 project goal을 달성하지 못하는 경우가 많습니다.

 

프로젝트 진행에 있어서 low average tested error가 충분한 지표가 아니라면 어떻게 해야 할까?

다음 chapter에서 다뤄보도록 하겠습니다.

 

Why low average error isn't good enough


지금까지 우리는 Machine Learning System이란 무엇인지 알아봤습니다. 특히 머신러닝 모델 배포는 모델 개발 단계와 마찬가지로 반복적인 과정으로 이루어져 있다는 것을 배웠습니다. 하지만 문제가 발생했습니다. 머신러닝 개발팀에서 low dev/test error를 달성했더라도 실제 프로덕션 환경에서는 적용이 되지 않을 수 있다는 것입니다. 이러한 경우 어떻게 해야 할지 알아보도록 하겠습니다.

 

Performance on disportionately important examples

holdout test set에 대해서 좋은 성능을 도출하는 것이 머신러닝 엔지니어의 역할이라면 머신러닝 엔지니어의 역할은 훨씬 더 간단해질 수 있습니다. (행복하기도 하겠죠) 하지만 때로는 test set에 좋은 성능을 얻는 것 만으로는 충분하지 않을 수 있습니다. 

 

프로젝트의 목표를 성공적으로 달성하기 위한 방법들에 대해 알아보도록 하겠습니다

 

지난주에 concept drift와 data drift에 대해 이미 이야기했습니다. 이번 시간에는 프로덕션 머신러닝 프로젝트를 위해 해결해야 할 몇 가지 과제들을 살펴보도록 하겠습니다.

머신러닝 시스템이 test dataset에 대해 낮은 오류를 갖더라도 불균형적으로 중요한 일련의 예제에 대한 성능이 충분하지 않으면 기계 학습 시스템은 여전히 프로덕션 배포에 적합하지 않습니다.

(if its performance on a set of disproportionately important examples isn't good enough, then the machine learning system will still not be acceptable for production deployment)

아래의 예제를 통해 그 이유를 살펴보도록 하겠습니다.

  • Informational and Transactional queries: 웹 검색 엔진은 가장 관련성이 높은 결과를 반환하고 싶지만 사용자는 기꺼이 최상의 결과에 대해서 순위를 매길 수 있습니다. e.g. 1순위, 2순위, 3순위...
  • Navigational queries: 의도가 명확한 쿼리입니다. Navigational query에서는 의도에서 벗어난 결과에 대해 보다 덜 관용적입니다.

 

우선 Informational and Transactional query입니다. 예를 들어 '애플 파이 레시피'를 검색하고 싶은 유저가 있다고 생각해봅니다. 하지만 세상에는 너무나도 많은 레시피가 존재하고 최고의 레시피가 많기에 기꺼이 검색 결과를 받아들일 수 있습니다.

반면 Navigational query의 의도는 명확합니다. Standford.edu, Reddit.com, Youtube.com과 같이 사용자는 분명한 의도를 갖고 검색을 하는 것입니다.

이러한 맥락에서 Navigational query는 불균형적으로 중요한 예제 집합(disproportionately important set of examples)이며 웹 검색에 대한 평균 테스트 집합 정확도를 향상하는 학습 알고리즘이 있지만 몇 가지 탐색 쿼리만 엉망으로 만드는 경우 배포에 적합하지 않을 수 있습니다. 당연히 문제는 평균 테스트 세트 정확도가 모든 예제에 똑같이 가중치를 부여하는 반면 웹 검색에서는 일부 쿼리가 불균형적으로 중요하다는 것입니다. 이제 여러분이 할 수 있는 한 가지는 이 예제에 더 높은 가중치를 부여하는 것입니다. 일부 응용 프로그램에서는 작동할 수 있지만  교수님께서는 경험상 다른 예제의 가중치를 변경하는 것만으로 항상 전체 문제가 해결되는 것은 아니라고 하셨습니다.

 

이와 밀접한 관련이 있는 것은 데이터 세트의 key slice에 대한 성능 문제입니다.

예를 들어 대출을 상환할 가능성이 있는 사람을 결정하고 승인을 위해 특정 대출을 승인하도록 권장하기 위해 대출 승인을 위한 기계 학습 알고리즘을 구축했다고 가정해 보겠습니다.

 

Performance on key slices of the dataset


 

Rare classes


다음으로 Rareclasses에 대해 살펴보도록 하겠습니다.

흉부 X-ray로 진단을 통해 다양한 상태를 파악하기 위한 연구가 있다고 생각해봅시다.

Effusion은 10,000개의 샘플에 대해 0.901의 정확도를 얻었고 Hernia는 100개 미만의 샘플에 대해 0.851의 성능을 얻었다고 가정합니다.

 

Hernia와 같은 Rare classes의 결과를 어떻게 해석할 수 있을까요?

 

만약 Hernia에 대해 모든 경우 "음성"으로 판별할 경우 결과는 어떻게 될까요?

 

이처럼 머신러닝 모델(또는 알고리즘)은 Hernia의 모든 사례를 완전히 무시할 수 있고 이 경우 평균 테스트 정확도는 약간의 영향력만을 받을 수도 있습니다. 즉 Hernia가 얼마 발생하지 않기 때문에 대부분의 값을 "음성"으로 파별한다면 평균 테스트 정확도를 크게 손상시키지 않는 결과를 발생시킬 수 있는 것입니다. 이것이 바로 Rare Class가 갖는 문제점입니다.

 

한편 많은 회사에서 머신러닝 엔지니어(MLE)와 프로덕트 오너(Product Owner)의 불행한 대화가 지속된다고 합니다.

"test set에 대해 좋은 성능을 도출했어요"

"그러나 우리 애플리케이션에서는 잘 작동하지 않는걸요?"

"그렇지만......  testset에서 잘 작동했다고요!"

앞으로 해결해야 할 문제가 많은 것 같습니다..ㅎㅎ

 

Establish a baseline


HLP(Human lever performance)

기계학습의 결과와 HLP를 비교하여 개선점을 찾을 수 있습니다. 어떤 Type의 데이터에 집중할 수 있는지 결정할 수 있는 것입니다

따라서 HLP를 baseline으로 여기는 것이 도움이 됩니다

 

Unstructed data, Structured data에 따라 HLP를 베이스라인(baseline)으로 할지 여부를 정하는 것이 필요합니다. 일반적으로 Unstructured data의 경우 HLP를 baseline으로 하는 것이 도움이 됩니다.

 

다음으로 baseline을 정하는 방법들에 대해 살펴보도록 하겠습니다.

HLP를 포함한 다양한 baseline 설정 방법들이 있습니다. 문헌 검색(Literature search)을 통한 최신/오픈소스 자료를 baseline으로 정할 수 있으며 빠른 구현, 이전 시스템 등을 baseline으로 정할 수 있습니다.

이러한 baseline 설정을 통해 무엇이 가능한지 알 수 있게 되는 것입니다. baseline이 정해진다면 현실적인 프로젝트의 목표치를 정하는 데 많은 도움이 된다고 합니다.

 

Tips for getting started


앞선 시간에서 우리는 머신러닝은 반복적인 과정이라고 이해했습니다.

 

Getting started on modeling


 

모델링에 접근하는 합리적인 방법에 대해 알아보도록 하겠습니다

 

이번 시간에는 모델링을 시작하는 방법에 대해 학습했습니다. 흥미로운 점은 모델링을 조금 합리적으로(?) 생각해보게 되었다는 것입니다.

우선 SOTA(state-of-the-art)가 아닌 courses, blogs, open-sources 등 적용 가능한 방법들을 찾아봅니다. 그리고 적용 가능한 open-source 구현들을 찾습니다. 

좋은 알고리즘은 데이터가 받쳐줘야 합니다. 좋은 데이터가 없는 좋은 알고리즘은 종종 좋은 데이터가 있는 합리적인 알고리즘(reasonable algorithm)보다 성능이 뒤쳐집니다. 흥미롭습니다.

왜냐하면 모델링을 통해서 우리는 모델을 반복적으로 학습시킬 수 있으며 반복적인 학습이야말로 최적의 결과를 도출하는 열쇠가 되기 때문입니다.

적용할 수 있는 모델을 선택하고 학습시키는 것이 중요한 것입니다

 

Deployment constraints when picking a model

그렇다면 모델 선택 시 모델을 배포 제약사항은 어떻게 될까요?

모델 선택시 모델 배포 제약사항은 어떻게 될까요? 모델을 선택할 때 배포 제약사항을 반드시 고려해야할까요?

"네"와 "아니요" 둘 다 정답이 될 수 있습니다

베이스라인을 설정했다면 모델 배포 제약사항을 고려해야 합니다. 반면 베이스라인을 정하지 않았다면 베이스라인을 정하기 위해 무엇이 가능한지 또는 좋은지 결정하는 단계이므로 배포 제약 사항을 고려할 필요가 없다고 합니다.

 

Sanity-check for code and algorithm


Sanity-check의 장점은 단 몇 분 또는 심지어 몇 초 만에 하나 또는 소수의 예제에 대한 알고리즘을 훈련시킬 수 있으며 이를 통해 버그를 훨씬 더 빠르게 찾을 수 있습니다.

 

지금까지 Selecting and Training Model에 대해 살펴보았습니다.

Modeling에 대한 개요부터 Key challenge, 낮은 평균 오차값이 충분하지 않은 이유(low average error isn't good enough), 베이스라인 설정 방법, 모델링을 시작하는 방법에 대해 알아보았습니다.

다음으로 Error analysis와 performance auditing에 대해 알아보도록 하겠습니다.


 

Error analysis and performance auditing

Error analysis examples


Iterative process of error analysis


 

Useful metrics for each tag


 

Prioritizing what to work on


다음과 같은 상황에서 어떤 class에 대한 Accuracy를 증가시키는 것이 좋을까?

Car Noise의 경우 기계학습 모델의 정확도(89%)보다 Human level performance(93%)가 4% 높기 때문에 성능을 4% 개선시킬 여지가 있다고 생각할 수 있다. 하지만 우리는 데이터의 비율을 고려해야 한다

 

위와 같은 데이터의 분포를 가지고 있다면 Clean Speech 또는 People Noise의 성능을 개선하는 것이 가장 효율적이라는 것을 확인할 수 있다.

 

Prioritizing what to work on


 

Adding/improving data for specific categories


 

Skewed datasets


 

이번 시간에는 Confusion Martix에서 Precision, Recall, F1-score에 대해 학습했습니다.

Confusion Matrix는 워낙 유명한 머신러닝 지표라서 자세한 설명은 수식으로 대체하겠습니다.

Skewed Dataset과 같이 왜곡도가 심한 데이터로 학습한 모델을 평가하기 위해서는 F1-score를 사용하는 것이 모델 평가에 좋습니다. F1-score는 Precision과 Recall값의 조화 평균으로 구하실 수 있습니다.

 

Performance auditing


 

Auditing framework


 

e.g. Speech recognition example


 

지금까지 'Error analysis and performance auditing'에 대해 살펴보았습니다.

Error analysis 예제부터 작업의 우선순위에 대해 알아봤습니다. 또한 Skewed datasets을 처리하는 방법과 Performance Auditing에 대해 알아보았습니다. 이제 마지막 2주 차 Chapter인 Data Iteration에 대해 알아보도록 하겠습니다. 


 

Data iteration

Data-centric AI development


 

어떻게 하면 데이터의 품질을 더 좋게 만들 수 있을까?

 

Data-centric AI development란 AI development를 Data의 관점에서 바라보는 것입니다.

기존 Model-centric view에서는 데이터를 고정하고 모델의 코드 수정을 통해 성능을 향상했습니다. 반면 Data-centric view에서는 모델을 고정한 채로 데이터를 반복적으로 향상해 AI system의 성능을 향상합니다.

앞으로 어떻게 데이터의 품질을 더 좋게 개선할 수 있는지 하나씩 살펴보도록 하겠습니다.

 

A useful picture of data augmentation


e.g. Speech recognition example


 

모델의 성능파란색, 사람의 성능(HLP)을 초록색으로 표현해보겠습니다.

위의 예제에서 Cafe noise를 살펴보겠습니다.

HLP를 baseline으로 할 때, cafe noise에 대한 성능 개선의 여지가 있습니다. cafe noise 데이터를 더 수집하여 모델의 성능을 이뤄낼 수 있는 것입니다. 

이렇게 성능을 향상할 경우, cafe nose와 유사한 Library noise와 Food court noise도 개선될 여지가 있습니다. 또한 조금은 멀리 떨어진 Plane, Car, Train, Machine Noise들에 대한 성능도 조금씩 개선될 수 있습니다.

이때, error analysis를 통해 오류 분석을 수행할 경우, 우리는 앞으로 어떻게 AI 시스템의 성능을 향상해나갈 수 있을지 방향을 잡을 수 있게 되는 것입니다. 조금은 효율적으로 말이죠.

 

Data augmentation


Data Augmentation can be a very efficient way to get more data, especially for unstructured data problems such as images, audio, maybe text. But when carrying out data augmentation, there's a lot of choices you have to make. What are the parameters? How do you design the data augmentation setup?

 

Data Augmentation을 할 때, 몇 가지 결정을 내려야 합니다.

 

어떤 종류의 소음(Noise)일까? 

얼마나 시끄러운가?

 

Data augmentation

위와 같이 스크래치가 있는 스마트폰 사진이 있다고 가정합니다.

사진을 수평회전 시켜 새로운 데이터를 얻을 수 있으며 배경색을 조금 변경할 수 있습니다. 또는 오른쪽에 보이는 사진과 같이 스마트폰 사진에 스크래치를 포토샵으로 그려서 합성시킬 수도 있습니다.

한편 교수님께서는 사진 합성을 위해 GAN 모델 등을 사용했었다고 하셨습니다. 하지만 GAN과 같은 복잡한 모델도 좋지만 합성이라는 비교적 간단한 방법으로도 Data Augmentation을 통한 AI system 성능 향상을 경험할 수 있다고 말씀해주셨습니다.

 

Data iteration loop

Data iteration loop 접근법은 빠른 성능 향상을 도와줍니다.

 

Can adding data hurt?


많은 기계 학습 문제의 경우 train set와 dev 및 test set 분포가 유사합니다. 그러나 데이터 증대(Data Augmentation)를 사용하는 경우는 카페 소음이 있는 많은 데이터를 추가하는 것과 같이 훈련 세트의 특정 부분에 추가하는 것입니다. 이렇게 될 경우 train set가 dev set 및 test set과는 매우 다른 분포를 가질 수 있습니다. 이 경우, 학습 알고리즘의 성능에 영향을 미칠까요?

일반적으로 비정형 데이터 문제에 대해 작업할 때 몇 가지 주의 사항이 있는 경우 대답은 "아니요(No)"입니다. 그러나 이것이 실제로 무엇을 의미하는지 더 자세히 살펴보겠습니다. 

 

e.g. Photo OCR counter example

위 슬라이드에서 왼쪽 사진은 1, 가운데 사진은 알파벳 I이다.

이때 맨 오른쪽 사진을 더해서 Data Augmentation을 하고자 한다면 1로 봐야 할까 알파벳 I로 봐야 할까?

rare case이긴 하지만 이런 문제점이 있다고 한다...

 

Adding features


 

Experiment tracking


  • What to track?: 어떤 정보를 추적할 것인가?
  • Tracking tools: 어떤 도구를 사용할 것인가?
  • Desirable features: 적합한 특징값들은 무엇일까?

 

From big data to good data


 

 

So... that's it!
Congretuation!

 

Wrap up (Lessons to learn)


이상으로 2주차 강의 정리 노트를 마무리하도록 하겠습니다.

지난 한 주가 정말 짧게 느껴질 만큼 바쁘게 지나갔던 것 같습니다. 그리고 또 한 번 교훈을 얻었습니다.

"오늘 할 일을 오늘 반드시 끝내자"

주말에 몰아서 학습하고 정리하려니깐... 쉽지 않군요...ㅎㅎ

 

감사합니다. Steve-Lee였습니다.

다가오는 월요일도 화이팅...!

댓글