ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 나혼자 정리해보는 케라스 튜토리얼 (2-1. 데이터셋 이야기)
    공부(Archive)/ML DL 2020. 6. 10. 16:21

    이 글은 tykimos.github.io/lecture/에 있는 내용을 토대로 나름대로 혼자 공부하고 정리한 글입니다.

     

    DL을 이용하여 어떤 input을 토대로 output을 만들기 위해 model이 필요하다.

    이러한 model을 만드는 것을 model을 학습시킨다라고 표현하는 듯하다. Model을 학습시키기 위해 필요한 것이 바로 dataset이다. 어떤 dataset을 어떻게 학습시키느냐에 따라 그 결과가 상당히 달라지는 듯하다.

     

    위의 강좌에서는 dataset에 관한 내용을 수능을 치르기 위한 고등학생들로 예시를 들어 표현하고 있다.

     

    예시를 잘 이해하기 위해 대학수학능력시험을 치르기 위해 공부하던 때로 돌아가보자.

    다른 사람들은 어땠을지 잘 모르겠지만 나의 경우 기본서를 이용해 이론과 기본 문제들을 풀어보고, 문제집을 통해 조금 더 많은 응용 문제를 풀어본 뒤, 일정 기간마다 모의고사를 통해 현재 내 위치가 어느정도인지를 가늠하는 방법으로 공부를 했었다.

    여기서 모의고사가 바로 훈련을 위한 dataset이고 학생들은 dataset을 이용해 학습한 model, 작년 수능 문제시험을 위한 dataset, 올해 수능 문제실제 data로 표현한다. 

     

    문제지와 답지가 제공되는 모의고사의 경우 학생들이 문제를 풀어본 후, 답지와 자신의 답을 비교한다. 수능 공부를 하던 시절의 기억으로는 답을 비교하는 것뿐만 아니라 어떤 문제를 틀렸는지 확인하고 오답노트를 만들어 놓고 공부하여 다음 시험에는 이러한 유형의 문제를 틀리지 않겠다고 각오를 다졌었다. 아마 이러한 과정 때문에 훈련을 위한 dataset으로 표현했다라고 생각한다.

    학생을 model로 표현한 이유는 학생마다 공부하는 방식이 틀릴 것이고, 공부한 방법에 따라(사실 타고난 요소들도 있긴 하겠지만) 결과가 달라지기 때문이라 생각한다.

    작년 수능 문제는 시험을 위한 dataset으로 표현해놨는데 훈련한 model을 시험해본다고 표현했다. 가장 좋은 model을 고르는 방법은 실제 data인 올해 수능 문제를 이용해 시험을 보고 그 결과가 가장 좋은 model을 고르는 것이지만 올해 수능 문제를 미리 알아낼 방법이 없기 때문에 그나마 해볼만한 방법인 작년 수능 문제를 이용해 시험을 보는 것이다. 하지만 작년 수능 문제에서 좋은 성적을 받았다는 것이 올해 수능 문제에서 좋은 성적을 받는다는 것을 장담할 수 없다고 한다. 실제로도 이전년도에 수능을 잘 본 학생이 올해에도 작년과 똑같이 잘 볼 수 있다라고 장답하는 것은 어렵다고 생각한다.

     

    이러한 이유 때문인지 하나의 학습방법만을 이용하여 계속 학습하기 보다는, 스스로 학습상태를 확인하고 학습 방법을 바꾸거나 중단할 수 있는 방법에 관한 얘기가 나온다. 이곳에서 훈련 dataset과 시험 dataset 두 가지로 나누어져 있던 dataset에 검증 dataset이라는 개념이 추가된다. 검증 dataset은 학습을 할 때에는 이용하지 않고 학습된 결과물을 검증 dataset을 이용해 평가하고 이 평가에서 좋은 학습 방법을 선택하기 위해 필요한 dataset이다.

    이렇게 학습 방법을 결정하는 parameter를 하이퍼파라미터(hyperparameter)라고 표현하며, 이 값을 잘 조정하여 최적의 학습 방법을 찾아가는 것을 하이퍼파라미터 튜닝(hyperparameter tuning)이라고 한다.

     

    위의 방법을 이용하여 학습을 하게되면 자연스레 반복적인 학습이 일어날 것이다. 훈련 dataset을 이용하여 몇 번이나 반복하고 검증할지를 결정하는 요소를 에포크(epochs)라고 표현한다. Epochs가 증가하면 할수록 검증 dataset을 이용한 평가 결과도 좋아지겠지만, 실제 공부를 할때도 반복적으로 공부를 했을 때 어느정도까지는 빠르게 성적이 올라갈 수 있지만 일정 수준부터는 성적이 오르는게 더뎌지듯 일정 수준부터는 훈련 속도가 느려질 것이고, 심지어 어느 시점부터는 결과가 더 안좋아지기도 한다.

    여기서 학습을 통해 성능을 더 높일 가능성이 있는 상태를 언더피팅(underfitting), 에포크를 증가시켜 검증 dataset의 평가는 높아지지 않고 오히려 틀린 개수가 많아지는 상태를 오버피팅(overfitting)이라고 한다.

    따라서 epochs를 무한정 늘린다고 해서 항상 결과가 좋아지는 것이 아니기 때문에 적정 반복 횟수가 되었다면 학습을 조기종료(early stopping)할 필요가 있다. 검증 dataset을 이용하면 학습 중단 시점을 결정할 수 있다.

     

    이제 검증 dataset, underfitting과 overfitting, early stopping에 관해서 알게 되었으니 학습을 시작하여 model을 만들면 될 것 같지만 아직 문제가 하나 남아있다. 검증 dataset의 선택이다. 주어진 dataset에서 하나의 dataset만을 이용해 검증을 한다면 다양한 문제들이 생길 수 있다. 위의 강좌에서는 특정 모의고사만을 이용해 검증할 경우, 올해 수능과 해당 모의고사의 유형이 크게 다르거나, 다른 훈련용 모의고사와 다르거나와 같은 이유를 들고 있다. 이 때 사용할 수 있는 방법이 교차검증(cross-validation)이다.

    교차 검증은 5개의 dataset이 있다라고 가정했을 때, i번 dataset을 검증을 위한 dataset으로, 다른 나머지 dataset은 훈련을 위해 사용하는 방법을 말한다. 이후 다섯 번의 검증결과를 이용해 평균을 내고 이 평균값을 이용해 성능을 정의한다.

     

    강좌에서도 DL처럼 대량의 data를 사용하는 경우에는 잘 사용하지 않는다고 되어 있지만, DL을 공부하는 입장에선 대량의 data를 다뤄볼 일이 많지 않을테니 한번쯤은 적용해보는 것도 나쁘지 않으리라 생각한다.

    댓글

Designed by Tistory.