[코세라 딥러닝 정리] C3W1 - ML Strategy (1)

딥러닝 특화 과정을 수강하고 러닝을 정리합니다.

Objective

  • Apply satisfying and optimizing metrics to set up your goal for ML projects
  • Choose a correct train/dev/test split of your dataset
  • Understand how to define human-level performance
  • Use human-level perform to define your key priorities in ML projects
  • Take the correct ML Strategic decision based on observations of performances and dataset
  • Understand what multi-task learning and transfer learning are
  • Recognize bias, variance and data-mismatch by looking at the performances of your algorithm on train/dev/test sets

1 - Introduction to ML Strategy

Why ML Strategy

딥러닝 모델 성능을 향상시키기 위해 다양한 전략이 있다.

  • 데이터 수집
    • 더 많은 학습 데이터 수집
    • 다양한 학습 데이터 수집
  • 최적화 알고리즘
    • 경사하강법
    • Adam
  • 신경망 크기 bigger/smaller network
  • 정규화
    • Dropout
    • L2
  • 네트워크 구조
    • 활성화 함수
    • 은닉층 수

...
다양한 아이디어들이 존재하지만, 좋은 아이디어를 빠르고 효율적으로 선택할 수 있으면 좋지 않을까? 머신러닝 문제 분석 전략 ways of analyzing a machine learning problem that will point you in the direction of the most promising things to try 과 머신러닝 제품을 만들면서 얻은 러닝을 살펴본다.

Orthogonalization

  • 머신러닝 전략에서 직교화 : 원하는 효과를 위해 변수를 조정하는 과정
  • (직교는 서로 90도를 이룬다는 뜻이다. 이 개념을 시스템에 적용해서 이해해보자. 하나의 버튼이 회전각에 영향을 주고 다른 하나의 버튼이 속도에 영향을 준다. 이 경우(직교)에는 쉽게 버튼을 조작해서 원하는 속도나 회전각대로 시스템이 작동하도록 만들 수 있다. 만약 두 가지가 동시에 조절될 경우(직교가 아닌 경우)에는 원하는 대로 조작하기 어려울 수도 있다.)

Chain of assumptions in ML

지도학습이 잘 이루어지기 위해서는 다음 4가지 가정을 만족해야한다. 4가지 가정에 기반해서 문제가 생긴 원인을 파악하고 해당 부분을 조정(관련된 하나의 버튼을 조작)하는 것이다.

  1. Fit training set well on cost function
    최소한 학습 데이터에서는 잘 작동해야한다. (어플리케이션에 따라서 human-level performance만큼 나와야할 수도 있다.)
    • 신경망 네트워크 조정, 학습 알고리즘 변경
  2. Fit dev set well on cost function
    개발 세트에 대해서 좋은 성능을 보여야한다.
    • 정규화, 더 큰 training set
  3. Fit test set well on cost function
    테스트 세트에 대해서 좋은 성능을 보여야한다.
    • 더 큰 dev set
  4. Performs well in real world
    실제 세상에서도 좋은 성과로 이어져야한다.
    • dev set 변경(개발 세트의 분포 설정 문제), 비용함수 변경

2 - Setting up your goal

Single number evaluation metric

분류기의 성능을 평가하는 합리적인 방법 중 하나는 정밀도, 재현율 보는 것이다.

  • 정밀도 : 모델이 분류한 정답중에 진짜 정답이 얼만큼 있는지 측정
    • 분류기가 고양이로 인식한 예시($\hat{y}$ = 1) 중 실제 고양이(${y}$ = 1)인 비율
  • 재현율 : 실제 정답중에 모델이 정답을 얼만큼 분류했는지를 측정
    • 실제 고양이 (${y}$ = 1) 중에서 분류기가 고양이로 인식한 ($\hat{y}$ = 1) 비율

정밀도와 재현율사이에는 트레이드 오프 관계가 있다.

Classifier 정밀도(Precision) 재현률(Recall) F-1 score
A 95% 90% 92.4%
B 98% 85% 91.0%

단일 숫자 평가 지표가 아닌 두 개의 숫자 평가 기준 정밀도와 재현률로는 A와 B 둘 중 어느 분류기가 좋은 모델인지 선택하기 어렵다. 어느 모델이 좋은 성능인지 빠르게 고르기 어려우므로, 둘을 결합한 새로운 단일 평가 기준을 정의하고 그 기준을로 어느 분류기가 더 잘 작동하는 지 결정할 수 있다.

  • 정밀도와 재현율의 조화 평균 F-1 Score
    $F-1\ Score=$ $2 \over {1/Precision+1/Recall}$

dev set개발세트와 Single (real) number evaluation metric 하나의 정량적 평가기준을 사용하면 빠르고, 효율적으로 모델 선택, 알고리즘 개선을 할 수 있다.

Satisficing and optimistic metric

위에서 살펴본 것처럼 하나의 정량적 평가기준을 설정하는 것은 어려움이 있다.

  • 모델 평가 기준에 정확도와 실행시간을 결합한다고 가정해보자.

    분류기 정확도(Accuracy) 실행 시간(Running Time)
    A 90% 80ms
    B 92% 95ms
    C 95% 1500ms

    두가지 기준을 결합해서 비용을 Cost = Accuracy - 0.5*RunningTime 정의하는 것은 부자연스럽다.

  • 대신, 정확도 Accuracy가 최대인 분류기를 선택하되, 이미지를 분류하는 데 소요되는 실행 시간 Running Time이 100ms보다 작은 것 중에 고른다.

    • Optimizing Metric 최적화 지표 : 정확성 Accuracy
    • Satisficing Metric 조건 지표 : 실행 시간 Running Time
      • Threshold 허용 가능 임계값 : 100ms
        (이 기준 이하면 어떤 값이든 허용)
  • Trigger Word Detection System 의 예를 살펴보자.

    두 개의 평가 척도 평가 척도 결합
    Trigger word를 말한 경우에 장치가 반응하는 빈도 (True Positive rate) Optimizing Metric
    Trigger word를 말하지 않은 경우에 반응하는 빈도 (False positive rate) Satisficing Metric

    시스템 성능에 대한 두 개의 평가 척도를 결합하는 합리적인 방법은

    • Satisficing Metric : 24시간 이내에 1번(Threshold) 이상 거짓 양성이 발생하지 않는다는 조건 하에
      • Optimizing Metric : True Positive 최대화하는 것이다.

N 개의 Metric 기준이 있을 때, 1개의 Optimizing Metric 최적화 지표를 설정하고, N-1개의 Satisficing Metric 조건 지표로 설정해 모델을 평가할 수 있다.

Train/dev/test distributions

학습 개발 테스트 세트를 설정하는 방법에 대해서 살펴보자.

Dev set 개발 세트

  • development set, hold cross validation set 교차 검증 세트라고도 불린다.
  • 다양한 아이디어를 개발 세트를 통해 검증, 평가하고 선택한다. 이 과정을 개발 세트 성능이 만족스러울 때까지 반복한 뒤, Test set 를 이용해 평가한다.
  • 향후 현실에서 얻을 수 있고, 좋은 성과를 내는 중요한 데이터에 대해 개발, 시험 세트를 설정한다.

분류기를 개발해 다양한 지역에서 작동시킨다고 가정해보자.

Regions Set
US, UK, Other Europe, South America dev
India, China, Other Asia, Austrailia Test

위의 분류는 개발 세트와 시험 세트가 다른 분포에서 만들어지므로 나쁜 예에 해당한다.

향후 현실에서 얻을 수 있고, 좋은 성과를 낼 것이라고 예상하는 데이터를 무작위로 섞은 뒤 (동일한 분포에서) 개발 세트와 시험 세트를 설정한다.

Size of the dev and test sets

Rule of Thumb
데이터가 부족했을 때(100-10000)는 훈련:시험 = 7:3 or 훈련:개발:시험 = 6:2:2 로 나누는 경향이 있었다.

Size of the dev and test sets를 결정함에 있어 다음 가이드라인을 따른다.

Set your test set to be big enough to give high confidence in the overall performance of your system. 전체 시스템 성능을 대변할 수 있도록 시험세트를 충분히 크게 설정해야한다

최근 머신러닝에서는 훨씬 큰 데이터 세트를 다루기 때문에 훈련:개발:시험=98:1:1 로 나누는 것이 합리적이다. 예를 들어, 1000000 개의 샘플이 있는 경우, 1% 만 해도 10,000 개의 예시로 충분하기 때문이다.

또한 test set의 목적은 최종 모델을 평가하는 것이고, 실제 머신러닝 프로젝트에서는 train/dev set만으로 모델 학습/검증 하기도 한다. (사람들이 dev set을 test로 칭함)

When to change dev/test sets and metrics?

앞서 살펴본바, dev set개발세트와 Single (real) number evaluation metric 하나의 정량적 평가기준 을 정하는 것이 중요하지만, 프로젝트 진행 중 잘못 설정된 것을 알게된 경우에는 어떻게 해야할까?

  1. 고양이 분류기 예를 통해 살펴보자. 평가 Metric 기준에 의하면 A가 나아보이지만, 모종의 이유로 알고리즘 A가 야한 사진을 분류했다고 가정해보자.
    • 평가 Metric : Classification Error
      • Algorithm A : 3 % Error
      • Algorithm B : 5 % Error
  • 평가 척도가 올바른 방향을 제시하지 않는다

    • 알고리즘 A를 사용하면 유저들은 더 많은 고양이 사진을 볼 수 있을 것이지만, 유저들에게 야한 사진도 보여주게 된다. 이런 경우 useless한 알고리즘이 된다.
    • 반면, 알고리즘 B를 사용하면 더 많은 사진을 잘못 분류하게 되지만, 야한 사진을 분류하지는 않는다. 유저에게도 회사에게도 B가 더 나은 선택이 된다.
  • Dev + Metric ⇒ A vs Users ⇒ B

  • 평가 척도 수정
    원하지 않는 결과에 가중치를 크게 부여해 손실값을 나쁘게 만든다.

    구분 Metric 평가 척도 수정
    기존 $\displaystyle\frac{1}{m_{dev}}\sum_{i=1}^{m_{dev}} I{y_{pred}^{(i)} \neq y^{(i)} }$
    야한 사진, 야하지 않은 사진도 동등하게 본다는 문제점이 있다. 야한 사진의 경우 label이 제대로 붙여지도록 가중항 $w^{(i)}$ = {0 or 야한 사진:1} 을 추가해, 야한 사진을 분류했을 때 오차가 훨씬 커지게 만든다. 오차가 0과 1사이 값을 가지도록 정규화항을 $\displaystyle\frac{1}{\sum w^{(i)}}$ 로 수정한다. 실제 이 가중치 항을 구현하기 위해서는 dev/test set안의 야한사진(1)을 확인해야한다.
    수정 후 $\displaystyle\frac{1}{\sum w^{(i)}}\sum_{i=1}^{m_{dev}} w^{(i)} I{y_{pred}^{(i)} \neq y^{(i)} }$

    $I$ 는 indicator로 {}안의 식이 참이 되는 예시의 계수를 센다.

1\. 고양이 분류기 예를 통해 살펴보자. 평가 Metric 기준에 의하면 A가 나아보이지만, 모종의 이유로 알고리즘 B가 상품에 적용시켰을 때 더 좋은 성능을 보일 수 있다.
  • 평가 Metric : Classification Error
    • Algorithm A : 3 % Error
    • Algorithm B : 5 % Error
  • 평가 척도와 dev/test set가 올바른 방향을 제시하지 않는다
    Dev + Metric ⇒ A vs Users ⇒ B
    • 고화질의 이미지를 사용해 모델을 학습시키지만 어플리케이션에서는 불투명한 저화질의 이미지를 사용한 경우에 B가 더 좋은 성능을 낸 것일 수도 있다.
  • 알고리즘이 좋은 성능을 내야하는 데이터를 포함하도록 dev/test set을 변경한다.

If doing well on your metric + dev/test set does not correspond to doing well on your application, change your metric and/or dev/test set.

dev set개발세트와 Single (real) number evaluation metric 하나의 정량적 평가기준을 정의하고, Metric을 기준으로 좋은 성능의 모델을 구현한다.

그러나, *실제 어플리케이션에서 좋은 결과를 얻지 못하는 경우 신속하게 변경해야한다. *

  1. Metric이 모델에 있어 가장 중요한 것을 측정하지 못하는 경우, Metric 변경
  2. 실제 대상 데이터 분포가 dev/test set 분포와 다른 경우, dev/test set을 실제에서 사용되는 데이터로 변경

3 - Comparing to human level performance

Why human-level performance?

최근 몇 년 동안 머신러닝 연구자들이 머신러닝의 성능을 Human-level Performance와 비교해왔다. 이는 더 좋은 성능의 알고리즘이 개발되어 다양한 분야에 적용될 수 있고, 특히 사람이 할 수 있는 것에 대해서 머신러닝 시스템을 구축하는 것이 더 효율적이기 때문이다. 따라서 사람 수준의 성능과 비교하고 그에 도전하는 것이 자연스러워졌다.

  • Base Optimal 베이지안 최적 오차
    • 모델의 이론상 가능한 최저의 오차 값
    • x 에서 y로의 이론적으로 최적의 함수
    • 과대적합이 되지 않는 이상 이 값을 뛰어 넘을 수 없다.
  • 머신러닝 모델들이 사람 성능 Human level Performance 성능을 넘기 전까지는 아주 빠른 속도로 정확도가 상승해 빠르게 뛰어 넘지만, 사람 성능을 넘어서 베이지안 최적 오차까지 줄이는 데는 많은 시간이 소요된다.
    • 대부분의 경우 Human level performance 사람 수준의 오차와 베이지안 최적오차간 차이가 크지 않다.
    • 사람 수준의 성능이 나오지 않을 때 사용하는 특정 성능 향상 기법을 쓸 수 없기 때문이다.

When your model is worse than humans, you can

  1. Get labeled data from human
    사람이 라벨링한 데이터를 더 수집
  2. Gain insight from manual error analysis
    수동 오차 분석 - 알고리즘이 틀린 예시를 사람들이 보는 것
  3. Better analysis of Bias/Variance

Avoidable bias

고양이 분류기 예시를 통해 살펴보자.

구분 (1) (2)
Human Error 1% 7.5%
Training Error 8% 8%
Dev Error 10% 10%
  • (1) 사람은 거의 정확하게 판별한다고 가정
    • train set performance 8% 와 human-level performance 1%의 큰 차이는 알고리즘이 train set에 충분히 들어맞지 않았음을 의미한다.
    • 분산과 편향 문제에서 편향을 줄이는 데 집중할 것이다. Focus on Reducing Bias 더 큰 신경망을 학습시키거나, 경사하강법을 더 오래 실행해서 train set에서 더 좋은 성능을 만들고자할 것.
  • (2) 사진이 흐려 사람조차도 정확히 구분할 수 없다 가정
    • train set performance 8% 는 human-level performance 7.5%에 약간 못 미치니까 train set에서 좋은 성능을 보인다.
      • 분산과 편향 문제에서 분산을 줄이는 데 집중할 것이다. Focus on Reducing Variance 정규화를 통해 train error 와 dev error 차이를 줄이고자 할 것.

Human-level error as a proxy for Bayes Optimal error
사람 수준의 오차와 베이지안 최적오차는 차이가 많이 나지 않는 것으로 가정하고, 사람 수준의 오차를 베이지안 최적오차로 추정한다.

Avoidable bias 회피가능편향

  • 베이지안 최적오차(Human level error)와 훈련오차의 차이
  • 더 이상 낮아 질 수 없는 편향 또는 최소 오차가 있다는 뜻이다.
  • 회피가능편향 값이 클 수록 아직 모델이 충분히 훈련이 안된 것이다. 더 큰 신경망이나 경사하강법을 더 오래 실행해서 회피 가능 편향을 줄이도록 한다.
    • 훈련오차와 개발오차의 차이
    • 개발 세트로 모델을 얼만큼 일반화 할 수 있는 지를 의미하고, 차이가 적을 수록 새로운 데이터를 잘 예측한다.
  • Variance

Understanding human-level performance

앞서 현재, 미래에 어떤 함수가 달성할 수 있는 최적의 오차값을 의미하는 베이지안 오차의 추정치로 사람 수준의 오차를 사용했다. Human level performance 라는 용어는 논문에서 큰 뜻 없이 사용되기도 하는데, 사람 수준의 성능의 정의를 이용해 머신러닝 프로젝트를 발전시켜보자.

Medical image classification 예시를 살펴보자.

구분 Error
Typical Human 3%
Typical doctor 1%
Experience doctor 0.7%
Team of experience doctors 0.5%

Human-level error 사람 수준의 오차는 어떻게 정의할까?

  • Bayes Optimal Error ≤ 0.5%
    얼마나 더 나은 결과가 가능할지는 알 수 없지만, 숙련도 높은 전문의 다수의 오차를 베이지안 최적의 오차로 추정할 수 있다. Bayes Optimal Error의 최댓값이 0.5%, 최적의 오차 Bayes Optimal Error가 0.5%보다 크지 않을 것이라는 것은 알 수 있다.

0.5%를 베이지안 최적오차로 추정하게 된다면, 일반적인 진료 시스템에 사용하기 위해, 일반 의사의 오차 1%를 사람 수준의 오차(Estimate of Bayes Optimal Error, 베이지안 오차의 추정치)로 볼 수 있다. 또한 사람 수준의 오차가 훈련 오차보다 더 높지 않도록 설정하는 것을 주의해야한다.

이처럼 사람 수준의 오차의 추정치를 토대로 베이지안 최적오차를 추정할 수 있고, 사람 수준의 오차를 정의함으로써 머신러닝이 학습하게될 목적을 명확히 할 수 있게 된다.

구분 (1) (2) (3)
Human (proxy for Bayes Error) 1% / 0.7% / 0.5% 1% / 0.7% / 0.5% 0.5%
Training Error 5% 1% 0.7%
Dev Error 6% 5% 0.8%

(1) Focus on Avoidable bias
(2) Focus on Variance
(3) Avoidable bias = 0.2%, Variance= 0.1% : 사람수준의 오차에 가까워질수록 편향과 분산 중 무엇에 중점을 둘 지 결정하기 어렵다.

베이지안 오차를 갖고 있는 문제(베이지안 오차가 0이 아닌 경우), Avoidable Bias(Diff on Human vs Train) 회피가능 편향 이나, Variance (Diff on Train vs Dev) 분산의 추정치를 통해 알고리즘의 편향을 줄일지, 분산을 줄일지 결정할 수 있다.

Surpassing human-level performance

머신러닝이 사람 수준의 성능을 뛰어넘는 문제들

  • Online Advertising
  • Product Recommendations
  • Logistics (predicting transit time)
  • Loan approvals 대출 승인

이러한 문제들의 특징

  1. Structured data 구조화된 데이터이다. Not natural percetption task 컴퓨터비전, 음성인식, 자연어 처리 문제가 아니다. (딥러닝의 발전으로 일부 Natural Perception task에서도 컴퓨터가 사람의 성능을 뛰어넘은 사례가 있기도 하다.)
  2. Huge amount of data 방대한 양의 데이터를 사용한다.

즉, 컴퓨터가 사람보다 더 많은 구조화된 정보를 가지고 통계적 패턴을 쉽게 찾는다는 것이다.

Improving your model performance

앞서 학습한 내용을 바탕으로 가이드라인을 정리해보면 다음과 같다.

2 fundamental assumptions of supervised learning

지도학습 알고리즘이 잘 작동할 수 있도록

  1. Fit the training set pretty well ⇒ Low Avoidable Bias
    • Train bigger model
      더 큰 모델로 훈련
    • Train longer/better optimization algorithms
      더 오랫동안 모멘텀, RMSprop, Adam과 같은 더 나은 최적화 알고리즘을 사용
    • NN architecture/hyperparameters search
      더 나은 신경망 구조나 하이퍼파라미터 값을 찾는다. 활성함수를 변경, 은닉층 수 변경, RNN/CNN
  2. Traing set performance generalize pretty well to the dev/test set ⇒ Low Variance
    • More data
      더 많은 데이터 사용
    • Regularization
      L2정규화, 드롭아웃, Data Augumentation,
    • NN architecture/hyperparameters search