본문 바로가기
Deep learning

4-2. Validation

by 괴로운데이빗 2020. 11. 2.

분류기를 만들 때, 여러 모델을 테스트해보고,

그 중 좋은 것을 찾아냅니다.

 

예를들면 로지스틱 리그레션 쓸지, 뉴럴네트워크 쓸지, CNN쓸지 결정해야하고,

뉴럴네트워크를 예로 들면,

히든 레이어 몇개로 할것인지, 노드는 몇개로 할것인지 등등을

검증을 통해서 결정해야한다.

 

검증을 하는 과정을 살폅보자.

 

 

실제 문제를 생각해보면,

어떤 모델을 만들어서 테스트를 해야한다.

 

그 모델 만들때 training data가 필요하다.

이 training data는 레이블을 가지고 있다.

하지만 test data의 경우에는 레이블이 없다.

 

그래서 레이블 가지고있는 training 모델로,

모델을 classifier만들어서 release 할것.

release한 classifier로 새롭게 들어오는 데이터로 classification하는 문제.

 

앞에서 살펴보았던 여러 기법들을

이 training data로 학습할 수 있다.

로지스틱 리그레션, 뉴럴네트워크 등등 학습할 수 있다.

 

그렇게 하면 hypothesis나오고, label들을 바탕으로 에러값 구하고

이 에러로 역전파시켜서 classifier가 만들어지는 것.

 

이 classifier는 training data에 적합하도록 학습니 된다.

뉴럴네트워크, 딥뉴럴네트워크 등 쓰면(파라미너 수가 많아지면 많아질수록)

training 에러는 줄어든다.

 

하지만 그 모델이, 실제 새로운 데이터, test데이터에 잘 동작할지 안할지는 알 수 가 없다.

 

그렇기 때문에 보통

train 데이터를 좀 나눠준다.

나눠진 일부 set을 validation data로 이용을 한다.

 

실제, 전체 training data 내에서도 training하는 set과, validation하는 set을 나눠주는 것.

 

그래서 실제 모델은 training set으로 training하게 되고,

training data 에러를 적게하는 모델 만들어지면,

그 모델을 validation set에 적용해서 결과를 본다.

 

그 과정을 그래프로 그려보면,

모델 만들때  gradient descent하면 interation이 계속 돌아갈 것이고,

그 때 에러를 보면,

training set에 대한 에러는 줄어들 것.

그렇지만 모델이 복잡하면 복잡할 수록 에러는 떨어질텐데,

validation set에 대해서는 내려가다가 어느 순간 올라가게 될 것이다.

 

그 기준점을 overfitting이 된다고 말을한다.

 

그래서 그 기준점에 멈춰서,

training할때 이용되지 않은 새로운 set에 잘 동작하는 모델이다 해서,

그 부분의 모델 가지고 와서 release한다.

 

그 모델로 test하는데 이용하게 된다.

 

이 validation set은 사실상,

training에 이용된다고 볼 수 있다.

validation set의 에러를 계산하기 위해서

validation set의 레이블이 필요하다.

(평가를 하기 위해 필요한 레이블)

 

다른 모델도 평가를 해야한다.

지금까지 한 것이 로지스틱리그레션이었다면,

뉴럴네트워크가 더 나은지도 비교해봐야한다.

 

뉴렐네트워크의 validation data도 내려가다가 올라오면

그 기준점에서 최종 모델이 뽑힌다.

 

위의 그래프를 보면 validation set은 로지스틱리그레션보다는 뉴럴네트워크가 좋은 것이다.

 

이런 식으로 CNN평가해볼수 있다.

CNN에서도 서로다른 레이어수를 가진 CNN평가해볼수 있고,

혹은 노드수가 달라지는 구조의 CNN형태에 대해서도 실험해볼 수 있다.

 

이렇게 여러가지 모델에 대해서 같은 작업을 수행할 수 있다.

그 때, validation 결과를 우리가 구할수 있다.

그 결과가 가장 높은 모델을 선정하게 되고

그 final 모델을 release한다.

그리고 test set에 적용하게 된다.

 

그럼 전체데이터를 training set과 validation set으로 나눌때

비율은 주관적이다.

5:5 ~ 9:1

 

보통 training data가 많은 경우에는,

컴퓨터비전은 training data가 100만장 있다고 해보자.

이런 경우 보통 training에 많은 데이터를 사용하고, validation과 test set은 좀 적은 수의 영상을 사용한다. (예를 들면 만장정도?)

 

이렇게 해도 만장에는 다양한 distribution을 가지는 data가 들어있기 때문에,

이런 경우에는 모델을 잘 만드는데 focusing하겠다,

그리고 validation과 test set이 이정도면 충분하다 싶으면 training에 많은 데이터 사용하기도 한다.

 

반면, 의료영상분석은

물론 이런식의 평가방법을 따라도 되지만,

data가 적은 경우가 있을 수 있다.

 

data가 적은 경우에는 cross validation이라는 것을 많이사용한다.

 

 

cross validation에 대한 설명.

data를 받으면,

data를 몇개의 sub data로 나누게 된다.

위의 사진에서는 4개의 sub data로 나눴다.(4-fold cross validation)

이렇게 나눈 뒤,

첫번째 데이터를 test로 놓는다.(파란색)

나머지 데이터로 trainin을 수행한다.

 

training 할 때, trainin data, validation data필요하니까

2개를 trainin, 1개를 validation에 사용할 수 있다.

나누는 비율은 주관적일 수 있다.

 

이 데이터로 학습한 뒤, 모델을 적용한다.

 

이게 첫번째 폴드에 대해 나온 결과가 되는 것이다.

 

그다음 두번째 폴드에 대해서도 같은 작업을 반복한다.

다만, 여기서는 2번째(파란색)가 test가 되고, 나머지중 2개가 traing, 나머지 1개가 validation data

 

여기서도 두번째 폴드에 대한 결과가 나오고

나머지 폴드에 대해서도 같은 작업을 반복할 수 있다.

 

그래서 총 모든 폴드에 대해서 결과를 구하면,

전체데이터에 대한 테스트 결과를 얻을 수 있다.

이렇게 되면, 아무래도,

 

소수의 데이터로 나온, 소수의 데이터로 검증된 결과보다는(폴드로 나온 결과)

좀 많은 데이터에 검증이 되었기 때문에 좀더 믿을 만한 결과를 얻을 수 있다.(전체 test데이터로 나온 결과)

 

마찬가지로,

로지스틱리그레션을 학습할 수도 있고, 뉴럴네트워크, CNN.. 다양한 구조, 다양한 모델을 학습할 수 잇는데,

이것 모두다 k-fold cross validaion 수행한 뒤, 여기서 나온 제일 좋은 결과를

선택해서 그 모델을 release할 수 있다.

 

data수가 아주 적은 경우에(예를들면 전체데이터수가 10개이하),

데이터 수만큼 나눠주기도 하는데,

그 기법을 leave one out validaion이라고 한다.

 

역시 cross validaion과 비슷한 방식으로

모든 데이터 수만큼 validaion 반복해주는 방법이다.

 

이런, 모델을 검증할때 쉽게 봉착하는 문제가 오버피팅문제이다.

다음 차시에서는 오버피팅 문제에 대해 살펴보고, 이를 완화할 수 있는 방법에 대해 살펴보자

'Deep learning' 카테고리의 다른 글

4-5. Data Augmentation  (0) 2020.11.05
4-4. Transfer Learning  (0) 2020.11.05
4-3. Overfitting / Regularization  (0) 2020.11.02
4-1. Overall procedure  (0) 2020.10.28
3-6. CNN with demographic scores  (0) 2020.10.25
3-5. Advanced CNNs (ResNet, InceptionNet, DenseNet)  (0) 2020.10.05
3-4.Advanced CNNs (LeNet, AlexNet, VGG)  (0) 2020.09.15