Ana içeriğe geç

Auto-Keras ile Otomatik Makine Öğrenimi

Otomatik makine öğrenimi hakkında bilgi edinin ve bunun auto-keras ile nasıl yapılabileceğini öğrenin.
· 11 dk. oku

Yapay Zeka ile Keşfedin

Makine öğrenimi, DataCamp, Coursera, Udacity gibi kuruluşların makine öğrenimi eğitimini geniş kitlelere ne kadar verimli ve esnek bir şekilde ulaştırabilecekleri üzerine sürekli çalışmalarından dolayı artık çok da yabancı bir terim değil. Bu platformlar sayesinde, günümüzde neredeyse hiçbir ön koşul olmadan bu alana başlamak oldukça kolay. Ancak, popüler Veri Bilimi eğitim forumlarında son zamanlarda Otomatik Makine Öğrenimi terimi sıkça gündeme geliyor. Google, H2O.ai gibi birçok kuruluş bu alanda dikkate değer çalışmalar yürütüyor. Bu konu, Makine Öğrenimi kadar yaygın değil. Çünkü makine öğrenimi zaten otomasyon ile ilgilenir; dolayısıyla akla gelen ilk soru doğal olarak şu oluyor: "Makine öğrenimi de otomatikleştirilebilir mi?"

Bu eğitimde buna benzer birçok sorunun yanıtlarını bulacaksınız.

Haydi başlayalım.

Standart Bir Makine Öğrenimi Boru Hattını Anlamak

Bir Veri Bilimci olarak bir problemi çözerken, standart iş akışınız kabaca aşağıdaki gibi görünür:

  1. Veri Toplama
  2. Veri Ön İşleme
  3. Probleme uygun olabilecek bir makine öğrenimi modelini başlatma
  4. Modeli eğitme
  5. Modeli test etme
  6. Modelin parametrelerini ayarlama
  7. Modeli yeniden test etme
  8. Sonuçları paylaşma

İkinci adım olan Veri Ön İşleme, bağlam olarak oldukça geniştir; çünkü yukarıdaki boru hattında en çok zaman alan görevlerden biridir ve Veri Temizleme, Veri Dönüştürme, Özellik Seçimi gibi birçok alt görevi içerir. 3’ten 7’ye kadar olan adımlar yalnızca tek bir makine öğrenimi modeli içindir. İyi bir uygulayıcı elbette tek bir modelle yetinmeyecektir. Farklı modeller üzerinde deneyler yaparak sonuçlarını karşılaştırır ve sonunda problem için en iyi modele karar verir. İşte burada başka bir zaman alıcı görevler kümesi daha ortaya çıkar: Hangi modelin seçileceğine nasıl karar verilir?

Makine öğrenimindeki hata ayıklama süreci ile ilgili aşağıdaki alıntı daha isabetli olamazdı; akılda tutmak gerekir:

"Makine öğreniminde hata ayıklama iki durumda gerçekleşir: 1) algoritmanız çalışmıyordur ya da 2) algoritmanız yeterince iyi çalışmıyordur. [...] Bir algoritmanın ilk seferde çalışması çok nadirdir ve bu nedenle algoritma geliştirmeye harcanan zamanın çoğu burada geçer." - S. Zayd Enam

Şimdiye kadar, standart bir makine öğrenimi mühendisliği görevinin nasıl olduğuna dair kısa bir fikir edindiniz. Sonuçta, elinizdeki problem için en iyi modelin hangisi olduğuna karar vermeniz ve neden en iyi olduğunu da açıklamanız gerekir. Bazen denenecek olasılıkların sayısı çok fazladır ama teslim tarihi yakındır. — Sorunun özünü hissedebildiniz mi? Daha fazlasını keşfedelim.

Makine Öğrenimi Boru Hattı Nasıl Otomatikleştirilebilir?

Bu bölümde, bir problem için en iyi modele karar verme fikrini ve olasılıkların sayısı ile teslim tarihinin birbiriyle ters orantılı olduğu bir durumu ele almaya devam edeceksiniz.

Bu eğitimin en başında şu soruyla karşılaştınız: "Makine öğrenimi de otomatikleştirilebilir mi?" Bu soru hiç de saçma değil. Hatta Sebastian Raschka, bir röportajında Otomatik Makine Öğrenimini "otomasyonun otomasyonunu otomatikleştirmek" olarak tanımlamıştı.

Az önce incelediğiniz veri bilimi görevlerinin standart iş akışındaki 5 numaralı adıma geri dönelim — Modelin hiperparametrelerini ayarlayın. Diyelim ki veriyi sonraki adımlar için hazırlamayı bitirdiniz ve bir sınıflandırıcı $X$ başlattınız. Şimdi, $X$’in 5 farklı hiperparametre aldığını düşünün. Bu durumda, aynı sınıflandırıcı $X$’i farklı hiperparametre değer kümeleriyle denemeniz gerekir ki bu hiç de kolay bir iş değildir. Dahası da var. Çeşitli kombinasyonları denedikten sonra sonuçların yeterince iyi olmadığını keşfettiniz. Bunun üzerine dört farklı sınıflandırıcıyı daha (her biri 6 farklı hiperparametreyle) test etmeye karar verdiniz. Bunun ne kadar zaman alabileceğini hayal edebiliyor musunuz? Üstelik yine de iyi sonuç alamazsanız? Bunun araştırılması da son derece zaman alıcı başka bir süreç olacaktır.

Otomatik Makine Öğrenimi fikri tam da bu problemden doğmuştur.

"Çeşitli algoritmalar ve çok sayıda farklı hiperparametre yapılandırması kullanılarak çok sayıda makine öğrenimi modeli oluşturulması gerekiyorsa, bu model oluşturma işlemi ve model performansı ile doğruluğunun karşılaştırılması otomatikleştirilebilir." - KDNuggets

Artık Otomatik Makine Öğrenimi teriminin popüler Veri Bilimi eğitim forumlarında neden bu kadar gündemde olduğuna dair bir nedeniniz var. Bir sonraki bölümde otomatik makine öğrenimi hakkında daha fazla bilgi edineceksiniz.

Otomatik Makine Öğrenimine Giriş

Farklı makine öğrenimi modelleri için hiperparametre ayarlama görevi de doğası gereği oldukça zaman alıcıdır. Daha Bilgisayar Bilimi odaklı bir terimle ifade etmek gerekirse, hiperparametre ayarlama bir arama sürecidir ve bu durumda son derece kapsamlı olabilir. Peki ya bu sürecin kendisi otomatikleştirilebilseydi? Temelde otomatik makine öğreniminin yaptığı şey tam olarak budur. "Otomatik makine öğrenimi, veri bilimcisi eksikliğine doğrudan bir çözümdür; çalışma döngülerini hızlandırarak, model doğruluğunu iyileştirerek ve nihayetinde veri bilimcisi ihtiyacının yerini dahi alabilecek şekilde veri bilimcilerinin performansını ve üretkenliğini büyük ölçüde artırabilir." -Nesnelerin İnterneti için Otomatik Makine Öğrenimi

Artık otomatik makine öğrenimi hakkında yeterli bilgiye sahipsiniz ve onu eylemde görmeye hazırsınız. Ama önce, otomatik makine öğrenimi için yaygın olarak kullanılan bazı Python kütüphanelerine bakalım.

Otomatik Makine Öğrenimi için Python Kütüphaneleri

Otomatik makine öğrenimi gerçekleştirmek için birçok Python kütüphanesi mevcuttur. Hepsi, makine öğrenimi sürecini otomatikleştirme hedefini az çok aynı şekilde gerçekleştirmeyi amaçlar. Aşağıda otomatik makine öğrenimi için en yaygın kullanılan bazı Python kütüphaneleri yer alıyor:

Bu kütüphanelerin her biri, "otomasyonun otomasyonunu otomatikleştirme" sürecini ele almak için kendi yaklaşımına sahiptir. Ancak bu eğitimde Auto-Keras kullanacaksınız. Öyleyse neden bekleyelim? Başlayalım.

Auto-keras’a Giriş

"Auto-Keras, otomatik makine öğrenimi için açık kaynaklı bir yazılım kütüphanesidir."(Kaynak) Texas A&M Üniversitesi’ndeki DATA Lab ve topluluk katılımcıları tarafından geliştirilmektedir. resmi sitesine göre auto-keras — "Bu otomatik makine öğreniminin nihai amacı, sınırlı veri bilimi veya makine öğrenimi geçmişine sahip alan uzmanlarına kolay erişilebilir derin öğrenme araçları sunmaktır. Auto-Keras, derin öğrenme modellerinin mimarisini ve hiperparametrelerini otomatik olarak aramak için işlevler sağlar."

AutoKeras Logosu

Kaynak: Auto-Keras

Auto-keras'ı kurmak için aşağıdaki komutu çalıştırmanız yeterli.

Not: Şu anda Auto-Keras yalnızca Python 3.6 ile uyumludur.

!pip install autokeras

Artık Auto-Keras'ı başarıyla kurduğunuza göre, hızlı bir uygulama zamanı.

Auto-keras Kullanarak AutoML Üzerine Bir Vaka Çalışması

Bu vaka çalışması için çok popüler MNIST veri kümesini kullanacaksınız. keras bu veri kümesini yerleşik olarak içerir. Dolayısıyla ayrı indirme yapmanıza gerek yok. auto-keras’ın ImageClassifier modülünü yükleyerek başlayacaksınız. Ayrıca MNIST veri kümesini keras modülünden yükleyeceksiniz.

from keras.datasets import mnist
from autokeras import ImageClassifier

keras.datasets modülünden MNIST veri kümesini yüklediniz ve auto-keras’tan ImageClassifier’ı içe aktardınız. Şimdi veri kümesini eğitim ve test ayrımlarına böleceksiniz.

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape + (1,)) # (1,) bu durumda 1 olan kanalları ifade eder
x_test = x_test.reshape(x_test.shape + (1,)) # (1,) bu durumda 1 olan kanalları ifade eder
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step

Eğitim ve test ayrımlarını yaptınız; şimdi x_train ve y_train ile ImageClassifier’ı eğiteceksiniz. Performansını x_test ve y_test üzerinde test edeceksiniz.

# ImageClassifier sınıfını başlatın
clf = ImageClassifier(verbose=True, augment=False)
# Eğitim kümesini görüntü sınıflandırıcısına uydurun
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
# Sonuçları özetleyin
y = clf.evaluate(x_test, y_test)
print(y * 100)

Yukarıdaki kadar basit. Sadece 4 - 5 satır kodla hızlı bir deneme yapmış oluyorsunuz. Gerçi, o kadar da hızlı değil. Yukarıdaki kodun çalışması hatırı sayılır ölçüde zaman alır. Derin Öğrenme deneyleri için makul bir donanım yapılandırması kuşkusuz yardımcı olacaktır. Google Colab de bunun için mükemmel bir başlangıç noktasıdır.

Şimdi yukarıdaki kod parçasında kullandığınız parametreler hakkında daha fazla öğrenelim. Bunun için auto-keras dokümantasyonuna başvuracaksınız ve aşağıda dokümantasyondan ilgili alıntılar yer alıyor:

  • ImageClassifier() içinde:
    • verbose: Arama sürecinin çıktıya yazdırılıp yazdırılmayacağını belirten bir boolean.
    • augment: Verinin artırıma ihtiyaç duyup duymadığını belirten bir boolean değer. Tanımlanmazsa varsayılan olarak True olan Constant.DATA_AUGMENTATION değerini kullanır.
  • fit() metodunda:
    • time_limit: Arama için saniye cinsinden zaman sınırı.
  • final_fit(): En iyi mimari bulunduktan sonra yapılan son eğitim.
    • retrain: Modelin ağırlıklarının yeniden başlatılıp başlatılmayacağını belirten bir boolean.

Auto-keras gelişmekte olan bir kütüphanedir ve hâlâ ön sürüm aşamasındadır. Resmi siteye göre aşağıdaki ana modülleri destekler:

  • supervised: Tüm denetimli görevler için temel sınıf.
  • bayesian: Bayes optimizasyonu için bir GaussianProcessRegressor.
  • search: Tüm arayıcı sınıflarının temel sınıfı. Her arayıcı sınıfı stratejisini uygulamak için arama fonksiyonunu geçersiz kılabilir.
  • graph: Bir Keras modelinin sinir ağı mimarisi grafiğini temsil eden bir sınıf. Graph, Keras modelinden sinir ağı mimarisi grafiğini çıkarır. Grafikteki her düğüm, katmanlar arasındaki ara tensördür. Her katman grafikte bir kenardır. Özellikle, birden fazla kenar aynı katmana referans verebilir. (Örneğin, Add katmanı iki tensörü tek bir tensörde toplar. Dolayısıyla iki kenarla ilişkilidir.)
  • preprocessor: Veriyi biçimlendirebilen bir sınıf. Bu sınıf, verinin sınıflandırma etiketini bir vektöre dönüştürmenin yollarını sağlar.
  • model_trainer: Modeli eğitmek için kullanılan bir sınıf. Bu sınıf, verilen veri yükleyicilerle bir Pytorch modelini eğitebilir. Metric, loss_function ve model birbiriyle uyumlu olmalıdır. Ayrıntılar için Niteliklere bakınız.

Kapanış Notları

Sonuna kadar geldiniz. Bu eğitimde, genel olarak makine öğrenimi sürecini incelediniz ve bunun nasıl otomatikleştirilebileceğini öğrendiniz. AutoML gerçekleştirmek için mevcut kütüphanelere kısaca göz attınız. auto-keras kullandınız ve sunduğu üst düzey soyutlamayı, ayrıca auto-keras'ın ne kadar kolay kullanılabildiğini gördünüz.

Bu eğitim, AutoML kusursuz hale geldiğinde birçok veri bilimcisinin yerini alabileceği gibi olumsuz bir düşünce yaratabilir. Gerçekten mi? Bir kez daha düşünün. AutoML, aslında veri bilimcileri bir problem için en iyi modeli seçmenin yinelemeli yükünden kurtarır. Bu sayede bir veri bilimci, daha esas olan verinin kendisine odaklanabilir. Randy Olson’ın bu röportajı bu konu hakkında güzel içgörüler sunuyor. Okuduğunuzdan emin olun; yeniden motive olacaksınız. Bir makine öğrenimi uygulayıcısının yaptığı işten emin olamadığınızda, şu yazıya göz atmanız yeterlidir.

Otomatik makine öğrenimi alanı gerçekten ilerleme kaydediyor. Örneğin, en iyi sinir ağı mimarisini arayan bir algoritma olan NAS (Neural Architecture Search). Aşağıda, AutoML’in en güncel kullanım örneklerini sergileyen bazı kaynaklara bağlantılar yer alıyor:

Yararlanılan bazı kaynaklar:

Daha fazla Derin Öğrenme öğrenmekle ilgileniyorsanız, DataCamp'in "Python ile Derin Öğrenmeye Giriş" kursunu alın ve Python ile Derin Öğrenmeye Giriş kursumuza göz atın.

Konular

İlgili