Q. 실제로 데이터들을 학습시킬 때, 일반화성능을 어떤 방식으로 평가하나요?

Q. 그런데, 갖고있는 데이터가 적다면, 일반화 성능을 어떤 방식으로 평가해야하나요?



안녕하세요~


이번글에서는 실제 DNN(Deep Neural Network)이 방대한양의 데이터를 어떻게 학습시키고 일반화를 평가하게 되는지 알아보도록 할거에요. 이번장은 복잡한 수식이 없기 때문에 쉽게 읽어내려가시면 될 것 같아요~


우리가 이미지를 학습시켜 이미내의 객체가 무엇인지 분류하는 DNN모델을 만든다고 했을 때, 방대한 양의 이미지 데이터들을 학습시키게 됩니다. 그런데 앞서 언급했듯이 아래 이미지들만 학습시키게 되면 결국 아래 이미지들에 대해서만 학습이 잘 될 가능성이 있기 때문에 일반화 성능을 놓칠 가능성이 커지게 되는 것이죠.


<사진1>


그렇다면 DNN모델이 위와 같은 이미지 데이터를 학습하는 중간중간에 일반화성능을 테스트 하려고 한다면 어떻게 하는게 좋을까요?


정답은 '모든 데이터를 학습데이터(training data)를 쓰지 않는다'가 되겠습니다. 좀 더 쉽게 설명하자면, 위에 있는 이미지 데이터들을 일부분은 학습데이터로 일부분은 validation(모델의 유효성 검사) 데이터 (DNN학습 중 일반화 성능을 중간중간 점검하기 위한)로 구성하는 것입니다. 또한 test data set이 있는데, validation dataset 경우는 모델의 overfitting을 막기 위해 모델 중간중간 점검을 하기 위해 사용되고, DNN이 validation 결과가 좋다고 판단했을 때, 실제로 test를 하여 performance를 알아보는 목적으로 사용되는 것이 test dataset입니다.



      


<사진2>                                                               <사진3>



요약하자면 아래와 같습니다.


Training dataset+validation dataset -> DNN 모델 학습 -> validation 결과가 좋게 나왔다면 -> DNN 모델 학습 종료 -> 상품 출시 전, 다른 test dataset으로 최종 성능평가



그런데 실제로 현업에서 DNN 모델을 적용하려고 할 때, 모아둔 데이터 양이 굉장히 적은 경우가 많습니다. 예를들어, 1000개의 데이터를 갖고 있다면 600(60%)개는 training dataset, 200(20%)개는 validation set, 마지막 200(20%)개는 test set으로 사용해도 괜찮을거에요. 그런데, 갖고 있는 데이터가 100개 밖에 없다고 한다면 어떻게 될까요? 100개를 모두 training dataset으로 써도 모자랄판에 그중에 40개를 validation set과 test set으로 할당해주게되면 학습이 제대로 될까요?


또한, 데이터가 적은 경우에는 아래와 같이 데이터셋을 구성해야하는데, 이런 경우에는 train, validation dataset이 너무 적다보니, validation하는 dataset에 overfitting이 일어날 가능성이 있게됩니다.


<사진4>


이러한 문제를 해결하고자 적은 양의 데이터를 갖고 있을 때 학습시키는 방법에 대해 논의가 되어왔답니다.




<1. (K-fold) Cross validation>



우리가 갖고 있는 데이터가 충분하지 않다면 아래와 같이 Dataset을 k개의 subset으로 나누고, 첫 번째 학습할 때는 첫 번째 subset으로 validation을 평가하고, k 번째 학습할 때는 k 번째 subset으로 validation을 평가하는 방법입니다.


<사진5>


이렇게 각기 다른 K번의 validation이 끝나면, 각 validation 과정에서 얻은 accuracy들의 평균을 내어 최종적으로 모델의 accuracy(performance)를 평가하게 됩니다.



이외에도 많은 통계적 방식을 활용하여 데이터셋을 구성하고 validation하는 방법들이 나오고 있는데요. 더 많은 방법들을 보고싶으시다면 아래사이트를 참고해주세요~ 잘 설명해 놓으셨더라구요!


https://m.blog.naver.com/PostView.nhn?blogId=ckdgus1433&logNo=221599517834&categoryNo=11&proxyReferer=https%3A%2F%2Fwww.google.com%2F






이번장에서는 실제로 데이터셋을 어떻게 구성하여 일반화성능을 평가하는지 알아보았어요. 다음장에서는 optimizer라는 개념을 배워보도록 할게요! 





[사진 래퍼런스]

사진1

http://hpkim0512.blogspot.com/2017/12/sdf.html

사진2,3

https://rfriend.tistory.com/188

사진4

https://m.blog.naver.com/PostView.nhn?blogId=ckdgus1433&logNo=221599517834&categoryNo=11&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진5

https://nonmeyet.tistory.com/entry/KFold-Cross-Validation%EA%B5%90%EC%B0%A8%EA%B2%80%EC%A6%9D-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EC%84%A4%EB%AA%85

+ Recent posts