ML || DL/이론

[Coursera] DLS_C3W2: Error Analysis / Mismatched Training and Dev/Test Set

junmukbap98 2023. 9. 24. 23:24

1. Error Analysis

: 우리 모델의 성능 향상을 위해 error를 분석해야 한다. 이를 위해서 약 100개 정도의 mislabeled dev set examples를 살펴보는 것을 추천한다. 이렇게 했을 때의 장점은 아래와 같다:

  • 어떤 것을 먼저 수정해야할 지, 우선순위를 정하는데 도움을 준다.
  • 다양한 접근 방식의 효용성을 측정 가능하다 (틀린 걸 개선 했을 때의 상한선)

Cat detection의 예시를 살펴보자. 우리는 Error analysis를 통해, 접근해 볼 만한 아이디어 몇 개를 생각해 볼 수 있다.

  • Dog를 cat이라고 잘못 인식한 경우를 고친다.
  • Great cats (사자, 표범, 치타 등)을 cat이라고 잘못 인식한 경우를 고친다.
  • Blurry 이미지에 대한 성능을 개선한다.

이런 경우에는 아래와 같이 표를 만들어서, 각각의 경우에 대해 어느 정도 error가 발생했는지 분석해볼 수 있다.

Images Dog으로 잘못 분류 Great cats Blurry Instagram filter (분석하다가 새로운 카테고리를 추가해도 된다.) comment
1     pitbull
2      
...          
% of total 8% 43% 61% 12%  

이러한 분석을 통해, 우리는 Great cats와 Blurry 문제를 먼저 해결하는 것이 가장 효과적일 것이라 짐작할 수 있다. 물론 이런 분석이 무조건적인 답을 주는 것은 아니지만, 전반적으로 가장 선택하기 좋은 option에 대한 감각을 제시해 줄 수 있다.

 

이렇게 error analysis를 진행하는 경우, 우리는 Incorrectly labeled data를 발견할 수 있다. 그런 경우는 어떻게 해야할까?

- Incorrectly labeled data 예시: dog (0)인데 cat (1)으로 잘못 labeling 된 경우

  • Training set에서 발견된 경우
    : 보통 DL 알고리즘은 training set 내의 (합리적인) random error에 꽤나 강인하다고 알려져 있다. 따라서 실제 incorrectly label의 비율이 너무 크지 않으면 그냥 나둬도 괜찮다.
  • Dev/test set에서 발견된 경우
    : Error Analysis 열에 'Incorrectly labeled' 열을 추가해서, 어느 정도 영향을 미치는지 확인해 본다. 
    분석해 봤을 때 incorrectly labeled의 비율이 크다면, 이를 manually 수정하는 것이 좋다. 하지만 그게 아니라면 그냥 내버려두거나 시급하게 고칠 필요는 없다. (물론 고쳐서 나쁠 건 없다)

- 만약 dev set에서 수정을 했다면, same process를 test set에도 적용해줘야 한다. --> same distribution을 유지해야 하기 때문에

- Algorithms이 틀린 examples 도 봐야 하지만 맞은 examples도 살펴봐야 한다. 하지만, 맞은 examples의 수가 대부분 많기 때문에 이는 현실적으로 어려움이 좀 있을 듯하다. 

- Dev/test data에서 incorrectly labeled data를 수정하고, (위에서 말한 대로) train은 그냥 나뒀다면 둘의 distribution이 약간 다르게 될 것이다. --> 이에 대한 대응은 바로 다음에 다루게 된다. 

 


2. Mismatched Training and Dev/Test Set

(1) Training and testing on different distributions

- 문제 상황: 우리가 Cat인지 아닌지 분류하는 Cat app을 만들고 있다고 가정해 보자. 이때, web pages에서 수집한 고양이 데이터셋 200,000장과 실제 우리가 신경 써야 할 (mobile app으로부터 얻은) 고양이 데이터셋 10,000장이 있다고 했을 때, 우리가 실제로 target 하는 것은 mobile app으로부터 얻은 데이터일 것이다.

  • Data from webpages: 200,000장 / 고화질, not blurry..
  • Data from mobile app: 10,000장 / 저화질, blurry.. 

하지만, trainset으로 활용하기엔 너무 적은 양이다. 따라서 우리는 web pages에서 얻은 데이터로 trainset을 구성해야 한다. 이렇게 되면, trainset과 dev/test set이 서로 다른 distribution을 갖게 된다. 이를 해결하기 위해서 생각해 볼 수 있는 option은 두 가지이다. 

  • Option 1: 두 data를 섞어 (210,000장) 모두 random 하게 섞은 뒤에 (random shuffle) train/dev/test set으로 나눈다
    • 장점: training/dev/test 모두 same distribution을 갖는다. 
    • 단점: dev/test set의 대부분이 web page의 distribution을 갖는다. (e.g., web:2381장, app: 119장) --> 대부분의 시간을 web pages distribution을 optimization 하는 데 사용한다. 하지만 이는 우리가 target 하는 distribution이 아니다. 
  • Option 2: Trainset은 web page data (200,000장)과 mobile app data (5,000장)을 섞어 만들고, dev / test 각각 25,000장씩 나눈다. 
    • 장점: 우리가 원하는 target에 집중할 수 있다.
    • 단점: dev/test set의 distribution과 training set의 distribution이 다르다. 

둘 다 장단점이 있지만, 장기적으로 보았을 때 option2가 더 나은 성능을 보여준다. 

 

 

(2) Bias and Variance with mismatched data distributions

이렇게 training과 dev/test set이 mismatch가 날 때, bias와 variance를 분석하는 방법이 달라진다.

- 문제 상황: cat classifier example

  • Training과 dev set이 same distribution을 가질 때
    아래 경우에서는 high variance 문제인 것을 확인할 수 있다. 즉, generalization을 잘 못하고 있다고 분석할 수 있다. 
Human-level performance ~0%
Training error 1%
Dev error 10%

 

  • 하지만, Training과 dev set이 different distribution을 가질 때, Train과 Dev error의 차이가 variance 문제 때문인지, data mismatch 때문인지 정확히 구분하기 어렵다. 따라서 우리는 Training-dev set을 도입하여 둘 중에 뭐가 문제인지 확인할 수 있다.
    • Training-dev set: training set에서 추출하여 training set과 same distribution을 갖는 데이터셋, 학습에 사용하지 않는다. 

  Case1 Case2 Case3 Case4
Human-level performance ~0%
Training error 1% 1% 10% 10%
Training-dev error 9% 1.5% 11% 11%
Dev error 10% 10% 12% 20%
문제점 high variance data mismatch avoidable bias avoidable bias &data mismatch
  • Case1: Training과 Training-dev error 사이의 차이가 크므로, variance 문제 즉, generalization을 잘 못하고 있음을 알 수 있다.
  • Case2: Training과 Training-dev error를 봤을 때 차이가 크지 않고, dev error가 큰 것으로 보아 data mismatch로 인한 문제임을 알 수 있다.
  • Case3: Human-level performance와 Training error의 차이가 매우 크므로, avoidable bias 문제 즉, underfit 되었음을 알 수 있다.
  • Case4: avoidable bias문제에 더해, Training-dev error와 dev error 간의 차이가 크므로 data mismatch 문제도 있음을 알 수 있다. 

*간혹 가다 trainig set error가 dev나 test error보다 더 높은 경우가 있는데, 이 경우는 training set이 dev/test set보다 더 어려운 examples을 포함하고 있기 때문이다. 

 

 

(3) Addressing data mismatch

그렇다면, 이렇게 data mismatch가 있을 때 어떻게 해결해야 할까? Ng교수님도 뾰족한 수가 있는 건 아니고, 어느 정도 해결하는데 도움을 주는 방법을 알려주셨다. 

  • Training과 dev set 사이의 차이를 이해하려고 노력하기 위해 manual error analysis를 수행한다. --> train set과 dev set이 어떻게 다른지, 얼마나 어려운지 등의 특성을 파악한다.
  • 그런 다음 dev set과 좀 더 유사하도록 data를 더 모은다. 

Train dataset을 모으기 위해서 artificial data synthesis를 사용할 수 있다.

예를 들면 그래픽 영상으로 새로운 dataset을 만들거나, noisy data가 필요한 경우, 깔끔한 음성에 noisy 음성을 합성해서 noisy data를 더 수집하는 것이다. 

하지만 이때, 주의할 점은 인간이 보기에는 얼추 다양하게 devset과 유사한 data처럼 보일 수 있으나, 사실 전체 data중의 아주 작은 subset일 수 있다. 따라서 모델이 이런 subset에 과적합될 수도 있으니 주의해야 한다. 

 

결론: Data mismatch 문제가 있다면 error analysis를 수행하고, 데이터 분포가 어떻게 다른지에 대한 인사이트를 얻는다. 그다음에 dev set과 유사한 training set을 모아라!