티스토리 뷰

"해당 포스팅은 Coursera 에서 수강한 Andew Ng 의 deep learning specialization 코스를 요약한 것입니다." 


 

1. Error Analysis 

오류를 분석하는 것은 그 이후에 해야할 일에 대해서 우선순위를 정하는 데 도움이 된다. 

실용적인 방법으로는, mislabeled 된 데이터 100개를 뽑아서 하나하나 보는 것. 이것을 spread sheet 에 옮긴 다음 에러 category 별로 정리한다. 

 

고양이 classifier 를 만드는 과정에서 mislabeled 된 이미지를 보니, 강아지, 호랑이, 흐릿한 사진 등이 있다고 할 때 제일 많은 게 blurry 사진이야. blurry 사진에 대한 classifier 의 성능을 높여줬을 때 가장 큰 효과를 얻을 수 있겠지.

 

이 작업이 직접 손으로 해야하다보니, 번거롭게 느껴질 수 있지만 사실 100개의 데이터만 보는 것은 몇 시간 내에 할 수 있고, 이 분석 덕분에 이후 몇 달간 쓸모없는 데에 삽질하는 걸 방지할 수 있어. 

 

근데 오류를 분석하다 보니 Incorrect Labeled data 가 많다는 것을 알게 됐어. 이걸 고치는 게 중요할까? 이 때도 마찬가지로 오류 분석을 해보면 overall error rate 중에서 이 mislabeled 된 데이터가 어느 정도를 차지하는지 알 수 있어. 

 

아래에서 테이블 아래 왼쪽 케이스를 보면 overall error 은 10% dlsep, incorrect 에서 오는게 0.6% 라면, 이걸 다 고쳐도 최대로 얻을 수 있는 improvement rate 은 0.6% 란 뜻이야. 이게 과연 의미있을까? 반대로 이미 error rate 이 2%라면, mislabeled 된 data 를 수정하는게 다른 데에 시간을 쏟는 것보다 더 효율적일 수 있어. 

 

주의! dev set 과 test set 은 꼭 same distribution 에서 온 것이야 해! 그러니까 dev set 에서 mislabeled data 를 수정했으면 test set 에서도 이 작업을 해줘야 함. 

그렇다면 처음으로 ML 모델을 만들고자 할 때, 어떤 순서로 일하는 게 가장 효율적일 수 있을까? 해당 작업에 대해 human performance 를 구해서 Bayes error 를 set 하는 일?  복잡한 model 을 만들기 위해서 많이 고민하는 일?

 

놉! ML 은 empirical 작업이라는 것을 명심하자. Basic model 은 빨리 만든 다음에, 이 모델이 만드는 error 을 바탕으로 오류 분석을 실시해서 이 모델의 성능을 향상시키고 또 다시 오류 분석을 하는 이 cycle 이 빨리 돌아가는 게 가장 중요하다. 초반에 복잡한 모델을 만들기 위해Overthink 하지 말고 일단 시작해! 

 

이렇게 효율적인 프로젝트 진행을 위해서 지켜야할 일의 순서를 정하자면

  1.  dev / test set 찾기 (=목표 설정. 나중에 이 타겟이 바뀔 수도 있음.  중요하지 않아. 그냥 빨리 찾자) 
  2. train set 찾기. (이것도 너무 시간 많이 보낼 필요 없음. dev / test set 과 distribution 이 조금 달라도 괜찮아. web crawling 으로 빨리 찾자. 
  3. 오류 분석을 통한 우선 순위 재설정. (Bias/Variance analysis, Error analysis) 

단, 예외는 있음. 이미 연구가 많이 된 분야의 학회에 내 논문을 발표하고 싶을 때는 초반에 많은 연구가 필요함. 

2. Mismatchd training and dev/test set 

앞서서 dev / test set 은 same distribution 에서 와야 하지만 ,training set 은 꼭 그렇지 않아도 된다고 했다. 그렇다면 실제로 training set 과 dev/test set 의 distribution 이 다를 경우는 어떻게 해야 할까? 예를 들어서 app user 에게서 얻은 real data 의 수가 이것을 training set 으로 쓰기에는 부족한 경우에 온라인에서 비슷한 training set 을 구했다고 하자. train set 와 dev/test set 의 distribution 이 다른 경우 어떻게 data 를 split 해야 할까? 

 

우선 dev / test set 의 나의 target 이기 때문에 app 에 사용될 real data 로만 이루어져야 한다. 다만, real data 가 10,000 개가 있다면 이 것의 절반은 반씩 나누어서 (2500, 2500)  dev /test set 으로 쓰고 나머지 (5000개) 는 이미 온라인에서 구한 training data 와 섞는다. 

 

이렇게 하면 올바른 target 설정을 하는 것과 동시에 training data 의 양도 늘릴 수 있다는 장점이 있다. 

 

이렇게 train 과 dev/test set 이 다른 distribution 을 가지는 데이터를 가지고 모델을 학습했다고 하자. error rate 을 봤을 때, 이 오류가 data mismatch 에서 온 것인지 진짜 training error 인지 어떻게 알 수 있을까?  training dev set 을 추가하면 된다. trainig dev set 은 trainig set 과 same distribution 을 가지지만 이 데이터에 대해서는 training 을 진행하지 않는다. training set 의 error rate 과 이 training dev set 의 error rate 을 비교해 learning error 를 판단할 수 있다. 

 

아래의 표에서 빨간 박스 안을 보자. Human Level 과, training error rate 의 차이는 avoidable bias 에서 오는 것이고, training set 과 training dev set 의 error rate 차이는 variance 에서 오는 것이다 (트레이닝 오류), 그리고 training dev set error 와 실제 dev/test set error rate 의 차이는 data mismatch 에서 오는 것이다.. 

 

Data synthesis to solve data mismatch 

위에서 한 분석을 토대로 data mismatch 에서 오는 차이를 해결하는 것을 우선순위 solution 으로 정했다고 해보자. 이 경우 두 데이터 셋의 mismatch 를 어떻게 해결해야 할까? 

  1. 우선, 두 데이터를 분석함으로써 어떤 차이가 있는지 발견한다. (예를 들어 실제 speech recognition dev set 에서는 training set 보다 잡음이 더욱 컸다)
  2. 이 분석을 바탕으로 training set 를 최대한 dev set 과 비슷하게 만들어준다. 어떻게? data synthesis 로! 

하지만 data synthesis 를 사용할 때의 주의점. 

(아래 그림의 보라색 동그라미 주목) real world 의 data set 의 분포가 실제로는 큰 원 (예. 모든 종류의 차의 잡음) 이라고 하자. 하지만, data synthesis 를 하기 위해 찾은 data (자동차 잡음 1시간 짜리) 가 사실은 전체 data 의 극히 일부라고 하자. 이 data 를 가지고 data synthesis 를 할 경우, ML 모델이 이 data 에 overfit 될 수 있음. 

 

3. Learning from multiple tasks 

Transfer Learning

Transfer Learning 은 이미 방대한 데이터를 가지고 pre-trained 된 모델을 가져다가 쓰는 것 (각 layer 에서 trained 된 weights 그대로 사용) 

1) Output layer W[L] 만 바꾸거나, 그 이전의 layer 1, 2개 정도 (W[L-1], W[L-2]) 를 Randomly Initialize 한 다음 training. 

2) Output Layer 를 바꾸고 & 그 이전에 없던 Previous layers 를 1, 2개 추가하는 것도 가능. 

 

이건 언제 쓰냐면 

 

Multi-task learning 

이건 그동한 모호했던 개념인데 이제야 이해됨. 

Multi-task learning 은 데이터가 하나의 label 만 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함