Deep Learning Hypertuning Basic. Hyperparameter tuning adalah proses… | by Muhammad Fajar | Apr, 2024


DJ setup

Hyperparameter tuning adalah proses mencari dan menyesuaikan parameter-parameter yang tidak dapat dipelajari oleh model sendiri (hyperparameters) untuk meningkatkan performa model Machine Learning. Proses ini seperti mencari kunci yang tepat pada DJ. Pada Keras, seperti pada banyak framework Machine Learning lainnya, terdapat sejumlah hyperparameters yang mempengaruhi bagaimana model kita belajar dan menyesuaikan dengan data. Beberapa contoh hyperparameters termasuk tingkat kecepatan pembelajaran (learning rate), jumlah epo (epochs), ukuran batch, fungsi aktivasi, dan lainnya.

Saat Anda membangun model untuk hypertuning, selain arsitektur model, Anda juga perlu menentukan ruang pencarian hyperparameter (hyperparameter search space). Model yang Anda siapkan untuk hypertuning disebut hypermodel.

Ada dua pendekatan untuk mendefinisikan hypermodel:

1. Menggunakan Model Builder Function

Pendekatan ini melibatkan penulisan fungsi yang membangun model berdasarkan hyperparameter yang diberikan. Fungsi ini nantinya akan dipanggil oleh tuner untuk menghasilkan model dengan konfigurasi hyperparameter yang berbeda-beda selama proses pencarian. Pada artikel ini akah lebih berfokus pada pendekatan ini karna lebih sederhana dibanding hypermodel class.

2. Subclassing HyperModel Class

Keras Tuner menyediakan class HyperModel yang dapat Anda menjadikan subclass untuk membuat hypermodel sendiri. Dengan pendekatan ini, Anda memiliki kontrol lebih besar terhadap bagaimana hyperparameter terintegrasi dengan model Anda.

Pilihan Model Pre-defined

Keras Tuner juga menyediakan dua class HyperModel pre-defined yang bisa langsung digunakan, yaitu:

  • HyperXception: Cocok untuk aplikasi computer vision berbasis arsitektur Xception.
  • HyperResNet: Cocok untuk aplikasi computer vision berbasis arsitektur ResNet.

Turner

Hypertuning adalah proses mencari kombinasi hyperparameter terbaik untuk model machine learning. Hyperparameter adalah parameter yang tidak dipelajari selama training model, melainkan perlu diatur sebelum training.

Instansiasi Tuner adalah proses pembuatan objek tuner yang akan digunakan untuk melakukan hypertuning. Keras Tuner menyediakan beberapa pilihan tuner, di antaranya:

  • RandomSearch: Pencarian acak
  • Hyperband (digunakan dalam contoh ini)
  • BayesianOptimization: Optimasi Bayesian
  • Sklearn: Menggunakan library scikit-learn

Implementasi

Random Search

Metode ini secara acak memilih kombinasi hyperparameter dari ruang pencarian yang ditentukan. Setiap kombinasi hyperparameter kemudian digunakan untuk melatih model, dan performa model dievaluasi. Metode ini sederhana dan mudah diimplementasikan, namun tidak selalu menghasilkan kombinasi hyperparameter terbaik.

from tensorflow import keras as kt

# Definisi fungsi pembangun model (hypermodel)
def model_builder(hp):
# ... definisi model dengan hyperparameter hp

# Inisiasi tuner RandomSearch
tuner = kt.RandomSearch(model_builder,
objective='val_accuracy',
max_trials=50, # Jumlah iterasi pencarian acak
executions_per_trial=3) # Jumlah training per hyperparameter

# Jalankan pencarian hyperparameter
tuner.search(...)

Hyperband

Metode ini menggunakan alokasi sumber daya adaptif dan early stopping untuk menemukan kombinasi hyperparameter terbaik. Hyperband melatih sejumlah besar model dengan konfigurasi hyperparameter berbeda pada epoch awal. Model dengan performa terbaik kemudian dipilih untuk dilanjutkan ke tahap berikutnya dengan jumlah epoch yang lebih banyak. Proses ini diulang hingga mencapai jumlah epoch maksimum. Metode ini lebih efisien dibandingkan Random Search dan dapat menghasilkan kombinasi hyperparameter yang lebih optimal.

from tensorflow import keras as kt

# Definisi fungsi pembangun model (hypermodel)
def model_builder(hp):
# ... definisi model dengan hyperparameter hp

# Inisiasi tuner Hyperband
tuner = kt.Hyperband(model_builder,
objective='val_accuracy',
max_epochs=10,
factor=3,
directory='my_dir',
project_name='intro_to_kt')

# Jalankan pencarian hyperparameter
tuner.search(...)

Bayessian Optimization

Metode ini menggunakan model probabilistik untuk mempelajari hubungan antara hyperparameter dan performa model. Model ini kemudian digunakan untuk memprediksi kombinasi hyperparameter yang kemungkinan menghasilkan performa terbaik. Bayesian Optimization dapat menghasilkan kombinasi hyperparameter yang lebih optimal dibandingkan Random Search dan Hyperband, namun membutuhkan waktu dan sumber daya komputasi yang lebih banyak.

from tensorflow import keras as kt
from bayes_opt import BayesianOptimization

# Definisi fungsi pembangun model (hypermodel)
def model_builder(hp):
# ... definisi model dengan hyperparameter hp

# Wrapper untuk fungsi objective
def wrapper(hp):
model = model_builder(hp)
# ... training model dan dapatkan nilai objective

return objective_value

# Inisiasi tuner BayesianOptimization
tuner = kt.BayesianOptimization(model_builder,
objective='val_accuracy',
max_trials=50,
surrogate=BayesianOptimization(wrapper))

# Jalankan pencarian hyperparameter
tuner.search(...)

Sklearn

Metode ini menggunakan library scikit-learn untuk melakukan hypertuning. Sklearn menyediakan berbagai algoritma hypertuning, seperti RandomizedSearchCV dan GridSearchCV. Metode ini mudah digunakan dan kompatibel dengan model scikit-learn.

from tensorflow import keras as kt
from sklearn.model_selection import RandomizedSearchCV

# Definisi fungsi pembangun model (hypermodel)
def model_builder(hp):
# ... definisi model dengan hyperparameter hp

# Wrapper untuk model Keras
class KerasModelWrapper(object):
def __init__(self, model):
self.model = model

def fit(self, X, y):
# ... training model

def score(self, X, y):
# ... hitung nilai objective

# Inisiasi tuner Sklearn
tuner = kt.Sklearn(model_builder,
objective='val_accuracy',
search_space=RandomizedSearchCV(),
n_trials=50)

# Jalankan pencarian hyperparameter
tuner.search(...)

Menentukan jumlah epoch optimum

Menentukan epoch optimal untuk best hyperparameter sangat penting dalam hypertuning karena Epoch yang terlalu banyak dapat menyebabkan overfitting, di mana model terlalu fokus pada data training dan tidak dapat digeneralisasikan dengan baik pada data baru. Di sisi lain, epoch yang terlalu sedikit dapat menyebabkan underfitting, di mana model tidak belajar cukup banyak dari data training. Menentukan epoch optimal membantu mencapai keseimbangan antara overfitting dan underfitting, sehingga menghasilkan model yang berkinerja baik pada data baru.

Implementasi

# buat model dengan baseline 50 epoch dengan best_hps
model = tuner.hypermodel.build(best_hps)
history = model.fit(img_train, label_train, epochs=50, validation_split=0.2)

val_acc_per_epoch = history.history['val_accuracy']
best_epoch = val_acc_per_epoch.index(max(val_acc_per_epoch)) + 1

#train ulang dengan epoch optimum
hypermodel = tuner.hypermodel.build(best_hps)
hypermodel.fit(img_train, label_train, epochs=best_epoch, validation_split=0.2)

Tambahan : Implementasi Hypermodel class

from tensorflow import keras as kt

# Subclassing HyperModel class
class MyHyperModel(kt.HyperModel):
def __init__(self, hp):
# Mendefinisikan hyperparameter
self.num_layers = hp.Int('num_layers', 1, 4)
self.units_per_layer = hp.Int('units_per_layer', 16, 64)

def build(self, hp):
# Membangun model berdasarkan hyperparameter
model = kt.Sequential()
for _ in range(self.num_layers):
model.add(kt.layers.Dense(self.units_per_layer, activation='relu'))
model.add(kt.layers.Dense(1, activation='sigmoid'))
return model

# Inisiasi tuner
tuner = kt.Hyperband(MyHyperModel,
objective='val_accuracy',
max_epochs=10,
factor=3,
directory='my_dir',
project_name='intro_to_kt')

# Jalankan pencarian hyperparameter
tuner.search(...)

Kesimpulan

Hyperparameter tuning dalam Deep Learning merupakan proses kunci untuk mencapai performa optimal pada model. Dalam Keras, terdapat dua pendekatan untuk mendefinisikan hypermodel: menggunakan fungsi pembangun model atau subclassing HyperModel class. Keras Tuner menyediakan berbagai pilihan tuner seperti RandomSearch, Hyperband, BayesianOptimization, dan Sklearn untuk melaksanakan proses hypertuning. Hasilnya adalah model dengan kombinasi hyperparameters terbaik yang dapat memberikan kinerja optimal pada data uji. Menentukan jumlah epoch optimum juga penting untuk mencapai keseimbangan antara overfitting dan underfitting, sehingga menghasilkan model yang memiliki kemampuan generalisasi yang baik pada data baru. Dengan demikian, hypertuning menjadi langkah penting dalam mengoptimalkan performa model Deep Learning dalam aplikasi praktis.



Source link

Be the first to comment

Leave a Reply

Your email address will not be published.


*