티스토리 뷰
[Course3 Week2] - Structuring Machine Learning Projects
제이gnoej 2020. 7. 13. 22:13"해당 포스팅은 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 하지 말고 일단 시작해!
이렇게 효율적인 프로젝트 진행을 위해서 지켜야할 일의 순서를 정하자면
- dev / test set 찾기 (=목표 설정. 나중에 이 타겟이 바뀔 수도 있음. 중요하지 않아. 그냥 빨리 찾자)
- train set 찾기. (이것도 너무 시간 많이 보낼 필요 없음. dev / test set 과 distribution 이 조금 달라도 괜찮아. web crawling 으로 빨리 찾자.
- 오류 분석을 통한 우선 순위 재설정. (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 를 어떻게 해결해야 할까?
- 우선, 두 데이터를 분석함으로써 어떤 차이가 있는지 발견한다. (예를 들어 실제 speech recognition dev set 에서는 training set 보다 잡음이 더욱 컸다)
- 이 분석을 바탕으로 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 만
'Deep learning (일반) > deeplearning.ai' 카테고리의 다른 글
[Course4 - Week2] State of computer vision (0) | 2020.08.10 |
---|---|
[Course4 - Week1] Convolutional neural networks (0) | 2020.07.28 |
[Course2 - Week2] Improving Deep Neural Networks (0) | 2020.05.25 |
[Course1 - Week 3] Shallow Neural Network (0) | 2020.04.06 |
[Course1 - Week 2] Neural network and deep learning 코드 (0) | 2020.03.23 |
- Total
- Today
- Yesterday
- Pre-trained LM
- 벡터
- Neural Language Model
- neural network
- LM
- weight vector
- Statistical Language Model
- 뉴럴넷
- word embedding
- nlp
- neurone
- language model
- Bert
- Attention Mechanism
- Elmo
- cs224n
- transformer
- 워터마킹
- GPTZero
- Contextual Embedding
- 언어모델
- 뉴런
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |