[MLY 번역] 6.Your dev and test sets should come from the same distribution

정주안
3 min readAug 28, 2018

--

[MLY 번역]

Andrew ng의 Machine Learning Yearning을 번역한 글입니다. 중간중간 실험가능한 내용이 있을 경우 c++ 혹은 tensorflow를 이용한 실험과 함께 업로드할 예정입니다. 일주일에 2회, 회당 5개씩 업로드될 예정입니다.

번역: 안현진, 정주안

여러분이 미국, 중국, 인도, 나머지 총 네개의 지역으로부터 고양이 어플리케이션과 관련된 사진 데이터를 모았다고 해보자. 디벨롭셋과 테스트셋을 얻기 위해, 미국과 인도의 데이터를 디벨롭셋에 넣고, 중국과 나머지 데이터를 테스트셋에 넣었다고 하자. 다르게 말하면, 임의로 두 지역의 데이터를 골라 디벨롭셋에 넣고, 나머지 두 지역의 데이터를 테스트셋에 넣었다고 해도 괜찮다.

일단 이렇게 디벨롭셋과 테스트셋을 정의했다면 여러분의 팀은 디벨롭셋과 관련된 퍼포먼스를 개선하고자 집중할 것이다. 그러므로, 디벨롭셋의 개선은 곧 여러분의 가장 높은 우선순위인 ‘네개의 모든 지역의 데이터에 대한 퍼포먼스 성능의 개선’ 으로 귀결되어야 한다. 두 지역만을 대변해서는 안된다.

여기에 더해서, 디벨롭셋과 테스트셋의 분포도가 서로 다르면 발생하는 문제는 또 있다. 여러분의 팀이 디벨롭셋에서는 잘 작동되지만 테스트셋에는 그렇지않은 방향으로 개발할 수 있다. 나는 이런 결과들을 둘러싼 많은 실망과 불필요한 노력들을 봐왔다. 여러분은 이런 일들을 피할 수 있도록 해보자.

예를 들어, 디벨롭셋에는 잘 작동하지만 테스트셋에는 그렇지않은 시스템을 개발했다고 가정해보자. 디벨롭셋과 테스트셋의 모집단이 같다면 (분포가 같다면), 뭐가 잘못되었는지는 분명하게 드러난다. 디벨롭셋에 과적합(overfitting)된 것이다. 명확한 해결책은 더 많은 디벨롭셋 데이터를 모으는 것이다.

그러나 디벨롭셋과 테스트셋의 분포가 다르다면, 여러분의 선택지는 불분명해진다. 몇가지 것들이 잘못되어있을 수 있다.

  1. 디벨롭셋에 과적합이 발생한 경우
  2. 테스트셋이 디벨롭셋보다 더 어려운 데이터로 구성되어있어서 여러분의 알고리즘이 예상한 대로 적절히 작동하지만서도 더 이상의 눈에 띄는 개선은 불가능한 경우
  3. 테스트셋이 너무 어렵진 않지만, 디벨롭셋에 포함된 경우의 수를 포함하지 않고 있는 경우. 이 경우 디벨롭셋에는 잘 작동하던 것들도 테스트셋에서는 부적절하게 작동할 수 있다. 또한 디벨롭셋 퍼포먼스를 개선하려는 노력들이 무의미해질 것이다.

머신러닝 어플리케이션을 개발하는 것은 충분히 어려운 작업이다. 거기에 서로 다른 분포를 가지는 디벨롭셋과 테스트셋을 이용한다면 디벨롭셋 분포에 맞춘 성능 개선이 테스트셋 퍼포먼스도 개선해주리라는 목표가 더욱 멀어질 것이다. 이런 상황에서는 무엇이 잘못되었는 지, 잘 되고 있는지 밝히기가 더욱 어려워진다. 그러므로 어떤 작업에 초점을 두어야 할 지 결정하기도 어려워진다.

여러분이 써드 파티 벤치마크 시스템을 구성하려고 한다면, 아마 제작자들은 서로 다른 분포를 가지는 디벨롭셋과 테스트셋을 가지고 올 것이다. 이럴 때는 실력보다는 운이 여러분의 시스템 퍼포먼스를 결정할 것이다. 어느 한 분포를 가지는 데이터로 학습한 모델을 다른 데이터에 일반화(generalize)하는 학습 알고리즘을 개발하는 것은 중요한 연구 과제이다. 그러나 여러분의 목표가 연구하는 것이 아니라, 특정 머신러닝 어플리케이션을 위한 것이라면 디벨롭셋과 테스트셋의 분포를 통일하는 것을 추천한다. 이 작업이 여러분의 효율을 증가시켜줄 것이다.

--

--