Rumah > Artikel > Peranti teknologi > Perbandingan pengoptimuman hiperparameter: carian grid, carian rawak dan pengoptimuman Bayesian
Artikel ini akan memperkenalkan secara terperinci kaedah pengoptimuman hiperparameter yang paling biasa digunakan untuk meningkatkan hasil pembelajaran mesin.
Penterjemah |. Zhu Xianzhong
Pengulas |. orang fikir ialah Penyelesaiannya ialah menambah lebih banyak data latihan. Data tambahan selalunya membantu (kecuali dalam keadaan tertentu), tetapi menjana data berkualiti tinggi boleh menjadi sangat mahal. Pengoptimuman hiperparameter menjimatkan masa dan sumber kami dengan menggunakan data sedia ada untuk mendapatkan prestasi model terbaik.
Dalam artikel ini, kami akan memperkenalkan secara konseptual tiga kaedah pengoptimuman hiperparameter yang paling biasa, iaitu carian grid, carian rawak dan pengoptimuman Bayesian, dan kemudian melaksanakannya satu demi satu.
Saya akan menyediakan jadual perbandingan peringkat tinggi pada permulaan artikel untuk rujukan pembaca, dan kemudian meneroka, menerangkan dan melaksanakan setiap item dalam jadual perbandingan sepanjang artikel yang lain.
Jadual 1: Perbandingan kaedah pengoptimuman hiperparameter 1 Algoritma carian grid
Carian grid mungkin super Paling mudah dan kaedah pengoptimuman parameter yang paling intuitif, yang melibatkan carian menyeluruh untuk gabungan hiperparameter terbaik dalam ruang carian yang ditentukan. "Ruang carian" dalam konteks ini ialah keseluruhan hiperparameter dan nilai hiperparameter tersebut dipertimbangkan semasa pengoptimuman. Mari kita memahami carian grid dengan lebih baik dengan contoh.
parameter_1 = [1 , 2, 3]
parameter_2 = [a, b, c]parameter_3 = [x, y, z]
Kami tidak tahu gabungan parameter ini yang akan mengoptimumkan fungsi Pengoptimuman kami daripada model (iaitu menyediakan output terbaik untuk model pembelajaran mesin kami). Dalam carian grid, kami hanya mencuba setiap gabungan parameter ini, mengukur prestasi model untuk setiap parameter dan hanya memilih gabungan yang menghasilkan prestasi terbaik! Dalam contoh ini, parameter 1 boleh mengambil 3 nilai (iaitu 1, 2, atau 3), parameter 2 boleh mengambil 3 nilai (iaitu a, b, dan c), dan parameter 3 boleh mengambil 3 nilai (iaitu x, y, dan z). Dalam erti kata lain, terdapat 3*3*3=27 gabungan kesemuanya. Carian grid dalam contoh ini akan melibatkan 27 pusingan menilai prestasi model pembelajaran mesin untuk mencari kombinasi berprestasi terbaik.
Seperti yang anda lihat, kaedah ini sangat mudah (serupa dengan tugas percubaan dan ralat), tetapi ia juga mempunyai beberapa had. Mari kita ringkaskan kelebihan dan kekurangan kaedah ini.
Antaranya, kelebihannya termasuklah:
Mudah difahami dan dilaksanakan Mudah disejajarkan ruang_carian = {'n_estimators': [10, 100, 500, 1000],
'max_depth' : [2, 10, 25, 50, 100],'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 5, 10]}
Ruang carian di atas terdiri daripada gabungan jumlah 4*5*3*3=180 hiperparameter. Kami akan menggunakan carian grid untuk mencari gabungan yang mengoptimumkan fungsi objektif seperti berikut:
# Import perpustakaan
daripada sklearn.model_selection import GridSearchCV
daripada sklearn.datasets import load_iris
daripada sklearn.ensemble import RandomForestClassifier_model
f. masa import
# Muatkan set data Iris
iris = load_iris()
X, y = iris.data, iris.target
#Define hyperparameter search space
search_space = {'n_estimators': [10, 100, 500, 1000],
'max_depth': [2, 10, 25, 50, 100],
'min_samples_split': [2, 5, 10 ] ,
'min_samples_leaf': [1, 5, 10]}
#Define Random Forest Classifier
clf = RandomForestClassifier(random_state=1234)
#Jana objek pengoptimum
pengoptimum = GridSearchCV(clf, search_space, cv=5, scoring='acuracy')
#Simpan masa mula supaya ia boleh digunakan untuk mengira jumlah masa yang dibelanjakan
start_time = time.time()
# Pengoptimum pada pemadanan data
optimizer.fit(X, y)
# Simpan masa tamat supaya ia boleh digunakan untuk mengira jumlah masa yang memakan
end_time = time.time ( )
# Cetak set hiperparameter terbaik dan skor yang sepadan
print(f"selected hyperparameters:")
print(optimizer.best_params_)
print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
Output kod di atas adalah seperti berikut :
dari sklearn.model_selection import RandomizedSearchCV
dari scipy.stats import randint# Buat objek RandomizedSearchCVoptimizerCV Randomized clf, param_distributinotallow=search_space,
n_iter=50, cv=5, scoring='accuracy', random_state=1234)
# Simpan masa mula untuk mengira jumlah masa berjalan
masa_mula = time.time()
# Pasangkan pengoptimum pada data
optimizer.fit(X, y)
# Simpan masa tamat untuk hitung jumlah masa Berjalan
akhir_masa = masa.masa()
# Cetak set hiperparameter optimum dan skor sepadan
cetak(f"hiperparameter terpilih:")
cetak (pengoptimum .best_params_)
print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1) }" )
Hasil keluaran kod di atas adalah seperti berikut:
Hasil carian rawak
Berbanding dengan hasil carian grid, Keputusan ini sangat menarik. best_score kekal sama, tetapi elapsed_time berkurangan daripada 352.0 saat kepada 75.5 saat! Sungguh mengagumkan! Dalam erti kata lain, algoritma carian rawak berjaya mencari satu set hiperparameter yang berfungsi sama seperti carian grid dalam kira-kira 21% masa yang diperlukan oleh carian grid! Walau bagaimanapun, kecekapan di sini jauh lebih tinggi.
Seterusnya, mari kita beralih kepada kaedah seterusnya, yang dipanggil Pengoptimuman Bayesian, yang belajar daripada setiap percubaan dalam proses pengoptimuman.
Pengoptimuman Bayesian ialah kaedah pengoptimuman hiperparameter yang menggunakan model kebarangkalian untuk "belajar" daripada percubaan sebelumnya dan mengarahkan carian ke hiperparameter dalam ruang carian fungsi objektif model pembelajaran mesin.
Kaedah pengoptimuman Bayesian boleh dibahagikan kepada 4 langkah, yang akan saya huraikan di bawah. Saya menggalakkan anda membaca langkah-langkah ini untuk memahami proses ini dengan lebih baik, tetapi tiada pengetahuan prasyarat diperlukan untuk menggunakan kaedah ini.
Jika anda berminat untuk mengetahui lebih lanjut tentang Baye Untuk maklumat terperinci tentang Si pengoptimuman, anda boleh melihat siaran berikut:
"Algoritma Pengoptimuman Bayesian dalam Pembelajaran Mesin", alamatnya ialah:
https://medium.com/@fmnobar/conceptual -overview-of -pengoptimuman-bayesian-untuk-penalaan-parameter-dalam-pembelajaran-mesin-a3b1b4b9339f.
Sekarang kita memahami cara pengoptimuman Bayesian berfungsi, mari kita lihat kelebihan dan kekurangannya.
Kelebihan:
Dengan perincian yang tidak diingini, mari kita laksanakan pengoptimuman Bayesian dan lihat hasilnya.
Sama seperti bahagian sebelumnya, kami akan menggunakan coretan kod berikut untuk melaksanakan hiperparameter Bayesian untuk masalah yang sama yang diterangkan dalam pengoptimuman Pelaksanaan Carian Grid.
# Import perpustakaan
dari skopt import BayesSearchCV
# Lakukan pengoptimuman Bayesian
pengoptimum = BayesSearchCV(estimator=RandomForestClassifier(),_spacessearch =>search n_iter=10,
cv=5,
scoring='accuracy',
random_state=1234)
# Simpan masa mula untuk mengira Jumlah masa berjalan
masa_mula = time.time()
optimizer.fit(X, y)
# Simpan masa tamat untuk mengira jumlah masa berjalan
masa tamat = time.time()
# Cetak set hiperparameter terbaik dan skor yang sepadan
print(f"selected hyperparameters:")
print(optimizer.best_params_)
print ("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
Output kod di atas adalah seperti berikut:
Jadual di bawah membandingkan keputusan tiga kaedah yang dibincangkan setakat ini. Lajur "Metodologi" menerangkan kaedah pengoptimuman hiperparameter yang digunakan. Ini diikuti oleh hiperparameter yang dipilih menggunakan setiap kaedah. "Skor Terbaik" ialah skor yang diperoleh menggunakan kaedah tertentu, dan kemudian "Masa Berlalu" mewakili tempoh masa yang diambil untuk strategi pengoptimuman dijalankan pada komputer riba tempatan saya. Lajur terakhir, Kecekapan Diperolehi, menganggap carian grid sebagai garis dasar dan kemudian mengira kecekapan yang diperoleh oleh setiap satu daripada dua kaedah lain berbanding carian grid (menggunakan masa berlalu). Sebagai contoh, memandangkan carian rawak mengambil masa 75.5 saat dan carian grid mengambil masa 352.0 saat, kecekapan carian rawak berbanding garis dasar carian grid dikira sebagai 1–75.5/352.0=78.5%.
Jadual 2 - Jadual perbandingan prestasi kaedah
Dua kesimpulan utama dalam jadual perbandingan di atas:
Dalam artikel ini, kami membincangkan apa itu pengoptimuman hiperparameter dan memperkenalkan tiga kaedah paling biasa digunakan untuk latihan pengoptimuman ini. Kami kemudian memperkenalkan setiap tiga kaedah ini secara terperinci dan melaksanakannya dalam latihan pengelasan. Akhir sekali, kami membandingkan hasil pelaksanaan ketiga-tiga kaedah tersebut. Kami mendapati bahawa kaedah seperti pengoptimuman Bayesian yang dipelajari daripada percubaan sebelumnya boleh meningkatkan kecekapan dengan ketara, yang boleh menjadi faktor penting dalam model kompleks besar seperti rangkaian saraf dalam, di mana kecekapan boleh menjadi faktor penentu.
Zhu Xianzhong, editor komuniti 51CTO, blogger pakar 51CTO, pensyarah, guru komputer di sebuah universiti di Weifang dan seorang veteran dalam industri pengaturcaraan bebas.
Tajuk asal: Pengoptimuman Hiperparameter — Pengenalan dan Pelaksanaan Carian Grid, Carian Rawak dan Pengoptimuman Bayesian, pengarang: Farzad Mahmoodinobar
Atas ialah kandungan terperinci Perbandingan pengoptimuman hiperparameter: carian grid, carian rawak dan pengoptimuman Bayesian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!