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개의 - 서로 다른 모델 아키텍쳐가 랜덤하게 생성
4) 강화학습
각 아키텍쳐의 validation accuracy를 측정하는 것이 가장 간단. 하지만 너무 costly함
➡️ cost를 줄이는 방법
1) 낮은 fidelity(정확도?) estimate
2) 학습 곡선 Extrapolation(추론)
3) 가중치 Inheritance by Network Morphism