-
Structuring Machine Learning Projects - 1 weekGoogle ML Bootcamp 2022/Coursera mission 2022. 7. 16. 12:10
Why ML Strategy
이 강의에선 머신 러닝 전략에 대해 배운다
모델을 개선하기 위해 할 수 있는 건 아주 많다
등등.. 문제는 개선 방향을 잘못 선택하면 오랜 기간 시행착오를 겪을 수 있다
Orthogonalization
시도하고, 바꿀게 너무 많다
그렇기에 하나의 효과를 얻기 위해 무엇을 튜닝할 것인지를 뚜렷하게 알아야 한다
이러한 절차를 직교화라고 한다
하나의 변수가 하나의 기능을 하도록 좌표축을 쪼개는 느낌?
잘 작동하게 만들기 절차 (손잡이를 열심히 그리셨다고 한다) 어떤 절차에서 문제가 생겼는지 알고, 적절한 조정을 해줘야 한다
하나의 과정에만 영향을 주는 직교화된 손잡이를 사용하는게 조절하기 쉽다
Single Number Evaluation Metric
아이디어를 시도하는 과정에서 잘 되고 있다는 점수가 있다면 진행이 훨씬 쉬울 것이다
정밀도(Precision) : 고양이라고 했을데 진짜로 고양이인 정도
재현율(reacall) : 고양이인 것들 중 올바르게 판별한 정도
인데 F1 score라는 둘을 합친 것을 사용하는데 대충 위에 두 가지를 합친 것의 조화 평균이다
개발 세트와 이 점수를 활용하면 반복 수행 속도를 높일 수 있다
Satisficing and Optimizing Metric
정확하긴 하나 속도가 완전 느리면 뭔가 별로인 것 같다
이처럼 trade-off 문제 때문에 성능을 최대로 하고 싶은 것을 최적화 척도(optimizing metric)로 택하고, 조금 덜 중요한 목표를 (satisficing metic)으로 정하고 해결한다
예를 들어 정확도(o)가 제일 좋은 모델, 그런데 이제 속도(s)가 100ms보다 빠른.. 느낌이다Train/Dev/Test Distributions
세 가지 set을 어떻게 나누냐도 학습 속도에 큰 영향을 미친다
dev/test 셋을 중점적으로 살펴보자
먼저 셋을 고르는 것은 분포가 같아야 한다
한 곳에서만 뽑으면 잘 작동하지 않을 것은 당연하다
그렇기에 무작위로 데이터를 섞고 셋으로 나누는게 좋다
미래에 어떤 테스트 셋으로 변할지를 고려하여 적합한 dev/test 셋을 고르는 게 좋다
(저소득 집 주소로만 나누자, 중상위에 대해 작동안한 팀원 이야기를 해주셨다. 파이팅)
dev/test 셋은 과녁 선정과도 같기에, 방향성을 잘 잡아야 한다
Size of the Dev and Test Sets
분포를 동일하게 해야 한다는 것을 배웠다
그렇다면 비율은 어떻게 해야 할까
70/30 or 60/20/20으로 많이 해왔다
그러나 데이터 세트가 커짐에 따라 98/1/1과 같이 줄여도 된다test set은 모델 학습 후 최종 성능 측정에 사용된다
따라서 성능을 확인할 정도로만 크면 된다
When to Change Dev/Test Sets and Metrics?
고양이 사진 분류 모델이 있다 하자
모델 A는 3% 에러를 가지지만, 종종 불쾌한 사진을 보여준다
모델 B는 5% 에러를 가지고, 딱히 이상한 사진은 나오지 않는다이런 사례를 보면 A가 오차면에서 좋지만, 실질적으로 더 선호된다고 보기 어렵다
정확도 평가에서 가중치를 부여함으로써 이 문제를 해결 가능하다
예를 들어 귀신 사진을 보여주면 10배 가중치를 주어 더 높은 오차라고 하는 것이다
평가 지표가 문제 해결에 적합하지 않다면, 적절한 새로운 척도를 도입해야 한다
무슨 지표를 살펴봐야 할지 / 그 지표에 어떻게 살펴볼지는 나눠서 생각해야 한다
dev/test 에서 잘 작동하지만, 실제로 잘 동작하지 않으면 set을 수정해야 한다
(학습엔 고화질만 사용, 실제론 이런저런 잡다한 저화질)
완벽한 평가 척도가 아니라도, 대강 뭐라도 있는게 더 낫다
Why Human-level Performance?
머신러닝 모델과 인간의 수준을 비교해 왔다딥러닝의 발전으로 인간과 경쟁할 수준으로 올랐고, 인간 모방이 효율적이라는게 밝혀졌기 때문이다학습 무지성으로 계속 시키더라도 정확도가 증가하지는 않는다 수렴하는 경계를 베이즈 최적 오류(Bayes Optimal error)라 한다
고양이 판단 모델에서, 이미지가 너무 흐려 판별 불가한 오류 같은 것 때문에 100%에 도달하지 못할 수 있다
모델은 인간 성능을 넘어서면, 학습 속도가 느려진다
사람이 고양이를 판별하는 걸 못하는 비율이 적을 수도 있고, 인간 수준을 넘고 나선 이전에 사용했던 도구를 사용하는 것이 어려울 수 있다
도구는 사람이 직접 label해 data 만들어 주기 , manual error 분석, bias/variance 개선과 같은 방법이다
Avoidable Bias
train set에서 정확히 작동하는 알고리즘을 채택했다
그러나 너어무 성능이 뛰어난 것은 오히려 좋지 못할 수도 있다
사람, train, dev에서 성능을 비교하며 뭘 해야 할지 전략을 정하자 인간의 수준을 보통 베이즈 오류의 추정치라 본다
human/train 사이의 오차를 회피 가능한 편향(avoidable bias), 개선 가능한 점으로 보고 수정한다
train/dev 사이의 오차는 분산으로 본다
즉 위의 경우 각각 7% avoidable vias/ 2 % variance와 0.5% avoidable bias/ 2% variance를 가진다
Understanding Human-level Performance
인간 수준을 베이즈 오류의 추정치로 한다고 했는데, 어떤 사람을 기준으로 해야 할까
의학 이미지 분류 예시를 살펴보자
일반인 보단 보통 의사가, 보단 경험 더 많은 의사가, 보단 의사 그룹이 토의해서 정한 게....
하며 점점 개선이 될 수 있다
베이즈 오류는 도달 불가능한 한계선이므로, 가장 나은 수준으로 해야 한다
물론 논문 작성이나, 새로운 시스템 도입에선 인간 수준의 정의가 조금 달라질 수 있다
아마 일반의 수준의 모델을 만들더라도 굉장히 유용할 것이다
Surpassing Human-level Performance
인간 수준에 도달하거나, 능가하는 순간 발전이 어려워진다
사람보다 성능이 나으면 과적합 된 건지, 그냥 성능이 좋은 건지 판별조차 어렵다
사람은 자연적 데이터 판별은 잘하지만 구조화된 (광고 추천, 상품 추천 등등) 분야는 ML이 뛰어 날 수 있다
이런 structural data를 다루는 분야는 data가 아주아주 방대하기에 사람의 능력을 을 수월하게 추월할 수 있다
Improving your Model Performance
지금까지 배운 것을 모아보자
알고리즘이 잘 작동한 다는 것은 아래 두 가지를 의미한다
train set에 잘 fit 되어, avoidable bias가 낮아야 한다
dev/test set에서 좋은 성능이 나와 variance가 잘 나와야 한다
해결해야 할 해결 손잡이 avoidable bias 더 큰 모델 학습 시키기
오래 학습시키기
더 나은 최적화 알고리즘 사용(모멘텀,RMSprop,Adam)
더 나은 NNarchitecture 찾기 (RNN, CNN)
하이퍼파라미터 튜닝variance regularization(dropout 등등)
데이터 더 많이 수집
더 나은 NNarchitecture 찾기 (RNN, CNN)
하이퍼파라미터 튜닝'Google ML Bootcamp 2022 > Coursera mission' 카테고리의 다른 글
Convolutional Neural Networks - 1 week (0) 2022.07.21 Structuring Machine Learning Projects - 2 week (0) 2022.07.16 Improving Deep Neural Networks - 3 week (0) 2022.07.15 Improving Deep Neural Networks - 2 week (0) 2022.07.13 Improving Deep Neural Networks - 1 week (0) 2022.07.10