티스토리 뷰

Model Validation in Keras

 - 컴파일이 끝나면 모델을 학습시킬 준비가 다 됐다.

 - 모델을 학습시키는 과정에서 모델이 수정되는 과정을 이해하기위해

 - 모델 유효화의 개념에 대해 먼저 알고있어야한다.




 - 우리는 지금껏 모델이 잘 학습되고있는지를 epoch가 증가함에 따라 loss의 정확도의 변화 추이를 보며 판단하였다.




 - 모델을 구현할 때, 얼마만큼의 레이어가 필요한지 또, 각 레이어마다 얼마만큼의 노드가 필요한지 명확하지 않았다.

 - 이런 결정을 내리기 수월하도록 일반적으로 데이터셋을 분류한다.




 - 보통 3가지로 나누는데, Train Set / Validation Set / Test Set 이 이에 해당된다.

 - 모델은 각각의 데이터셋을 각기 다른식으로 접근하게 된다.

 - 모델은 Train Set을 가지고 어떻게 가중치를 결정할지 판단하는 척도로만 사용한다.

 - 그 다음 모델은 Validation Set을 가지고 매 epoch마다의 정확도(accuracy)를 바탕으로 잘 동작하고 있는지를 판단한다.

 - 주목할 점은 back propagation step에서는 이 Validation Set을 전혀 건들지 않는다는점이다.

 - Train Set을 사용하여 모든 패턴들을 찾아내고

 - Validation Set을 통해 모델이 잘 동작하고있는지를 알아낼 수 있다.

 - 모델의 가중치를 결정할 때 Validation Set을 사용하지 않으므로

 - 모델이 over-fitting 되었는지도 Validation Set을 사용하여 알아낼 수 있다.




 - 만약 우리가 200 epoch의 학습을 진행한다 가정하고, 위의 그래프처럼

 - training loss가 감소함에 따라 validation loss가 증가하기 시작했다면, 모델이 over-fitting되고있다고 판단할 수 있다.

 - 이 때, epoch 100 근방의 weights를 알아내면 모델에 대해 loss의 최저점을 찾게 되는것이다.




 - 이러한 프로세스는 다수의 잠재 아키텍쳐(multiple potential architectures)들 중 하나를 선택할 때도 유용하게 사용된다.

 - 가령 위의 세가지 모델의 레이어의 수를 각기 다르게 설정하였다 가정하면

 - loss값이 가장 적은 모델을 선택하여 그 모델의 가중치를 저장해두면 된다.




 - 모델이 가중치를 업데이트할 때 Validation Set을 사용하지 않더라도 

 - Validation Set의 데이터에 편향적으로 가중치를 선택하는 경향이 있다.

 - 따라서 Test Set에선 모델을 테스트할 때 이전에 학습한 데이터가 아닌 전혀 새로운 데이터를 통해 테스트를 진행한다.

 - 그러므로 총 세개의 데이터셋으로 분류하여 학습을 진행하는 것이다.




 - 다시 코드를 보면, fit 메서드는 validation_split을 인자로 취하는데 위에서는 0.2를 줬다.

 - 따라서 20%의 데이터가 training data로 할당되고, 그렇게 할당 된 데이터는 training set으로부터 제거된다.

 - 제거된 대신 그 데이터는 validation set으로 사용된다.

 - ModelCheckpoint 클래스는 매 epoch마다 모델의 가중치를 저장하도록 허가한다.

 - filepath 인자에서는 실제 가중치를 저장할 경로를 지정해줄 수 있다.

 - save_best_only 인자를 True로 주게되면 validation set에서 가장 정확도가 높았던 시행에서의 가중치만을 저장한다.

 - verbose 를 1로 주면 학습을 진행하는동안 가중치 파일이 업데이트 될 때마다 텍스트를 출력해준다.

 - 이렇게 checkpointer 변수를 생성하고나면 위와같은 인자들을 넘겨주어 모델을 fit 시키는것이다.


 - 주피터 노트북에서 모델을 돌리고 학습된 output을 봐보면, 

 - epoch 마다 validation loss가 감소하는것을 확인할 수 있다.

 - 이는 우리가 모델을 제대로 설계하였고 테스트 데이터셋에 대해 퍼포먼스또한 훌륭하다는것을 의미함.


** 참고

 - ModelCheckpoint 구현에 대한 더 자세한것은 이 블로그 참고






When do MLPs (not) work well?

 - 모델을 학습시켰으면 그중 가장 유효 정확도(validation accuracy)가 높은 가중치를 불러올 수 있다.




 - 모델을 Testing Set을 가지고 다시 테스트해보면, 98% 이상의 정확도를 보여주고 있음을 알 수 있다.

 - 이 경우 MLP를 사용한것이 적절한 선택이라는 증거가 될 수 있다.

 - 다른 데이터셋에 대한 적절한 솔루션은 아래 링크로부터 확인할 수 있다.

 - http://yann.lecun.com/exdb/mnist/

 - 위 사이트에서 적절한 알고리즘과 그에따른 테스트 에러등을 확인할 수 있다.




 - 주목할점은 CNN과 MLP는 서로 비슷한(유사한)결과를 도출해내지 않는다는 것이다.

 - 또한, MNIST 데이터셋의 데이터들은 완벽하게 정규화 된 데이터들이다. 

 - 즉, 모든 데이터가 28 by 28 크기를 유지하고, 숫자의 위치 또한 중심을 잘 유지하고 있어서

 - 모델을 가지고 학습시키기 매우 용이한 조건이다. 이러한 이미지를 clean 하다 표현함.

 - 하지만 실제 현실세계에서 습득한 데이터들은 대부분이 위와같이 정규화되어있지 않다.

 - 즉, 어떤 데이터는 크고 또 다른것은 작고 등등 모델을 학습시키기에 매우 안좋은 조건일 경우가 대다수이다.

 - 이러한 실제 데이터의 경우 MLP보다 CNN이 빛을 발한다.




 - MLP의 경우 이미지를 단일 벡터로 변환하여 연산하기 때문에 공간적인 구조를 고려하지 않는다.

 - 다시말해 MLP에 이미지를 넘기면 원본 데이터가 2차원 데이터(배열 또는 행렬로 표현할 수 있는)라는 특성을 무시한다.




 - CNN은 반대로 다차원 데이터의 패턴을 가지고 연산을 수행한다.

 - 즉, 차원의 개념 또는 공간적인 개념을 유지한 채 학습을 진행할 수 있다.

 - CNN은 서로 가까이 있는 픽셀이 멀리 떨어진 픽셀보다 더 관련성이 크다는것을 고려한다.




 - 하지만 MLP와 CNN이 공통적으로 고려하는 중요한 개념이 있는데

 - 예를들어 다층레이어 퍼셉트론(multilayer perceptron)모델로 구성된 레이어들이 여러개가 존재하는 구조라는 점이다.

 - 또한 loss function, optimizer 와 같은 개념을 공유한다. 

 - 따라서 CNN을 위해 새로 모델의 구조를 설계한다거나 새로 함수를 정의할 필요가 없다.

 - 하지만 CNN은 모델에 삽입할 수 있는 hidden layer의 타입에서 MLP와 차이를 보인다.

 - 이러한 다른 타입의 hidden layer들에 대해 알아보고 이것들이 deep neural network에서 어떻게 작용하는지 알아보자.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
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
글 보관함