[MLY 번역] 5. Your development and test sets

정주안
4 min readAug 28, 2018

--

[MLY 번역]

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

번역: 안현진, 정주안

우리의 고양이 사진 예시로 돌아가봅시다 : 여러분은 모바일 앱 서비스를 런칭하고, 사용자들은 다양한 사진을 여러분의 앱으로 업로드 할 것입니다. 그리고 여러분은 자동으로 고양이 사진을 찾기를 원합니다.

여러분은 다른 웹사이트들에서 올바른 데이터로써의 고양이 사진들과 잘못된 데이터로써 고양이가 아닌 사진들을 다운로드받는 것으로 거대한 트레이닝 셋을 얻습니다. 여러분의 팀은 그 데이터셋을 7:3의 비율로 학습 데이터 셋과 실험 데이터 셋으로 나눕니다. 이 데이터를 사용하여 트레이닝 데이터셋과 테스트 데이터셋에서 잘 작동하는 고양이 탐지기를 구축할 수 있을 것입니다.

그러나 여러분이 이 분류기를 모바일 어플에 적용시키면, 성능이 매우 나쁜 것을 알 수 있습니다.

어떻게 된걸까요?

여러분은 유저들이 업로드한 사진이 여러분의 트레이닝 데이터셋을 구성하고 있는 웹사이트의 이미지와는 다른 생김새를 가지고 있다는 것을 알았습니다: 유저는 휴대폰을 이용해 촬영한 사진을 업로드합니다. 휴대폰을 통해 촬영한 사진은 해상도가 낮고, 흐리며 조명이 약한 편입니다. 여러분의 알고리즘은 실제로 어플리케이션에 쓰이는 휴대폰 사진에 대해서 일반화(generalization)를 잘 하지 못합니다. 왜냐하면 학습에 사용되는 트레이닝 / 테스트 데이터셋이 웹사이트의 이미지를 사용하여 만들어졌기 때문입니다.

현대의 빅데이터 시대 이전에는, 머신러닝에서 임의의 7:3으로 전체 데이터를 나누어 트레이닝셋과 테스트셋을 구성하는 방식이 일반적인 것이었습니다. 이 방식은 종종 효과를 볼 수 있겠지만, 실제 애플리케이션이 입력받는 데이터(핸드폰으로 촬영한 조악한 사진들)와 우리가 활용가능한 학습 데이터(웹사이트에서 얻은 깔끔한 사진들)의 분포(모집단)가 서로 다른 환경에서는 썩 좋지 않은 방식입니다.

우리는 일반적으로 아래와 같이 정의합니다

  • 트레이닝셋(Training set) — 여러분의 학습 알고리즘을 실행할 때 트레이닝셋을 이용합니다.
  • 디벨롭셋(Development set) — 매개변수를 조정하고, 특징을 선택하고, 학습 알고리즘에 관한 다른 결정을 내립니다. Hold-out cross validation set 이라고도 불립니다.
  • 테스트셋(Test set) — 알고리즘의 성능을 평가하기 위해 사용합니다. 테스트셋은 어떤 학습 알고리즘이나 매개변수를 사용할지에 관해서 결정을 내릴 수 없습니다.

한번 디벨롭셋과 트레이닝셋을 정의 하면, 여러분은 알고리즘이 가장 잘 작동하도록 만들기 위해서, 서로 다른 학습 알고리즘 매개변수와 같은 여러 아이디어를 시도할 것입니다. 디벨롭셋과 테스트셋을 통해 학습알고리즘이 얼마나 잘 작동하는지 신속하게 확인할 수 있습니다.

다시말해, 디벨롭셋과 테스트셋의 목표는 잘 작동하는 머신러닝 시스템을 만들기 위한 가장 중요한 변경사항을 알려주는 것입니다.

따라서, 여러분은 다음을 수행해야 합니다

미래에 얻을 것으로 예상되는 데이터를 잘 반영할 수 있는 디벨롭셋 및 테스트셋을 선택하십시오.

고양이 사진 예제처럼, 애플리케이션에서 얻게되는 실제 데이터(휴대폰으로 촬영한 사진)가 본질적으로 트레이닝셋(웹페이지에서 다운로드 받은 사진)과 다를 경우, 테스트셋이 사용가능한 데이터의 30% 미만이 되도록 해야합니다.

여러분이 아직 모바일앱 서비스를 런칭하지 않은 경우, 사용자가 없으므로 구분해야할 것을 정확히 반영하는 데이터를 얻을 수 없을 것입니다. 때문에 친구에게 고양이 사진을 휴대폰으로 찍어 보내달라고 하는 방법 등을 통해 최대한 정확한 데이터를 얻을 수 있도록 해야합니다. 일단 앱이 런칭되면 실제 유저의 데이터를 얻어서 디벨롭셋과 트레이닝 셋을 업데이트 할 수 있을 것입니다.

만일 여러분이 얻고자 기대하는 데이터와 근접한(유사한) 데이터를 얻을 방법이 없다면, 웹사이트의 이미지를 사용할 수도 있을 것입니다. 그러나 이로 인해 일반화되지 않은 시스템으로 이어질 수 있음을 알고 있어야 합니다.

훌륭한 개발셋 및 테스트셋 개발에 얼마나 투자를 해야할지 결정하는 것이 필요합니다. 그러나 여러분의 트레이닝셋 분포가 테스트셋 분포와 같을것이라고 가정하지 마십시오. 무조건 현재 학습에 사용하는 데이터에 대한 퍼포먼스가 좋으면 장땡이라고 하지 말고, 실제로 어플리케이션이 이용될 환경을 반영할 수 있는 테스트셋을 구성하시기 바랍니다.

--

--