사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다.
적절한 하이퍼파라미터 값 찾기
신경망에는 하이퍼파라미터가 다수 등장합니다.
여기서 말하는 하이퍼파라미터는, 예를 들어 각 층의 뉴런 수, 배치 크기, 매개변수 갱신 시의 학습률과 가중치 감소 등입니다.
이러한 하이퍼파라미터의 값을 적절히 설정하지 않으면 모델의 성능이 크게 떨어지기도 합니다.
하이퍼파라미터의 값은 매우 중요하지만 그 값을 결정하기까지는 일반적으로 많은 시행착오를 겪습니다.
하이퍼파라미터의 값을 최대한 효율적으로 탐색하는 방법을 알아보겠습니다.
검증 데이터 - Validation data
지금까지는 데이터셋을 훈련 데이터와 시험 데이터라는 두 가지로 분리해 이용했습니다.
훈련 데이터로는 학습을 하고, 시험 데이터로는 범용 성능을 평가 했습니다.
그렇게 해서 훈련 데이터에만 지나치게 적응되어 있지 않은지, 그리고 범용 성능은 어느 정도인지 같은 것을 평가할 수 있었습니다.
앞으로 하이퍼파라미터를 다양한 값으로 설정하고 검증할 텐데, 여기서 주의할 점은 하이퍼파라미터의 성능을 평가할 때는 시험 데이터를 사용해서 안됩니다. 매우 중요하지만 놓치기 쉬운 포인트입니다.
같은 성능 평가인데 하이퍼파라미터가 대상일 때는 시험 데이터를 사용해서는 안 되는 이유는 뭘까요?
그것은 시험 데이터를 사용하여 파이퍼파라미터를 조정하면 하이퍼파라미터 값이 시험 데이터에 오버피팅되기 때문입니다.
바꾸어 말하면, 하이퍼파라미터 값의 '좋음'을 시험데이터로 확인하게 되므로 하이퍼파라미터의 값이 시험 데이터에만 적합하도록 조정되어 버립니다.
그렇게 되면 다른 데이터에는 적응하지 못하니 범용 성능이 떨어지는 모델이 될 수 있습니다.
그래서 하이퍼파라미터를 조정할 때는 하이퍼파라미터 전용 확인 데이터가 필요합니다.
하이퍼파라미터 조정용 데이터를 일반적으로 검증 데이터라고 부릅니다.
하이퍼파라미터의 적절성을 평가하는 데이터입니다.
훈련 데이터는 매개변수(가중치와 편향)의 학습에 이용하고, 검증 데이터는 하이퍼파라미터의 성능을 평가하는 데 이용합니다. 시험 데이터는 범용 성능을 확인하기 위해서 마지막에 이용합니다.
훈련 데이터 : 매개변수 학습
검증 데이터 : 하이퍼파라미터 성능 평가
시험 데이터 : 신경망의 범용 성능 평가
데이터셋에 따라서는 훈련 데이터, 검증 데이터, 시험 데이터를 미리 분리해둔 것도 있습니다.
MNIST 데이터 셋은 훈련 데이터와 시험 데이터로만 분리해뒀습니다.
이런 경우엔 사용자가 직접 데이터를 분리해야 합니다.
MNIST 데이터셋에서 검증 데이터를 얻는 가장 간단한 방법은 훈련 데이터 중 20% 정도를 검증 데이터로 먼저 분리하는 것 입니다.
코드로는 다음과 같습니다.
(x_train, t_train), (x_test, t_test) = load_mnist()
# 훈련 데이터를 뒤섞는다.
x_train, t_train = shuffle_dataset(x_train, t_train)
# 20%를 검증 데이터로 분할
validation_rate = 0.20
validation_num = int(x_train.shape[0] * validation_rate)
x_val = x_train[:validation_num]
t_val = t_train[:validation_num]
x_train = x_train[validation_num:]
t_train = t_train[validation_num:]
이 코드는 훈련 데이터를 분리하기 전에 입력 데이터와 정답 레이블을 뒤섞습니다.
데이터 셋 안의 데이터가 치우쳐 있을지도 모르기 때문입니다.(예컨대 숫자 '0'에서 '9'까지 순서대로 정렬되어 있을 수 있습니다.)
다음 포스팅에서는 검증 데이터를 사용하여 하이퍼파라미터를 최적화하는 기법을 알아보겠습니다. 감사합니다.
'수학 > 딥러닝 이론' 카테고리의 다른 글
[딥러닝] 합성곱 신경망(CNN) - CNN의 전체 구조 (0) | 2020.10.04 |
---|---|
[딥러닝] 하이퍼파라미터를 최적화하는 방법과 구현하기 (0) | 2020.10.03 |
[딥러닝] 3. 오버피팅 억제법 - 드롭아웃 (0) | 2020.10.03 |
[딥러닝] 2. 오버피팅 억제법 - 가중치 감소 (0) | 2020.10.03 |
[딥러닝] 1. 오버피팅(과적합)이란? (0) | 2020.10.03 |