본문 바로가기
C.W.K.
Stream
Lesson 01 of 07 · published

하이퍼파라미터 탐색

~8 min · advanced

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

이제 튜토리얼을 넘어 실제 배포를 좌우하는 패턴을 다뤄. KerasTuner 하이퍼파라미터 탐색, FP16/BF16 혼합 정밀도로 2~3배 가속, 다중 GPU 분산 전략, 학습 후 양자화, 지식 증류, 학습이 조용히 실패할 때의 디버깅 절차를 배운다.

손으로 설정을 하나씩 바꾸는 일을 멈춰

학습률과 레이어 너비를 감으로 바꾸며 반복하면 성능이 오를 수 있지만, 직감을 탐색기로 삼은 편향된 맹목 탐색이야. KerasTuner에서는 build_model(hp) 안에 탐색 공간을 한 번 선언하면 여러 시도를 실행하고 점수를 기록해 가장 좋은 모델을 돌려줘.

탐색 공간의 구조

하이퍼파라미터를 고정 상수가 아니라 표집할 인자로 바꾸는 것이 핵심이야. hp.Int('units', 32, 512, step=32)는 레이어 너비를 조정 가능한 축으로 만들고, hp.Float('lr', 1e-4, 1e-2, sampling='log')는 학습률을 탐색하게 해. 학습률은 로그 척도에서 움직이므로 sampling='log'로 자릿수마다 고르게 시도해야 범위 위쪽에 표본이 몰리지 않아.

탐색 전략 고르기

  • RandomSearch — 균일하게 표집하는 정직한 기준선이며 작은 공간에서는 의외로 강해.
  • BayesianOptimization — 지난 시도에 가우시안 프로세스 대리 모델을 맞춰 개선 가능성이 큰 곳을 표집해. 효율적이지만 성능 지형이 비교적 매끄럽다고 가정해.
  • Hyperband — 여러 시도를 적은 비용으로 시작하고 약한 후보를 일찍 중단해 남은 예산을 유망한 후보에 집중해. 깊은 학습 설정 대부분이 좋지 않다는 사실을 빠르게 활용하므로 흔히 기본 선택이 돼.

Code

탐색 공간을 선언하고 BayesianOptimization 실행하기·python
import keras_tuner

def build_model(hp):
    model = keras.Sequential([
        keras.Input(shape=(784,)),
        layers.Dense(
            units=hp.Int("units", min_value=32, max_value=512, step=32),
            activation="relu",
        ),
        layers.Dropout(hp.Float("dropout", 0.0, 0.5, step=0.1)),
        layers.Dense(10, activation="softmax"),
    ])
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Float("lr", 1e-4, 1e-2, sampling="log")
        ),
        loss="sparse_categorical_crossentropy",
        metrics=["accuracy"],
    )
    return model

# Search strategies
tuner = keras_tuner.BayesianOptimization(
    build_model, objective="val_accuracy", max_trials=20,
)
tuner.search(x_train, y_train, epochs=10, validation_split=0.2)
best_model = tuner.get_best_models()[0]

External links

Exercise

MNIST용 작은 MLP의 레이어 수 1~4, 레이어당 유닛 32~256, 학습률 1e-4~1e-2를 탐색해. max_epochs=20인 Hyperband를 사용하고 가장 좋은 모델을 손으로 조정한 기준선과 비교해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.