Ringkasan penyesuaian hyperparameter
Dalam machine learning, penyesuaian hyperparameter mengidentifikasi sekumpulan hyperparameter yang optimal untuk suatu algoritma pembelajaran. Hyperparameter adalah argumen model yang nilainya ditetapkan sebelum proses pembelajaran dimulai. Sebaliknya, nilai parameter lain seperti koefisien model linear dipelajari.
Penyesuaian hyperparameter memungkinkan Anda menghabiskan lebih sedikit waktu untuk melakukan iterasi hyperparameter secara manual dan memberi Anda lebih banyak waktu untuk fokus dalam menjelajahi insight dari data.
Anda dapat menentukan opsi penyesuaian hyperparameter untuk jenis model berikut:
- Regresi logistik dan linear
- K-means
- Faktorisasi matriks
- Autoencoder
- Hierarki yang ditingkatkan
- Hutan acak
- Deep neural network (DNN)
- Wide & Deep network
Untuk jenis model ini, penyesuaian hyperparameter akan diaktifkan saat Anda menentukan nilai untuk opsi NUM_TRIALS
dalam pernyataan CREATE MODEL
.
Untuk mencoba menjalankan penyesuaian hyperparameter pada model regresi linear, lihat Menggunakan penyesuaian hyperparameter BigQuery ML untuk meningkatkan performa model.
Model berikut juga mendukung penyesuaian hyperparameter, tetapi tidak mengizinkan Anda untuk menentukan nilai tertentu:
- Model AutoML Tables memiliki penyesuaian hyperparameter otomatis yang disematkan dalam pelatihan model secara default.
- Model ARIMA_PLUS memungkinkan Anda menetapkan argumen
AUTO_ARIMA
untuk melakukan penyesuaian hyperparameter menggunakan algoritma auto.ARIMA. Algoritma ini menjalankan penyesuaian hyperparameter untuk modul tren. Penyesuaian hyperparameter tidak didukung untuk seluruh pipeline pemodelan.
Untuk mengetahui informasi tentang pernyataan dan fungsi SQL yang didukung untuk setiap jenis model, lihat Perjalanan pengguna menyeluruh untuk setiap model.
Lokasi
Untuk mengetahui informasi tentang lokasi yang mendukung penyesuaian hyperparameter, lihat Lokasi BigQuery ML.
Menetapkan hyperparameter
Untuk menyesuaikan hyperparameter, Anda harus menentukan rentang nilai untuk hyperparameter yang dapat digunakan model untuk serangkaian uji coba. Anda dapat melakukannya dengan menggunakan salah satu kata kunci berikut saat menetapkan hyperparameter dalam pernyataan CREATE MODEL
, bukan memberikan satu nilai:
HPARAM_RANGE
: NilaiARRAY(FLOAT64)
dua elemen yang menentukan batas minimum dan maksimum ruang penelusuran dari nilai berkelanjutan untuk hyperparameter. Gunakan opsi ini untuk menentukan rentang nilai untuk hyperparameter, misalnyaLEARN_RATE = HPARAM_RANGE(0.0001, 1.0)
.HPARAM_CANDIDATES
: NilaiARRAY(STRUCT)
yang menentukan kumpulan nilai terpisah untuk hyperparameter. Gunakan opsi ini untuk menentukan sekumpulan nilai untuk hyperparameter, misalnyaOPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL'])
.
Hyperparameter dan tujuan
Tabel berikut mencantumkan hyperparameter dan tujuan yang didukung untuk setiap jenis model yang mendukung penyesuaian hyperparameter:
Jenis model | Tujuan hyperparameter | Hyperparameter | Rentang valid | Rentang default | Jenis skala |
---|---|---|---|---|---|
LINEAR_REG
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (default)
EXPLAINED_VARIANCE
|
L1_REG
L2_REG
|
(0, ∞]
(0, ∞]
|
(0, 10]
(0, 10]
|
LOG
LOG
|
LOGISTIC_REG
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (default)
|
L1_REG
L2_REG
|
(0, ∞]
(0, ∞]
|
(0, 10]
(0, 10]
|
LOG
LOG
|
KMEANS
|
DAVIES_BOULDIN_INDEX
|
NUM_CLUSTERS
|
[2, 100]
|
[2, 10]
|
LINEAR
|
MATRIX_ (eksplisit)
|
MEAN_SQUARED_ERROR
|
NUM_FACTORS
L2_REG
|
[2, 200]
(0, ∞)
|
[2, 20]
(0, 10]
|
LINEAR
LOG
|
MATRIX_ (implisit)
|
MEAN_AVERAGE_PRECISION (default)
MEAN_SQUARED_ERROR
NORMALIZED_DISCOUNTED_CUMULATIVE_GAIN
AVERAGE_RANK
|
NUM_FACTORS
L2_REG
WALS_ALPHA
|
[2, 200]
(0, ∞)
[0, ∞)
|
[2, 20]
(0, 10]
[0, 100]
|
LINEAR
LOG
LINEAR
|
AUTOENCODER
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR (default)
MEAN_SQUARED_LOG_ERROR
|
LEARN_RATE
BATCH_SIZE
L1_REG
L2_REG
L1_REG_ACTIVATION
DROPOUT
HIDDEN_UNITS
OPTIMIZER
ACTIVATION_FN
|
[0, 1]
(0, ∞)
(0, ∞)
(0, ∞)
(0, ∞)
[0, 1)
Array [1, ∞)
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[0, 1]
[16, 1024]
(0, 10]
(0, 10]
(0, 10]
[0, 0.8]
T/A { ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
T/A |
LOG
LOG
LOG
LOG
LOG
LINEAR
T/A T/A T/A |
DNN_CLASSIFIER
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (default)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
LEARN_RATE
OPTIMIZER
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
[0, 1)
Array [1, ∞)
[0, 1]
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
(0, ∞)
(0, ∞)
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[16, 1024]
[0, 0.8]
T/A [0, 1]
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
(0, 10]
(0, 10]
T/A |
LOG
LINEAR
T/A LINEAR
T/A LOG
LOG
T/A |
DNN_REGRESSOR
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (default)
EXPLAINED_VARIANCE
|
||||
DNN_LINEAR_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (default)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
[0, 1)
Array [1, ∞)
(0, ∞)
(0, ∞)
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[16, 1024]
[0, 0.8]
T/A (0, 10]
(0, 10]
T/A |
LOG
LINEAR
T/A LOG
LOG
T/A |
DNN_LINEAR_
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (default)
EXPLAINED_VARIANCE
|
||||
BOOSTED_TREE_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (default)
|
LEARN_RATE
L1_REG
L2_REG
DROPOUT
MAX_TREE_DEPTHMAX_TREE_DEPTH
SUBSAMPLE
MIN_SPLIT_LOSS
NUM_PARALLEL_TREE
MIN_TREE_CHILD_WEIGHT
COLSAMPLE_BYTREE
COLSAMPLE_BYLEVEL
COLSAMPLE_BYNODE
BOOSTER_TYPE
DART_NORMALIZE_TYPE
TREE_METHOD
|
[0, ∞)
(0, ∞)
(0, ∞)
[0, 1]
[1, 20]
(0, 1]
[0, ∞)
[1, ∞)
[0, ∞)
[0, 1]
[0, 1]
[0, 1]
{ GBTREE , DART }
{ TREE , FOREST }
{ AUTO , EXACT , APPROX , HIST }
|
[0, 1]
(0, 10]
(0, 10]
T/A [1, 10]
(0, 1]
T/A T/A T/A T/A T/A T/A T/A T/A T/A |
LINEAR
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
T/A T/A T/A |
BOOSTED_TREE_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (default)
EXPLAINED_VARIANCE
|
||||
RANDOM_FOREST_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (default)
|
L1_REG
L2_REG
MAX_TREE_DEPTH
SUBSAMPLE
MIN_SPLIT_LOSS
NUM_PARALLEL_TREE
MIN_TREE_CHILD_WEIGHT
COLSAMPLE_BYTREE
COLSAMPLE_BYLEVEL
COLSAMPLE_BYNODE
TREE_METHOD
|
(0, ∞)
(0, ∞)
[1, 20]
(0, 1)
[0, ∞)
[2, ∞)
[0, ∞)
[0, 1]
[0, 1]
[0, 1]
{ AUTO , EXACT , APPROX , HIST }
|
(0, 10]
(0, 10]
[1, 20]
(0, 1)
T/A [2, 200]
T/A T/A T/A T/A T/A |
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
T/A |
RANDOM_FOREST_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (default)
EXPLAINED_VARIANCE
|
Sebagian besar hyperparameter skala LOG
menggunakan batas bawah terbuka 0
. Anda masih dapat menetapkan 0
sebagai batas bawah dengan menggunakan kata kunci HPARAM_RANGE
untuk menetapkan rentang hyperparameter. Misalnya, dalam model pengklasifikasi hierarki yang ditingkatkan, Anda dapat menetapkan rentang untuk hyperparameter L1_REG
sebagai L1_REG = HPARAM_RANGE(0, 5)
. Nilai 0
akan dikonversi ke 1e-14
.
Hyperparameter bersyarat didukung. Misalnya, pada model regresor hierarki yang ditingkatkan, Anda hanya dapat menyesuaikan hyperparameter DART_NORMALIZE_TYPE
ketika nilai dari hyperparameter BOOSTER_TYPE
adalah DART
. Dalam hal ini, Anda menentukan ruang penelusuran dan kondisi akan ditangani secara otomatis, seperti ditunjukkan dalam contoh berikut:
BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])
Titik awal penelusuran
Jika Anda tidak menentukan ruang penelusuran untuk hyperparameter menggunakan HPARAM_RANGE
atau HPARAM_CANDIDATES
, penelusuran akan dimulai dari nilai default hyperparameter tersebut, seperti yang didokumentasikan dalam topik CREATE MODEL
untuk jenis model itu. Misalnya, jika Anda menjalankan penyesuaian hyperparameter untuk model hierarki yang ditingkatkan, dan Anda tidak menetapkan nilai untuk hyperparameter L1_REG
, maka pencarian akan dimulai dari 0
, yang merupakan nilai defaultnya.
Jika Anda menentukan ruang penelusuran untuk hyperparameter dengan menggunakan HPARAM_RANGE
atau HPARAM_CANDIDATES
, titik awal penelusuran bergantung pada apakah ruang penelusuran yang ditentukan mencakup nilai default untuk hyperparameter tersebut, seperti yang didokumentasikan dalam topik CREATE MODEL
untuk jenis model tersebut:
- Jika rentang yang ditentukan berisi nilai default, di situlah penelusuran dimulai. Misalnya, jika Anda menjalankan penyesuaian hyperparameter untuk model faktorisasi matriks implisit, dan Anda menentukan nilai
[20, 30, 40, 50]
untuk hyperparameterWALS_ALPHA
, lalu pencarian dimulai pada40
, nilai defaultnya. - Jika rentang yang ditentukan tidak berisi nilai default, penelusuran akan dimulai dari titik dalam rentang yang ditentukan, yang paling dekat dengan nilai default.
Misalnya, jika Anda menentukan nilai
[10, 20, 30]
untuk hyperparameterWALS_ALPHA
, penelusuran akan dimulai dari30
, yang merupakan nilai terdekat dengan nilai default40
.
Pembagian data
Saat Anda menentukan nilai untuk opsi NUM_TRIALS
, layanan akan mengidentifikasi bahwa Anda melakukan penyesuaian hyperparameter dan otomatis melakukan pembagian 3 arah pada data input untuk membaginya menjadi set pelatihan, evaluasi, dan pengujian.
Secara default, data input akan diacak, lalu dibagi 80% untuk pelatihan, 10% untuk evaluasi, dan 10% untuk pengujian.
Set pelatihan dan evaluasi digunakan di setiap pelatihan uji coba, sama seperti pada model yang tidak menggunakan penyesuaian hyperparameter. Saran hyperparameter uji coba dihitung berdasarkan metrik evaluasi model untuk jenis model tersebut. Di akhir setiap pelatihan uji coba, set pengujian digunakan untuk menguji uji coba dan mencatat metriknya dalam model. Hal ini akan memastikan objektivitas metrik evaluasi pelaporan akhir menggunakan data yang belum dianalisis oleh model. Data evaluasi digunakan untuk menghitung metrik perantara untuk saran hyperparameter, sedangkan data pengujian digunakan untuk menghitung metrik model objektif akhir.
Jika Anda hanya ingin menggunakan set pelatihan, tentukan NO_SPLIT
untuk opsi DATA_SPLIT_METHOD
dari pernyataan CREATE MODEL
.
Jika Anda hanya ingin menggunakan set pelatihan dan evaluasi, tentukan 0
untuk opsi DATA_SPLIT_TEST_FRACTION
dari pernyataan CREATE MODEL
. Jika set pengujian kosong, set evaluasi digunakan sebagai set pengujian untuk pelaporan metrik evaluasi akhir.
Metrik dari model yang dihasilkan dari tugas pelatihan normal dan metrik dari tugas pelatihan penyesuaian hyperparameter hanya dapat dibandingkan jika fraksi pemisahan data sama. Misalnya, model berikut ini dapat dibandingkan:
- Penyesuaian non-hyperparameter:
DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
- Penyesuaian hyperparameter:
DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0
Performa
Performa model saat menggunakan penyesuaian hyperparameter biasanya tidak lebih buruk dari performa model jika menggunakan ruang penelusuran default dan tidak menggunakan penyesuaian hyperparameter. Model yang menggunakan ruang penelusuran default dan tidak menggunakan penyesuaian hyperparameter selalu menggunakan hyperparameter default dalam uji coba pertama.
Guna mengonfirmasi peningkatan performa model yang disediakan oleh penyesuaian hyperparameter, bandingkan uji coba optimal untuk model penyesuaian hyperparameter dengan uji coba pertama untuk model penyesuaian non-hyperparameter.
Pemelajaran transfer
Pemelajaran transfer diaktifkan secara default saat Anda menetapkan opsi HPARAM_TUNING_ALGORITHM
dalam pernyataan CREATE MODEL
ke VIZIER_DEFAULT
. Penyesuaian hyperparameter untuk suatu model akan bermanfaat dengan mempelajari model yang telah disesuaikan sebelumnya jika memenuhi persyaratan berikut:
- Model ini memiliki jenis model yang sama dengan model yang disesuaikan sebelumnya.
- Model ini berada dalam project yang sama dengan model yang disesuaikan sebelumnya.
- Model ini menggunakan ruang penelusuran hyperparameter yang sama ATAU subset ruang penelusuran hyperparameter dari model yang disesuaikan sebelumnya. Subset menggunakan nama dan jenis hyperparameter yang sama, tetapi tidak harus memiliki rentang yang sama.
Misalnya,
(a:[0, 10])
dianggap sebagai subset(a:[-1, 1], b:[0, 1])
.
Pemelajaran transfer tidak mengharuskan data input sama.
Pemelajaran transfer membantu memecahkan masalah cold start saat sistem melakukan eksplorasi acak selama batch uji coba pertama. Pemelajaran transfer memberi sistem beberapa pengetahuan awal tentang hyperparameter dan tujuannya. Untuk terus meningkatkan kualitas model, selalu latih model penyesuaian hyperparameter yang baru dengan hyperparameter yang sama atau suatu subset hyperparameter.
Pemelajaran transfer membantu penyesuaian hyperparameter menyatu lebih cepat, bukan membantu submodel untuk menyatu.
Penanganan error
Penyesuaian hyperparameter menangani error dengan cara berikut:
Pembatalan: Jika tugas pelatihan dibatalkan saat berjalan, semua uji coba yang berhasil akan tetap dapat digunakan.
Input tidak valid: Jika input pengguna tidak valid, layanan akan menampilkan error pengguna.
Hyperparameter tidak valid: Jika hyperparameter tidak valid untuk suatu uji coba, uji coba akan dilewati dan ditandai sebagai
INFEASIBLE
dalam output dari fungsiML.TRIAL_INFO
.Error internal uji coba: Jika lebih dari 10% nilai
NUM_TRIALS
gagal karenaINTERNAL_ERROR
, tugas pelatihan akan berhenti dan menampilkan error pengguna.Jika kurang dari 10% nilai
NUM_TRIALS
gagal karenaINTERNAL_ERROR
, pelatihan akan dilanjutkan dengan uji coba gagal yang ditandai sebagaiFAILED
di output dari fungsiML.TRIAL_INFO
.
Fungsi penyaluran model
Anda dapat menggunakan model output dari penyesuaian hyperparameter dengan sejumlah fungsi penyaluran model yang ada. Untuk menggunakan fungsi ini, ikuti aturan berikut:
Jika fungsi mengambil data input, hanya hasil dari satu uji coba yang ditampilkan. Secara default, ini adalah uji coba yang optimal, tetapi Anda juga dapat memilih uji coba tertentu dengan menentukan
TRIAL_ID
sebagai argumen untuk fungsi yang diberikan. Anda bisa mendapatkanTRIAL_ID
dari output fungsiML.TRIAL_INFO
. Fungsi berikut ini didukung:Jika fungsi ini tidak mengambil data input, semua hasil uji coba akan ditampilkan, dan kolom output pertama adalah
TRIAL_ID
. Fungsi berikut didukung:
Output dari ML.FEATURE_INFO
tidak berubah, karena semua uji coba memiliki data input yang sama.
Metrik evaluasi dari ML.EVALUATE
dan ML.TRIAL_INFO
dapat berbeda karena cara data input dibagi. Secara default, ML.EVALUATE
dijalankan terhadap data pengujian, sedangkan ML.TRIAL_INFO
dijalankan pada data evaluasi. Untuk mengetahui informasi selengkapnya, lihat Pemisahan data.
Fungsi yang tidak didukung
Fungsi ML.TRAINING_INFO
menampilkan informasi untuk setiap iterasi, dan hasil iterasi tidak disimpan dalam model penyesuaian hyperparameter. Hasil uji coba justru yang disimpan. Anda dapat menggunakan fungsi ML.TRIAL_INFO
untuk mendapatkan informasi tentang hasil uji coba.
Ekspor model
Anda dapat mengekspor model yang dibuat dengan penyesuaian hyperparameter ke lokasi Cloud Storage menggunakan pernyataan EXPORT MODEL
.
Anda dapat mengekspor uji coba optimal default atau uji coba apa pun yang ditentukan.
Harga
Biaya pelatihan penyesuaian hyperparameter adalah jumlah biaya dari semua uji coba yang dijalankan. Harga uji coba konsisten dengan model harga BigQuery ML yang ada.
FAQ
Bagian ini memberikan jawaban atas beberapa pertanyaan umum (FAQ) tentang penyesuaian hyperparameter.
Berapa banyak uji coba yang saya perlukan untuk menyesuaikan model?
Sebaiknya gunakan minimal 10 uji coba untuk satu hyperparameter, sehingga total jumlah uji coba seharusnya minimal 10 * num_hyperparameters
. Jika Anda menggunakan ruang penelusuran default, lihat kolom Hyperparameters di tabel Hyperparameter dan tujuan untuk mengetahui jumlah hyperparameter yang disesuaikan secara default untuk jenis model tertentu.
Bagaimana jika saya tidak melihat peningkatan performa menggunakan penyesuaian hyperparameter?
Pastikan Anda mengikuti panduan dalam dokumen ini untuk mendapatkan perbandingan yang adil. Jika Anda tetap tidak melihat peningkatan performa, itu mungkin berarti hyperparameter default sudah bekerja dengan baik untuk Anda. Anda mungkin ingin fokus pada rekayasa fitur atau mencoba jenis model lainnya sebelum mencoba putaran penyesuaian hyperparameter lainnya.
Bagaimana jika saya ingin melanjutkan penyesuaian model?
Melatih model penyesuaian hyperparameter baru dengan ruang penelusuran yang sama. Pemelajaran transfer bawaan membantu melanjutkan penyesuaian berdasarkan model yang telah disesuaikan sebelumnya.
Apakah saya perlu melatih ulang model dengan semua data dan hyperparameter yang optimal?
Hal itu bergantung pada faktor-faktor berikut:
Model K-means sudah menggunakan semua data sebagai data pelatihan, sehingga tidak perlu melatih ulang model.
Untuk model faktorisasi matriks, Anda dapat melatih ulang model dengan hyperparameter yang dipilih dan semua data input untuk cakupan pengguna dan item yang lebih baik.
Untuk semua jenis model lainnya, pelatihan ulang biasanya tidak diperlukan. Layanan sudah menyimpan 80% data input untuk pelatihan selama pembagian data acak default. Anda masih dapat melatih ulang model dengan lebih banyak data pelatihan dan hyperparameter yang dipilih jika set data Anda kecil, tetapi menyisakan sedikit data evaluasi untuk penghentian awal dapat memperburuk overfitting.
Langkah berikutnya
Untuk mencoba menjalankan penyesuaian hyperparameter, lihat Menggunakan penyesuaian hyperparameter BigQuery ML untuk meningkatkan performa model.