Bir makine öğrenmesi uygulaması için hazırlanan veri ile model kurulduktan sonra eldeki modeli optimize etmek, zorlu fakat olmazsa olmaz süreçlerden biri. Makine öğreniminde parametreler iki kategori altında değerlendiriliyor. Bunlar hiperparametreler ve model parametreleri.
Hiperparametreler, model parametrelerinden farklı olarak model geliştiricisi tarafından modelin eğitimi öncesinde modelin ilk etapta nasıl yapılandırılacağını belirler. Burada model parametrelerinin tersine, hiperparametreler modelin eğitimi aşamasında öğrenilmez.
Örneğin LightGBM ile kurulan modelde bir ağaçtaki yaprak sayısı hiperparametre iken, lineer regresyonda oluşturulan y = ax + b fonksiyonunda a ve b değerleri eğitim sırasında öğrenildiği için model parametreleri olarak adlandırılır.
Makine öğrenimi modellerini ayarlamak, temelde bir tür optimizasyon sorunudur. Burada bir dizi hiperparametre içerisinden, kayıp fonksiyonunu (loss function) minimum veya belirlenen bir başka başarı metriğini maksimum bulmamıza yardımcı olabilecek değerlerin doğru kombinasyonlarını bulmak amaçlanır. Hiperparametre ayarlama işlemi, modelin veri özelinde en iyi performansı elde etmesi için uygulanır.
Eğitim (train) seti, makine öğrenimi algoritmasının farklı değişken veya özellikler ile hedef değişken arasındaki ilişkiyi ortaya çıkardığı, bu ilişkiyi öğrendiği veri kümesidir. Bir modelin parametrelere uyması için öğreniminde kullanılan örnekleri içeren veri kümesidir.
Validasyon seti ise bir modelin hiperparametrelerini ayarlamak için kullanılan örnek veri kümesidir. Geliştirme veya doğrulama seti olarak da geçmektedir. Validasyon verisi, eğitim sırasında modelin görünmeyen veriler üzerindeki performansını izlemek için kullanılır. Asıl olarak doğrulama verisindeki kaybı azaltmak için hiperparametre optimizasyonu gerçekleşecektir.
Model selection during prototyping phase
Hiperparametre optimizasyonu noktasında kendini kanıtlamış birçok algoritma vardır. Optuna hem makine öğrenimi hem de derin öğrenme algoritmaları ile uyumlu çalışabilen açık kaynak kodlu optimizasyon algoritmalarından biridir. Kısaca Optuna, hiperparametre optimizasyonu sürecini otomatize etmek için geliştirilmiş, Python kullanan ve en iyi performans için deneme yanılma yoluyla optimum değerleri otomatik olarak arayıp bulan bir yazılım çerçevesidir.
Optuna, optimum hiperparametre değerlerini tespit edebilmek için parametre denemelerinin kaydından faydalanır. Geçmiş verileri kullanarak gelecek vaat eden bir alanı tahmin eder ve o alandaki değerleri dener. Ulaştığı yeni sonuca dayanarak daha da umut vaat eden bir bölge seçimi gerçekleştirerek gelişen bir yapıya sahiptir. Optimizasyon süreci devam ederken uygulanan denemelerin (trial) geçmiş verilerini kullanarak işlemleri tekrarlar.
Optuna, study ve trial kavramlarını kullanır. Study, belirli bir modelin içeriği ile birlikte optimizasyon görevi için çalışma bileşenleri, hangi algoritmanın kullanılacağı (sampler), deneme sonuçlarının nerede depolacağını gibi bilgileri içerir. Trial ise belirli bir hiperparametre setini deneyen model eğitimi görevi olarak düşünülebilir. Objective içerisine, optimize edilmek istenilen hiperparametre isim ve aralıkları verilerek her bir trial denemesinde değerlerin kombinasyonları sağlanır. Çağırılan objective fonksiyonunun optimize edilmek istenilen değeri (model doğruluğu gibi) döndürmesiyle hiperparametreler budama stratejisine tabi tutulur.
Optuna, define-and-run yerine define-by-run API tarzı ile bir kullanıcı programına yüksek modülerlik katarak karmaşık hiperparametre alanlarına erişim sağlamayı mümkün kılmıştır. Kullanıcıların daha önceden tanımlaması zorunlu olan optimizasyon metotları Optuna ile artık gerekli değildir. Karmaşık yapılara karşı güçlü bir algoritma haline gelmiştir.
Optuna ile optimizasyon basamaklarındaki örneklemler, girilen parametre değerleri kullanılarak arama alanı sürekli olarak daraltılır. Örneğin derin öğrenme veya gradyan artırmalı algoritmalar kullanıldığında, öğrenme çıktısından tahminler yapılabilir. Optuna’nın bu tahminleri kullanarak eğitim bitmeden denemeleri durdurabilme özelliği budama (pruning) olarak adlandırmaktadır. Optuna, objektif değerlere daha çok önem vererek parametre arayan geçmiş veriler ile çalışıp kendini geliştiren bir optimizasyon algoritması olarak çalışmaktadır. Bu özelliği sayesinde diğer optimizasyon metotlarına göre daha iyi sonuç verdiği gözlemlenmektedir.
Optuna-Hyperopt Sonuca Ulaşma Zaman Karşılaştırması
Örnekleme (Sampling) Stratejisi: Optuna, tüm olası kombinasyonların listesinden en iyi hiperparametre kombinasyonunu seçmek için bir örnekleme algoritması kullanır. Ardından hiperparametrelerin iyi sonuçlar verdiği alanlara odaklanır ve diğerlerini göz ardı ederek zaman tasarrufu sağlar.
Budama (Pruning) Stratejisi: Optuna aynı zamanda eğitim sırasında algoritma performansını sürekli olarak kontrol eden bir budama stratejisi kullanır ve iyi sonuçlar vermiyorsa belirli hiperparametre kombinasyonları için eğitimi sonlandırır. Bu da yine zamandan tasarruf sağlar.
Optuna ile örnek bir uygulama gerçekleştirmek için House Price veri seti ile karar ağacı algoritması olan LightGBM modelini kullanarak bir makine öğrenmesi modeli hazırlayalım.
Bu çalışma kapsamında veri ön işleme ve özellik mühendisliği adımları uygulanmış bir veriyle devam edelim. Optuna ile hiperparametre optimizasyonu uygulayacağımız veri 1121 gözlem ve 175 değişkenden oluşmakta.
Optuna’yı yüklemek için basitçe “conda install -c conda-forge optuna” komutunu kullanabiliriz.
Optimizasyon için gerekli kütüphanelerimiz ise şu şekilde:
Kütüphaneleri yükledikten sonra süreç için gerekli olan tüm bilgileri içeren objective fonksiyonunu tanımlamamız gerekiyor.
Verimizi objective fonksiyonuna sokmadan önce verimizi train & validasyon setleri olacak şekilde ayırıyoruz. Objective içerisinde train ve validasyon setlerini belirleyip LightGBM’in kabul edeceği şekilde setler oluşturuyoruz. Optimum değerlerini bulmak istediğimiz parametreleri sözlük (dictionary) formatında veriyoruz. Daha sonra Optuna’nın kendine has bir özelliği olan pruning_callback metodunu çağırıyoruz. Bir regresyon problemi ele aldığımız için budama işlemindeki metriği mse olarak tanımlıyoruz.
Ardından ağaç oluşturma süreci ve eğitimi başlatıp parametre sözlüğünü, train-validasyon setlerini ve pruning metodunu çağırıyoruz. Bunlara ek olarak tek tek parametrelerde gezdiğinden modele ekstra güç sağlaması adına bir booster ekliyoruz. Model ile tahminler yapıp objective fonksiyonunu rmse değeri bitiriyoruz.
Şimdi bir her defasında tekrarlanacak olan parametre eğitimi için study tanımlayıp verdiğimiz trial sayısı kadar bunu tekrarlamasını söyleyip optimizasyon sürecini başlatıyoruz.
Bunun ardından çıkan sonuçları inceleyebilir, en iyi parametreler ile artık modeli daha başarılı bir biçimde eğitebiliriz.
Optimizasyon adımlarınızı daha detaylı incelemek isterseniz Optuna içerisindeki özelleştirilmiş grafik fonksiyonlarını çağırarak parametrelerin feature importance ve her bir trial denemesindeki optimizasyon geçmişi gibi birçok grafiği inceleyebilirsiniz.
Kısacası Optuna, her deneme içerisinde girilen hiperparametre değerleri arasında kombinasyonlar oluşturarak en uyumlu örneklemleri belirler. Geçmiş işlemlerinden öğrenerek, anlık olarak kurduğu yapıda budama gerçekleştirip modelimiz için optimum hiperparametreleri bize vermiş olur.
Machine Learning hakkında daha geniş kapsamlı bilgiye erişmek ve kariyerinizde Machine Learning bilginizle fark yaratmak isterseniz Miuul'un sunduğu Machine Learning Engineer Path eğitimine göz atabilirsiniz.
Kaynaklar