
Hyperparameter tuning은 Neural Architecture Search와 많은 유사점이 있음
Neural Architecture Search(NAS)?
- 신경망 설계를 자동화하는 기술
- 이를 통해 최적의 아키텍쳐를 찾는 것이 목표
- AutoML을 사용해서 huge space에 대한 검색을 자동화할 수 있음
1) 학습 가능한 model parameters
2) Hyperparameters
import tensorflow as tf
from tensorflow import keras
# ...(중략)...
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  # 왜 Dense는 512이고, Dropout는 0.2 인가? 찾아봅시다
  tf.keras.layers.Dense(512, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)def model_builder(hp):
  model = keras.Sequential()
  model.add(keras.layers.Flatten(input_shape=(28, 28)))
  # 16 부터 512까지 16 step으로 돌면서 최적 찾아보기
  # 이거로 대체함 - tuned by Keras tuner
  hp_units = hp.Int('units', min_value=16, max_value=512, step=16)
  model.add(keras.layers.Dense(units=hp_units, activation='relu'))
  
  model.add(tf.keras.layers.Dropout(0.2))
  model.add(keras.layers.Dense(10))
  model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])
  
  return model# Hypterband 전략을 사용해서 parameter 선택
# 다른 전략 : RandomSearch, BaysianOptimization, Sklearn
tuner = kt.Hyperband(model_builder,
                     max_epochs=10,
                     objective='val_accuracy',
                     factor=3,
                     directory='my_dir',
                     project_name='intro_to_kt')
# early stopping
stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)
tuner.search(x_train,
             y_train,
             epochs=50,
             validation_split=0.2,
             callbacks = [stop_early])
  Trial 24 Complete [00h 00m 22s]
val_accuracy: 0.3265833258628845
Best val_accuracy So Far: 0.5167499780654907
Total elapsed time: 00h 05m 05s
Search: Running Trial #25
Hyperparameter    |Value             |Best Value So Far
units             |192               |48
tuner/epochs      |10                |2
tuner/initial_e...|4                 |0
tuner/bracket     |1                 |2
tuner/round       |1                 |0
tuner/trial_id    |a2edc917bda476c...|None

1) Macro

2) Micro

1) Grid Search & Random Search
2) Bayesian Optimization
3) Evolutionary Methods
 n개의 - 서로 다른 모델 아키텍쳐가 랜덤하게 생성
 n개의 - 서로 다른 모델 아키텍쳐가 랜덤하게 생성 
4) 강화학습


각 아키텍쳐의 validation accuracy를 측정하는 것이 가장 간단. 하지만 너무 costly함

➡️ cost를 줄이는 방법
1) 낮은 fidelity(정확도?) estimate
2) 학습 곡선 Extrapolation(추론)

3) 가중치 Inheritance by Network Morphism


