욱이의 냉철한 공부

[딥러닝 기본] ML Strategy 2 본문

데이터과학/개념 : Deep Learning

[딥러닝 기본] ML Strategy 2

냉철한 욱 2022. 4. 1. 13:07

* 출저

본 개념정리는 제 지도교수님이신 연세대학교 정보대학원 김하영 교수님 수업과 Andrew 교수님의 Coursera 수업을 통해 얻은 정보를 통해 정리했습니다. 자료는 대부분 Andrew 교수님의 Coursera 수업자료입니다.

 

 


 

 

 

1. Error Analysis

1) Carrying out error analysis

- examples 확인

강아지를 고양이로 잘못 카테고리화 한 경우 찾는다.

* 선택

10% error : 100장 중 50장이 mislabeled라면 수정하는 것이 가치가 있을 수 있다.

ex) 100장 중 강아지를 고양이로 잘못 분류한 경우가 50장!

 

- parallel 방식의 error analysis

 

- 요약

요약하자면, 오류 분석을 실행하는데에는 먼저 dev set나 devleopment set에서 잘못 레이블된 example을 찾고, 이러한 잘못 레이블된 example들을 찾아서 false positives와 false negatives를 찾습니다. 그리하여 다양한 카테고리에 대한 오류의 총 개수를 각각 카테고리별로 찾아냅니다. 이런 진행과정에서 새로운 오류 관련 카테고리를 보신것과 같이 생성하기 원할 수 있는데요. example들을 보면서 "우와, 인스타그램 필터가 많네, 또는 스냅쳇 필터가 많네, " 라고 하며 분류기를 망친다는 생각이 드시면, 진행 와중에 새로운 카테고리를 생성하실 수 있습니다. 다양한 사유로 잘못 레이블된 example들을 직접 세면서 그 비율을 계산하면 우선순위를 정하는데 도움이 될 것입니다. 아니면 새로운 방향을 갖도록 자극제 역할을 해줄 수도 있구요.

 

 

2) Cleaning up incorrectly labeled data

- 레이블이 잘못된 경우

가치가 있을 경우 먼저 고치고 아니면 다른 것 먼저 해라
직접 손으로 하는 것을 게을리 해서는 안된다.
하지만 전문 도메인 지식 없으면 어렵다.

 

 

- train set에서 레이블 수정이 가치가 있는 경우

1. random error
딥러닝은 상대적으로 이 error에 강함
이럴 경우, 혹은 토탈 데이터 세트 사이즈 크고, 오류 퍼센트 크지 않으면 수정하지 않아도 좋음

 

2. system error

딥러닝은 이 error에 강하지 않음

ex) 레이블 한 사람이 지속적으로 흰색의 강아지를 고양이로 레이블한 경우

-> 분류기가 모든 흰색 강아지를 고양이로 분류하도록 배웠기 때문

=> 수정 필요

- dev set, test set에서 레이블 수정이 가치가 있는 경우

 

- 레이블 수정에 고려 사항

1. dev, test 세트에 동일한 프로세스를 적용하여 동일한 분포 유지

2. 알고리즘이 틀린 사례, 맞은 사례 모두 검토

3. train과 dev, test 데이터는 미묘하게 다른 분포로부터 나올지도 모른다.

 

 

3) Bulid your first system quickly, then iterate

- Build your first system quickly

시스템을 먼저 만들고, 테스트를 반복

처음부터 어렵게 가지 말고 서서히 고쳐나가는 것 중요

첫째를 빨리 만들어서 살을 붙여나가는 것 중요

 

 

- Build your first system quickly 절차

1. 학습이 완료된 시스템의 구축
2. 학습이 완료된 시스템을 통해 편향/편차를 조절
3. 시스템 우선순위를 결정하는 것
4. 오류 분석을 가능하게하고, 실수 확인
5. 이에 맞는 수많은 접근 방식과 방향성을 알아내서, 어떤 부분이 가장 값어치가 있는지 알아내는 것

 

 

 

 

 

2. Mismatched training and dev/test set

1) Traning and testing on different distributions

1. option1
장점 : 훈련, 개발, 테스트 모두 같은 분포도로 관리하기 쉬움
단점 : 2500개의 개발 세트 보면 진정 관심있는 앱의 이미지보다 웹페이지의 분포가 주축

 

2. option2
장점 : 개발 세트에 관심있어하는 분포의 이미지 적용.

            모바일 앱 이미지 분포에서 잘 작동하는 머신 러닝 시스템을 만드는 것 가능

단점 : 훈련 분포가 당신의 개발과 테스트 세트 분포와 다르다는 것

            그러나 장기적으로 더 좋은 결과 창출

 

=> option2 사용해야 한다.

핵심 데이터는 dev, test에 전부 집어넣는다.

2) Bias and Variance with mismatched data distributions

- 분석의 문제 2가지

1. 트레이닝 세트의 데이터는 봤지만, dev 세트의 데이터는 그렇게 하지 못함.
-> 일반적은 편차문제, dev세트에서 일반화 시키지 못함.

2. dev 세트의 데이터 분포도가 트레이닝 세트와 다름 (데이터 미스매치 문제)

 

 

- training-dev set 정의

트레이닝 세트 <-> dev, test set
training-dev : 트레이닝 세트에서 추출한 부분집합 (트레이닝 세트와 동일한 분포)
-> 어떤 문제인지 확인 가능

 

ex) 트레이닝 오류 1%, training-dev 오류 1.5%, dev 10%

낮은 편차의 문제, 전형적인 데이터 미스매치 문제(데이터 분포도 다름)

 

- 오류의 차이에서 확인 할 것

1. avoidable bias와 편차 확인
2. 데이터 미스매치 문제

 

3) 데이터 불일치 해결법(traing <-> dev, test 다른 분포)

1. traing <-> dev, test 차이를 이해하고 수동 오류 분석을 수행.

기술적으로 오류 분석을 하기위해 테스트 세트가 아닌 개발 세트만 수동으로 확인
특성 파악할 수 있다면 train 데이터를 보다 유사하게 만들 수 있는 방법 찾는다.

 

2. train 데이터를 dev, test와 유사하게 만든다.

또는 유사한 데이터를 더 수집한다.

 

 

 

3 Learning from multiple tasks

1) Transfer learning

- 개요

학습된 모델을 가져와서 사용
마지막 레이어 제외하고, 학습된 레이어 가져와 마지막 레이어를 알맞게 학습시킨다.
즉 마직막 층을 위한 무작위로 초기화된 weight 세트를 생성

 

 

- 학습하는 방법 종류

1. 새로운 데이터양이 적을 때
나머지는 매개변수는 고정하고 마지막 층만 retrain

2. 새로운 데이터양 조금 더 있을 때

출력층 가까운 곳부터 조금씩 줄여나간다.

 

3. 새로운 데이터양 많으면

모든 신경망의 매개 변수를 다시 학습 시킨다.



 

* pre-training -> fine tuning

ex) 이미지 인석 기능에서 습득한 지식을 방사선학 진단하는데 적용 또는 진단법에 그 지식을 트렌스퍼 시킨 것입니다.

이것이 도움을 줄 수 있는 이유는, edges를 감지하는 특성, 커브 감지, poitive object를 감지하는 특성들과 같이 수 많은 low level 특성 때문입니다.
이러한 아주 큰 이미지 인식 데이터세트에서 내용을 익히는 것이, 러닝 알고리즘이 방사선학 진단에 도움이 되도록 해줄 것입니다.
이미지의 구조가 어떻게 되는지, 이미지가 어떻게 생겼는지에 대해 많이 익힌 지식 내용이 유용할 수 있습니다.

 

- 성립하기 위한 조건 (업무A -> 업무B)

1. 업무 A와 B가 같은 타입의 X를 가져야 한다.
2. 업무 B보다 A가 더 많은 데이터 가져야 한다.
(업무 B에 있어 B가 더 값진 데이터이기 때문에)
3. A로부터 낮은 층의 특성들이 B에 도움이 될 수 있을 것 같다고 판단되는 경우

 

 

 

2) Multi-task learning

- 개요

한 모델에서 여러 가지 일을 하는 것
복수의 레이블 존재
하나의 모델로 4개의 문제를 푸는 것과 같다.
4개의 모델 따로 가져서 합치는 것보다 더 좋은 성능 가진다.
? 제외하고 레이블 되어있는 것만 이용하다.

 

 

 

- 언제 사용하는가?

1. shared low-level features로부터 이득을 볼 수 있는 업무들을 학습 시킬 때,

자율주행차 같은 경우엔, '신호등, 보행자, 차량'을 인식하는 것이 'stop sign'과 같은 것을 인식하는 것에 도움을 줄 수 있는 특성과 비슷할 것입니다. 이것들은 모두 도로의 특성을 가지고 있기 때문입니다.

 

2. 업무마다 데이터양이 비슷할 때

multi-task 러닝에서 부스트 효과가 있으려면, 다른 업무의 총 데이터 합산 양이 다른 업무에 비해 훨씬 더 많아야 한다는 것

 

3. 큰 신경망을 트레이닝 시키는 경우에만

그렇기 때문에 multi-task 러닝의 대안은 각각의 업무에 대해서 개별적으로 신경망을 트레이닝 시키는 것.

 

3) 요점 정리

1. transfer learning

오늘날 더 많이 사용.
데이터량이 적은데서 문제를 해결하기 위해 많이 사용.

2. multi-task learning

잘하고 싶어하는 업무의 양이 굉장히 큰 경우 드물기 때문에 적게 사용
사용하는 대표적인 경우는 컴퓨터 비전. 여러 가지 물체를 한 번에 감지하는 어플 많음
이 경우에는 물체를 감지하는데 있어, 따로 신경망을 트레이닝 시키는 것보다 잘 작동.

 

 

 

 

4. End to end deep learning

1) What is end-to-end deep learning

- 개요

엔드 투 엔드 딥 러닝이 하는 일은 여러 단계를 거치는 것 들을 수행하고 하나의 신경 네트워크로 변환

 

- 특성

중간 피쳐를 확인하는 방식은 아니다. 방대한 데이터 양 필요하다.

 

 

- 장점

1. 완벽한 학습을 통해 데이터가 말을 할 수 있도록 하는 것입니다.
     만일 여러분이 충분한 X, Y데이터를 가지고 있다면, X에서 Y에 이르기까지 가장 적절한 기능 지도를 만들어 낼 것
2. 필요한 구성품의 수동 설계가 더 적다는 것 -> 설계 작업 흐름을 단순화

 

- 단점

1. 데이터 많이 필요
2. 유용한 수동 설계 요소를 배제 (손을 많이 쓸 수 없다.)
     훈련 세트가 작을 경우 데이터에서 얻을 수 있는 통찰력이 부족
     따라서 수동으로 부품을 설계하는 것이 더 좋을 수 있다.
     데이터가 많지 않을 때는 조심스럽게 손으로 설계 한 시스템을 사용하면 실제로 인간이 문제에 대한 많은 지식을 알고리즘에 투입         할 수 있고, 매우 도움이 될 것

 

- 결정 포인트

만약 여러분이 새로운 기계 학습 시스템을 구축하고 있고 깊이 있는 학습을 사용할지 여부를 결정하기 위해 노력하고 있다면, 중요한 질문은, X에서 Y에 이르기까지 지도를 그리는데 필요한 복잡성의 함수를 배울 수 있는 충분한 데이터가 있는가를 확인하는 것.