학습, 검증, 테스트 데이터
학습데이터 셋을 갖고 알고리즘을 학습시키고, 검증 데이터셋을 이용해 알고리즘의 *하이퍼파라미터를 튜닝한다. 알고리즘 학습이 완료되면 테스트 데이터셋을 이용해 알고리즘 성능을 측정한다.
하이퍼파라미터란 네트워크를 구성하는 레이어 수, 학습률 등...을 가리킴. 일반적으로 수동으로 변경됨
학습, 검증 및 테스트 분할
홀드아웃 데이터셋(holdout dataset)
- 학습 데이터셋으로만 알고리즘을 학습
- 검증 데이터셋으로 알고리즘의 하이퍼파라미터를 튜닝
- 기대 성능이 달성될때까지 1, 2번을 반복적으로 수행
- 알고리즘과 하이퍼파라미터를 고정하고, 테스트 데이터셋으로 성능을 평가
데이터를 두 부분으로 분할하고 학습할 경우 알고리즘에 정보유출이 발생할 수 있다. 또한 알고리즘 학습과 테스트에 같은 데이터셋을 사용하면 알고리즘의 일반화를 보장할 수 없다. 따라서 데이터를 두 부분으로 분할하는 방식은 사용하면 안된다.
데이터를 훈련데이터셋과 검증 데이터셋으로 분할하고 홀드아웃 데이터셋을 적용하는 데에는 다음과 같은 세 가지 홀드아웃 전략이 있다.
- 단순 홀드아웃 검증
- K-겹 검증
- 반복 K-겹 검증
단순 홀드아웃 검증
전체 데이터셋의 일정 비율을 테스트 데이터셋으로 나눈다. 이 비율은 머신러닝 문제 유형에 따라 달라질 수 있음.
학습 데이터의 20~30%를 학습에서 배제하면, 학습 데이터가 부족해, 결과적으로 알고리즘 학습이 어려워지는 문제가 발생할 수 있음.
따라서 데이터의 가용한 크기를 고려해 비율을 조정해야 한다. 테스트 데이터셋을 나눈 후에는 알고리즘과 하이퍼파라미터가 고정될 때 까지 테스트 데이터셋을 알고리즘과 격리해야 한다.
문제에 대한 최적의 하이퍼파라미터를 찾기 위해서는 별도의 검증 데이터셋도 확보해야한다.
단순 홀드아웃 검증 데이터셋 만들기
구현코드는 다음과 같다. 단순 홀드아웃 검증은 주로 분석 초기에 사용된다.
files = glob(os.path.join(path,'*/*.jpg'))
num_images = len(files)
shuffle = np.random.permutation(num_images)
#80%를 학습 데이터, 20%를 검증 데이터로 할당
train = files[shuffle[:int(num_images*0.8)]]
valid = files[shuffle[int(num_images*0.8):]]
하지만 위 방법을 사용하면 한 가지 문제가 발생한다. 작은 데이터셋에서 만들어진 검증 데이터셋 또는 테스트 데이터셋은 현재 데이터를 통계적으로 대표하지 않을 수도 있다. 데이터를 분할하기 전에 데이터를 뒤섞어 이 문제를 간단히 해결할 수도 있다. 그러나 알고리즘으로부터 얻은 결과가 일관성이 없다면, 데이터 부족으로 문제를 극복하고 통계적인 대표 데이터를 확보하기 위해서는 더 고급 기법을 사용해야한다.
이런 고급 기법에는 "K-겹 검증" 또는 "순환 K-겹 검증"기법이 있다.
K-겹 검증
데이터셋의 일부를 테스트셋으로 나눠 떼어내고, 나머지 데이터를 K개로 균등하게 분할한다. 여기서 K는 자연수로, 2에서 10까지의 숫자가 될 수 있다. K개로 분할한 각 블록을 "겹(폴드)"라고 한다. 임의의 주어진 반복에서, 1개의 겹을 선택해 검증으로 사용하고, 나머지 겹으로 학습을 진행한다. K번의 학습에서 얻은 모든 점수의 평균을 최종 점수로 한다.
위 사진에서 K는 3이다. 데이터를 3개의 겹으로 나눈다.
데이터셋에 K-겹 검증 데이터셋 기법을 적용할 때 주의해야 할 점은 K-겹 검증을 사용하는 알고리즘은 여러 조각으로 나뉜 데이터를 여러번 학습하기 때문에 연산량이 상당히 많아진다는 것이다. 학습 시간이 며칠이 걸리고 연산량이 상당히 높은 컴퓨터 비전 알고리즘에 이 방식을 적용할 경우, 학습 비용이 엄청나게 커질 수 있다. 따라서 이 기법은 신중하게 사용해야 한다.
'About > Pytorch' 카테고리의 다른 글
[Pytorch] Inception v3를 이용한 동물 이미지 분류 학습하기(하이퍼 파라미터 및 Optimizer 비교) (2) | 2021.04.10 |
---|---|
[Pytorch] Linear Regression - 파이토치를 이용한 선형회귀분석 (3) | 2021.01.23 |