안녕하세요, HELLO
오늘은 DeepLearning.AI에서 진행하는 앤드류 응(Andrew Ng) 교수님의 딥러닝 전문화의 세 번째 과정인 "Structuring Machine Learning Projects"을 정리하려고 합니다.
"Structuring Machine Learning Projects"의 강의를 통해 '머신 러닝 시스템의 오류를 진단할 수 있고, 오류를 줄이기 위한 전략의 우선순위를 지정하고, 일치하지 않는 training/test set와 같은 복합적인 ML 설정을 이해하며 휴먼 레벨의 성능에 필적 및/또는 능가하는 ML 설정을 이해하고, 종단 간 학습, 전이 학습, 멀티 태스크 러닝을 적용' 등을 배울 수 있습니다. 강의는 아래와 같이 구성되어 있습니다.
~ Machine Learning Strategy Ⅰ
~ Machine Learning Strategy Ⅱ
"Structuring Machine Learning Projects" (Andrew Ng)의 2주 차 "Machine Learning Strategy Ⅱ"의 강의 내용입니다.
CHAPTER 1. 'Error Analysis'
CHAPTER 2. 'Mismatched training and dev/test data'
CHAPTER 3. 'Learning from multiple tasks'
CHAPTER 4. 'End to end deep learning'
CHAPTER 1. 'Error Analysis'
□ Carrying out error analysis
학습 알고리즘을 개발하면서 학습 알고리즘이 인간 레벨 수준의 성능에 미치지 못한다면, 수작업으로 알고리즘의 error들을 점검하는 것이 도움이 되며, 이런 프로세스를 Error Analysis라고 합니다.
오류 분석 절차가 효율적이지 않은 경우에는
1. 대략 100개의 잘못 분류된 dev set 샘플을 수동으로 검사합니다.
2. 실제값을 확인합니다.
결론적으로 오류 검사를 위해 먼저, dev set에서 잘못 레이블 된(mis-labeled) 케이스를 찾고, 해당 케이스에 false positive, false negative를 찾습니다. 그리고 다양한 경우의 오류를 카테고리별로 찾아냅니다.
이렇게 Error Analysis를 수행하면, 오류 문제에 투자하는 것이 도움이 되는지에 대한 가이드라인을 제시해줍니다. hard engineering도 오류 분석에 많은 시간을 줄일 수 있습니다. Error Analysis에서 여러 가지 오류 원인들을 parallel 하게 분석해서 평가할 수도 있습니다.
□ Cleaning up incorrectly labeled data
■ training set
딥러닝 알고리즘은 train set에서 랜덤한 오류에 대해서 견고한(robust) 특성을 가지고 있습니다. 실제 오류의 퍼센트가 낮고, training set 숫자가 큰 경우에는, 일정한 패턴을 가지는 에러가 아닌 랜덤한 에러에 대해서는 그대로 놔둬도 괜찮습니다. 단, 딥러닝 알고리즘은 systemic errors에는 약합니다.
incorrectly labeled처럼 random error에 대해서는 dev set의 성능이 커지지 않는 이상은 진행하지 않아도 괜찮습니다.
하지만 성능이 크게 바꾸게 되는 경우라면, error를 개선하는 게 좋습니다.
■ dev/test set
1. dev set과 test set을 같은 분포를 유지하도록 조정하는 것입니다.
2. 알고리즘이 정답을 틀린 것을 검토하는 것과 동일하게 맞춘 것에 대해서도 중요하게 검토해야 됩니다. 이는 실제 생활에서 적용하기 힘든데 이는 98%의 정확도를 가지는 알고리즘에서 2%의 틀린 경우를 검토하는 게 시간적, 계산적으로 용이하기에 맞춘 경우에 대해 검토가 어렵기 때문입니다.
3. train set과 dev/test set은 다른 분포를 가질 수 있지만, 그래도 괜찮습니다.
하지만, 1번에서 정리한 것처럼 dev set과 test set은 같은 데이터 분포를 유지해야 합니다.
□ Build your first system quickly, then iterate
머신러닝 시스템을 만드는 것에 부담을 가지지 않고, 빠르게 시행착오를 겪는 것이 중요합니다.
시행착오 진행 절차로는 dev/test set과 평가 방법(metric)을 설정합니다. 그리고 머신러닝 시스템을 만들며, 그다음은 편향, 분산 분석과 오류 분석을 진행하는 것입니다. 이를 통해 모델의 성능을 향상하며 시행착오(trial and error)를 반복하면서 진행합니다.
CHAPTER 2. 'Mismatched training and dev/test data'
□ Training and testing on different distributions
고양이 이미지 분류를 예로 들어, user data가 10,000개이며 보유한 고양이 이미지 200,000개인 상황입니다. user data는 화질이 좋지 않은 데이터 형태이며, 보유한 데이터는 고화질의 이미지 데이터입니다. 각 데이터는 분포가 상이한 상황입니다. 실제 고객의 이미지 인식 훈련을 위해서는 user data를 사용해야 하기에, 200,000개의 이미지 데이터에 대한 논의가 남아있습니다.
option 1. 두 개의 데이터를 섞는 것
두 개의 데이터를 임의적으로 섞어 연습하고 발전시킵니다.
장점은 train, dev/test set이 같은 분포도를 이루며, 데이터 관리가 쉽다는 것입니다.
단점은 dev test에는 관심 있는 데이터 분포가 부족한 상황입니다.
option 2. 중요한 데이터를 dev/test에 주요하게 적용
train set에는 웹페이지 이미지 모두와 5,000개의 user data로, dev/test set를 각각 5,000개의 데이터로 구성합니다. 이렇게 dev/test set을 구성하는 이유는 해당 데이터가 관심 있는 데이터 분포이기 때문입니다.
□ Bias and Variance with mismatched data distributions
dev set 데이터가 다르기에 training error보다 높은 오류를 가질 수 있습니다. training-dev set는 train set와 동일한 데이터 분포를 가지지만, 훈련시키지 않는 데이터를 의미합니다.
같은 데이터 분포를 가지는 training-dev set에서도 제대로 훈련되지 않았기에, 일반화되지 않은 분산(variance) 문제입니다. 전형적인 데이터가 일치하지 않은 경우입니다. 데이터 분포가 다른 경우에 제대로 훈련하지 못하는 경우입니다.
중요한 부분은 human level error, training set error, training-dev set error, dev set error이 부분이며, 각각의 차이를 통해 avoidable bis, vaiance, data mismatch를 확인할 수 있습니다. 그리고 dev error와 test error 비교를 통해 머신러닝 알고리즘 dev set 훈련의 overfitting을 확인할 수 있습니다. 만약 error 비교가 크게 차이가 난다면, 더 큰 dev set을 찾아봐야 합니다.
□ Addressing data mismatch
CHAPTER 3. 'Learning from multiple tasks'
□ Transfer learning
알고리즘의 훈련 결과를 다른 알고리즘 훈련에 적용할 수 있습니다.
마지막 출력층을 제외한 가중치(w)를 그대로 두고, 데이터 세트 x와 y를 교체합니다. 마지막 출력층에 랜덤 초기화된 가중치로 새롭게 만들어냅니다. 익숙한 신경망 parameter로 훈련시키고, 마지막 출력층만 변경합니다. 이를 첫 번째 단계로 pre-training으로 신경망의 weight 비중을 pre-initialize나 pre-train 하기 위해서입니다. 다른 말로 fine tuning이라고 합니다.
데이터의 크기에 따라 다르지만, 데이터의 크기가 충분한 경우 나머지 신경망 층에 대해서도 파라미터를 변경해서 훈련시켜서 진행해도 되며, 데이터가 작은 경우에는 마지막 출력층의 파라미터만 수정하면 됩니다. 이렇게 transfer learning을 적용할 수 있는 이유는 이미지 인식을 예로 들어 egdes를 감지하는 특성, 커브 감지, positive object를 감지하는 특성들과 같이 low level 특성들을 배울 수 있기 때문입니다.
transfer learning은 전송하는 곳(이전에 훈련한 데이터 세트)의 데이터가 전송하려는 곳(새롭게 훈련할 데이터 세트)의 데이터보다 많은 경우에 좋습니다. 반대로 전송하려는 곳의 데이터가 전송하는 곳보다 많은 경우에는 transfer learning을 적용하는 것은 알고리즘 성능에 좋지 않습니다.
결과적으로 아래와 같은 경우에는 transfer learning을 적용할 수 있습니다.
(알고리즘 A = 전송하는 곳(이전에 훈련한 데이터 세트), 알고리즘 B = 전송하려는 곳(새롭게 훈련할 데이터 세트)
1 알고리즘 A와 B가 같은 입력값 x를 가지는 경우
(ex: A와 B가 이미지, 오디오 영상, 음성 등 같은 입력값을 가지는 경우 등)
2. 알고리즘 A의 데이터가 B보다 더 많은 데이터를 가지는 경우
3. 알고리즘 A의 low level features가 B에 도움이 되는 경우
□ Multi-task learning
transfer learning과 다르게 multi-task learning은 동시에 알고리즘을 훈련합니다.
softmax regression은 single example에 대해서 single label을 부여한 것에 비해, multi-task learning은 single example에 대해서 multi label을 가질 수 있습니다. 이미지 인식을 예로 들어, 이미자가 한 사진에 대해서 신호등, 자동차, 정지 신호 등 복수의 물체가 같은 그림에서 처리할 수 있습니다. 이미지에 각각의 클래스에 대해서 복수의 label을 부여할 수 있습니다.
3가지 경우가 도달되었을 때 multi task learning을 적용할 수 있습니다.
1. lower level feature을 공유할 때
2. 일반적으로 각각의 업무에 대해서 데이터 양이 유사한 경우
3. 신경망 네트워크가 충분하게 크다면, multi-task learning의 효율적입니다.
multi-task learning은 장애물 인식 등 이미지 인식 분야에서 많이 활용됩니다. 따로 신경망을 훈련시키는 것보다 여러 label을 훈련시키는 것이 효과적입니다. 하지만 평균적으로 transfer learning이 자주 사용됩니다.
CHAPTER 4. 'End to end deep learning'
□ What is end to end deep learning
□ whether to use end to end learning
■ 장점
1. 충분한 x, y 데이터가 있다면, x에서 y로 도달하는 결과를 통계를 자세히 보여줄 수 있습니다.
2. 수동 설계를 적게 해도 되기에, 알고리즘 설계에 시간을 줄일 수 있습니다.
■ 단점
1. 데이터가 많이 필요할 수 있습니다.
2. 유용하게 수동으로 설계된 구성 요소(hand-designed components)를 배제하는 것입니다. 필요한 정보 및 방안을 알고리즘에 반영하여 설계된 경우가 유용할 수 있습니다.
가장 중요한 것은 end to end deep learning을 진행할 만큼 충분한 데이터가 있는지가 중요합니다.
■ 마무리
"Structuring Machine Learning Projects" (Andrew Ng)의 2주 차 "Machine Learning Strategy Ⅱ"의 강의에 대해서 정리해봤습니다.
그럼 오늘 하루도 즐거운 나날 되길 기도하겠습니다
좋아요와 댓글 부탁드립니다 :)
감사합니다.
'COURSERA' 카테고리의 다른 글
[COURSERA] Structuring Machine Learning Projects 자격증 취득 (4) | 2022.03.03 |
---|---|
week 2_Autonomous driving (case study) (Andrew Ng) (0) | 2022.03.03 |
week 1_Bird recognition in the city of Peacetopia (case study) (Andrew Ng) (0) | 2022.03.03 |
week 1_Machine Learning Strategy 1 (Andrew Ng) (0) | 2022.03.03 |
[COURSERA] Convolutional Neural Networks (Andrew Ng) (0) | 2022.02.27 |
댓글