티스토리 뷰

 이전에 만든 고양이 분별기를 사용하는 유저들이 10000개 정도의 이미지를 업로드했고, 당신이 각 이미지들이 고양이가 포함되어 있는지 아닌지를 일일이 구별했다고 해보자. 또한 인터넷으로부터 다운로드 받은 이미지가 200000개 정도 있다고 해보자. 이때 학습 데이터와 개발 데이터, 테스트 데이터는 어떻게 정의할 수 있을까?

 유저가 올린 10000개의 이미지가 실제로는 분별기가 잘 동작했는지를 나타내는 데이터의 분포를 나타내고 있으므로 아마 이 데이터들을 개발 데이터와 테스트 데이터로 활용할 것이다. 만약 데이터가 아주 많이 필요로 하는(data-hungry) 딥러닝 알고리즘을 학습시킨다면, 200000개의 인터넷 이미지들을 학습하는데 추가로 필요할 것이다. 이러면 학습 데이터와 개발/테스트 데이터는 각각 다른 확률 분포를 나타낼 것이다. 이게 동작에 얼마나 영향을 미칠까?

 위와 같이 전체 데이터를 학습/개발/테스트 데이터 별로 나누는 것 대신에 우리가 가진 210000개의 데이터를 가지고 랜덤하게 섞어서 각각 학습/개발/테스트 데이터로 나눌 수 있다. 이 경우, 모든 데이터가 같은 확률 분포를 나타낼 것이다. 하지만 본인은 이 방법은 추천하지 않는데, 그 이유는 지금 사용하고 있는 개발/테스트 데이터 중 95.2%(전체210000개 중 200000개[각주:1]) 가 인터넷에서 받은 데이터이고, 이 데이터는 실제로 분별기가 잘 동작했는지의 여부를 반영할 수 없다. 개발/테스트 데이터를 선정할 때 고려사항을 다시 언급해보면:

미래에 얻을 수 있고, 잘 동작하기를 원하는 데이터를 바탕으로 개발 데이터와 테스트 데이터를 선정하라

 머신러닝 분야의 대부분 학술적 경향은 보통 학습/개발/테스트 데이터가 같은 분포를 가지고 있는 것을 가정하고 있다.[각주:2] 초창기 머신러닝 시대에는 데이터가 매우 귀했다. 이 때는 같은 확률 분포를 가지는 하나의 데이터군만 활용할 수 있었다. 그래서 그 데이터를 학습/개발/테스트 데이터로 랜덤하게 나눴었고, 같은 출처로부터 나온 데이터는 조건을 충족했었다는 가정을 했었다.

 하지만 빅데이터 시대에 이르러서는, 이제 앞에서 소개한 인터넷에서 다운로드 받을 수 있는 고양이 이미지와 같이 거대한 학습 데이터를 가질 수 있다. 비록 학습 데이터가 개발/테스트 데이터와는 다른 분포를 가지고 있을지라도, 여전히 인터넷 데이터가 많은 정보를 제공하기 때문에 이를 학습에 활용할 수 있다.

 고양이 분별기 예제에서도, 10000개의 유저가 업로드한 이미지를 모두 개발/테스트 데이터로 사용하는 것 대신에, 5000개를 개발/테스트 데이터로 활용할 수 있다. 그리고 나머지 5000개의 유저 데이터를 학습 데이터군에 넣는 것이다. 이렇게 하면205000개의 학습 데이터는 200000개의 인터넷 이미지에다가 개발/테스트 데이터의 분포를 가지는 몇몇 데이터를 포함하게 된다. 이후 포스트를 통해 이 방법이 얼마나 유용한지에 대해 다뤄보겠다.

 두번째 예를 고려해보자. 만약 음성으로 컨트롤할 수 있는 모바일 지도/네비게이션상에서 거리 주소를 변환시켜주는 음성시스템을 만들고 있다고 가정해보자. 20000개 정도의 유저가 거리 이름을 말한 데이터가 있고, 거리 이름이 아닌 다른 주제에 대해서 말한 데이터 500000개의 데이터가 있다. 여기서 10000개의 거리 이름을 말한 데이터를 개발/테스트 데이터로 활용하고, 나머지 10000개에 500000개의 데이터를 합쳐서 학습 데이터로 활용할 수 있다.

 이제 이후에 나올 주제에서는 개발 데이터와 테스트 데이터가 같은 확률 분포를 띄는 것으로 가정하고 진행할 것이다. 하지만 중요한 것은 위와 같이 학습 데이터와 개발/테스트 데이터간에 서로 다른 분포를 가지고 있을 때에도 뭔가 개선할 만한 부분이 있다는 것이다.

< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 36. When you should train and test on different distributions을 번역한 내용입니다.>

  1. 아마 책이 오타인 것 같다. 책에는 인터넷으로부터 다운받은 이미지의 갯수를 205000개라고 표시되어 있다. [본문으로]
  2. 서로 다른 확률 분포를 가진 상태에서 train과 test를 수행하는 것에 대한 몇가지 논문들이 있다. 해당 논문들은 "domain adaptation", "transfer learning", "multitask learning" 이라는 키워드를 담고 있다. 하지만 아직까지는 이론과 실전 사이는 큰 차이가 존재한다. 만약 A 데이터를 가지고 학습시키고, 다른 종류의 데이터 B상에서 테스트를 해보면 알고리즘이 잘동작하는지 여부는 거의 운에 맡기게 된다.(여기서 운이란 연구자의 특정 주제에 대한 손으로 설계한 값이거나, 우리가 이해하지 못하는 별도의 요소들을 포함한다.) 이 말은 결국 다른 확률 분포를 띄는 데이터에서의 학습과 테스트를 진행하는 학술적인 연구가 뭔가 체계적으로 수행되기에는 어려운 점을 보여주는 것이다. [본문으로]
댓글