Deep Learning/밑바닥부터 시작하는 딥러닝

DL - #6, 적절한 하이퍼 파라미터 설정

KimTory 2022. 2. 15. 00:11

▶ 하이퍼파라미터 (HyperParameter)

  • 모델 파라미터 : 머신러닝 모델이 학습하는 파라미터
  • 파라미터(매개변수) : 학습 과정에서 생성되는 변수
  • 하이퍼파라미터 : 머신러닝 모델이 학습할 수 없어서 사용자가 지정해야만 하는 파라미터
    → 각 층의 뉴런 수, 배치 사이즈, 매개변수 갱신 시의 학습률과 가중치 감소 등..
  • 가장 우수한 성능을 보이는 모델의 하이퍼파라미터를 선정하기 위해 그리드 서치(Grid Search) 사용

▶ 검증 Data Set

  • 데이터 세트를 훈련 - 검증 - 테스트 세트로 나누어 훈련 또는 테스트 세트에 과적합한 모델이 될
    가능성능 낮출 수 있음 (60 / 20 / 20%)
  • 하이퍼파라미터의 성능을 평가 할 때, 시험 데이터 셋을 이용하면 안된다.
    → 시험 데이터로 하이퍼파라미터 튜닝 시, 값이 시험 데이터에 오버피팅 되기 때문
  • 하이퍼파라미터 전용 성능 검증 데이터 즉, 하이퍼파라미터 조정용 데이터 Set을 검증 데이터라고 부른다.
    ⓐ 훈련 데이터 : 매개변수 학습
    ⓑ 검증 데이터 : 하이퍼파라미터 성능 평가
    ⓒ 시험 데이터 : 신경망의 범용 성능 평가

https://velog.io/@arittung/DeepLearningStudyDay10 참고

(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)

x_train, t_train = shuffle_dataset(x_train, t_train)

val_rate = 0.2
val_num = int(x_train.shape[0] * val_rate)
print(val_num)
# 검증 Data Set x_train shape 60000 중 20% 추출하여 12,000개 검증 Data Set 선정



def shuffle_dataset(x, t):
    """데이터셋을 뒤섞는다.

    ----------
    x : 훈련 데이터
    t : 정답 레이블
    Returns
    -------
    x, t : 뒤섞은 훈련 데이터와 정답 레이블
    """
    permutation = np.random.permutation(x.shape[0])
    x = x[permutation,:] if x.ndim == 2 else x[permutation,:,:,:]
    t = t[permutation]

    return x, t

검증 세트 사용 방법

  • 학습 세트를 통해 학습된 모델을 바로 테스트 세트로 결과를 얻는 것이 아닌, 검증 세트를 사용하여 학습 세트의 결과를 평가함.
  • 검증 세트의 결과에 따라 모델을 조정하여 가장 우수한 결과를 보이는 모델을 선택한 후, 이 모델을 테스트 세트를
    사용하여 다시 평가함.

                           

 

▶ 교차 검증 (Cross Validation)

 

  • 검증 세트를 사용하면 test set에 과적합(overfitting)되어 다른 실제 데이터를 가지고 예측 수행시 결과가 엉망임.
  • 고정된 test set을 가지고 모델의 성능확인 후 파라미터 수정하는 과정을 반복하기에 결국 test set에만 잘 동작하는 모델이 되는 것.
  • 고정된 test set == test set이 데이터 중 일부분으로 고정되어 있음.
    • 이를 해결하고자 하는 것이 교차 검증(cross validation)
      • 교차 검증 사용 시 안정적인 검증 점수를 얻을 수 있고, 훈련에 더 많은 데이터 사용가능함.
    • 교차 검증은 검증 세트를 떼어 내어 평가하는 과정을 여러 번 반복함.
    • 전체 데이터 셋을 k개의 subset으로 나누고 k번의 평가 실행
      • 이 때 test set을 중복 없이 바꾸어가면서 평가를 진행함.
    • 모델의 각 평가 점수를 평균하여 최종 검증 점수를 얻음.
    • k-폴드 교차 검증 (k-fold cross validation)
    • 훈련 세트를 k 부분으로 나눠서 교차 검증을 수행하는 것.

          


▶ 하이퍼파라미터 최적화

  • 하이퍼파라미터를 최적화 할 때의 핵심은 하이퍼파라미터의 최적 값이 존재하는 범위를 줄여가면서 대략적인
    범위를 설정하고 그 범위에서 무작위로 하이퍼파라미터 값을 골라낸 후, 그 값 기준으로 정확도를 평가
  • 위 작업을 반복하여 하이퍼파라미터의 최적 값의 범위를 좁혀 가는 것
  • 신경망 하이퍼파라미터 최적화에서는 그리드 서치같은 규칙적인 탐색보다 무작위로 샘플링 하는 편이 더 좋음
    → 실제 0.001 ~ 1,000 사이와 같이 10의 거듭제곤 단위로 범위를 지정하며 이를 "로그  스케일"이라 한다.

▶ 최적화 순서
①단계, 하이퍼파라미터 값의 범위를 설정

②단계, 설정된 범위에서 하이퍼파라미터의 값을 무작위로 추출

③단계, 2단계에서 샘플링한 하이퍼파라미터 값을 사용하여 학습하고, 검증 데이터로 정확도를 평가 (에폭 작게 설정)

④단계, 2-3단계를 지정 횟수만큼 반복하여, 정확도의 결과를 보고 하이퍼파라미터의 범위를 좁힙니다.

 

 

 

# 정리

1. 매개변수 갱신 방법에는 확률적 경사 하강법(SGD)외 모멘텀, AdaGrad, Adam 등이 있다.

2. 가중치의 초깃값으로는 "Xavier 초깃값과 He 초깃값" 이 효과적이다

3. 배치 정규화를 이용하면 학습 속도가 향상되고, 가중치 초깃값에 대한 의존도가 낮다.

4. 오버피팅을 억제하는 정규화 기술은 가중치 감소와 드롭아웃이 있다.

5. 하이퍼파라미터 값 탐색은 최적 값이 존재할 법한 범위를 점차 좁히면서 하는 것이 효과적이다.