Deep learning_ 하이퍼파라미터 튜닝

sujineeda·2021년 3월 26일
0

🤯AI

목록 보기
4/7

신경망에 조정해야 하는 하이퍼파라미터는 많다

  • 층의 개수
  • 각 층의 뉴런 개수
  • 학습률
  • 배치크기

하이퍼파라미터 튜닝 방법

1) 다양한 하이퍼파라미터 조합 중 가장 좋은 점수를 내는 조합 선택

  • RandomizedSearchCV, GridSearchCV 사용
#케라스 모델을 사이킷런 추정기처럼 보이도록 바꿈
def build_model(n_hidden=1, n_neurons=30, learning_rate=0.01, input_shape=[8]):
    model = keras.models.Sequential()
    model.add(keras.layers.InputLayer(input_shape = input_shape))
    for layer in range(n_hidden):
        model.add(keras.layers.Dense(n_neurons, activation = 'relu'))
    model.add(keras.layers.Dense(1))
    optimizer = keras.optimizers.SGD(lr= learning_rate)
    model.compile(loss = 'mse', optimizer = optimizer)
    return model

#kerasregressor 클래스의 객체를 만듦 
#일반적인 사이킷런 회귀 추정기처럼 fit, score, predict method 사용 가능
keras_reg = keras.wrappers.scikit_leran.KerasRegressor(build_model)

#파라미터 탐색
params = {"n_hidden": [0,1,2,3], "n_neurons":np.arange(1,100),
	"learning_rate": scipy.stats.reciprocal(3e-4, 3e-2)} #reciprocal: continuous random variables

search = RandomizedSearchCV(keras_reg, params, n_iter = 10, cvv = 3)
search.fit(X_train, y_train, epochs = 100, validation_data, callbacks)
  • 탐색 지역이 좋다고 판명될 때 더 탐색을 수행하는 방법

Hidden layer 개수

이론적으로는 뉴런 수가 무한하다면 hidden layer 하나로 어떤 함수도 근사할 수 있다
다만, 심층 신경망이 얕은 신경망보다 파라미터 효율성이 좋음

  • 데이터가 계층구조를 가져야 심층 신경망에서 유리하다
  • 아래쪽 은닉층은 저수준에서 일반화 , 중간 은닉층은 저수준의 구조 연결, 가장 위쪽 은닉층과 출력층은 중간 수준 연결해 고수준으로
  • 모델이 계층 구조로 잘 이루어져있다면 일반화 능력 향상
  • 전이학습 : 저수준의 구조를 다른 모델로부터 가져와 고수준만 학습시켜 다른 데이터로 학습시킴

뉴런 개수

스트레치 팬츠 방식: 더 많은 층과 뉴런을 가진 모델을 선택하고 과대적합되지 않도록 조기종료 / 규제기법 사용하는 것이 간단하고 효과적

한 층의 뉴런 개수가 너무 적으면 입력에 있는 정보를 충분히 표현하지 못하고 소실 가능
나머지 층이 아무리 크고 강해도 소실된 정보는 다시 복원되지 않음
(3D이미지를 input 으로 가지는데 뉴런 두개면 일부 정보 잃음)

학습률

일반적으로 최적의 학습률 = 최대 학습률의 절반 정도

  • 최대 학습률 - 훈련 알고리즘이 발산하는 학습률
  • 최적의 학습률 찾는 방법
    • 매우 낮은 학습률로 시작해서 일정한 값을 곱하여 반복하여 늘림
    • 학습률에 대한 loss를 그래프로 그린다
    • 처음에는 loss가 줄어들면서 학습률이 커지면 loss가 다시 커짐
    • loss 가 다시 커지는 지점보다 조금 아래 : 최적의 학습률
      일반적으로 상승점보다 10배 낮은 지점

배치크기

  • 큰 배치를 사용하게 되면 일반화를 잘 못하여 불안정하게 훈련됨
    보통 2-32 정도의 배치 사이즈 권장

  • 학습률 예열을 하면 큰 배치 사용 가능
    큰 배치는 훈련 시간을 단축시킬 수 있다

  • 학습률 예열 : 작은 학습률로 훈련시키다가 점점 증가
    early over fitting 방지할 수 있다

    * 예를 들면 lr = p이면, 첫번째 batch에서 lr = p/n, 두번째 batch lr = 2p/n ... n번째 lr = p
profile
AD+AI Ph.D course

0개의 댓글