TEKNOLOJİ 5 Şubat 2020
33,6b OKUNMA     557 PAYLAŞIM

Machine Learning'i Python İle İcra Edenlerin Faydalanabileceği Kütüphaneler

Machine Learning (Makine Öğrenmesi) mevzusuna yeni başlayanlar veya bilgilenmek isteyenler için kütüphanelerin ve teknolojilerin karşılaştırmaları.

bu işi python ile icra edenlerden "hangi kütüphaneleri kullanalım" şeklinde çok soru oluyor. işin içinde olan biri olarak yeni başlayanlar veya bilgilenmek isteyenler için kütüphanelerin ve teknolojilerin karşılaştırmalarını yapayım.

1. python vs diğer dille

öncelikle bu dil ötekinden iyi diye bir durum yok. herhangi bir dille işinizi halledebiliyorsanız aynen devam edebilirsiniz, bilinen dil en iyisidir.

alanda öne çıkan iki dil var, ikisi de neredeyse başbaşalar popülerlik açısından. r özellikle istatistik, veri bilimi ve machine learning odaklı bir dil olduğu için daha derli toplu bir tecrübe sunuyor. r studio'yu kurarsınız ve başlarsınız. bunun yanında python daha genel kapsam bir dil olduğu için esneklik ve güç sağlıyor. ikisi de makul, şöyle bir tercih sırası izlenebilir:

safi veri analizi, bilgisayar bilimleri hariç araştırma veya ürüne doğrudan dönüşmeyen machine learning yapılıyorsa: r. mesela yatırım şirketinde analistsinizdir, çalışmanızı incelemenizi yapar sunar bitirirsiniz, kodun kendisi ürüne dönmez. bir genin bir hastalık için önemli olup olmadığının testi yapılacaktır yaparsınız yayınlarsınız biter, kod ürüne dönmez vb.

yukarıdakininin aynısı ama kod ürüne dönecekse, herhangi bir formda otomasyon düşünülüyorsa: python.

r otomasyon için kullanılmayacak diye bir şey de yok, ama gerçekçi olunursa python tercih edilir. r daha ziyade ide'siyle özdeşleşmiş bir sandbox ortamı gibi düşünülebilir.

2. veri analizi / manipülasyonu / görselleştirme / pipeline

verinin ilk-analizi, manipülasyonu, tabloid biçimdeki verinin kullanımı konusunda python'daki tekel pandas. bunu bilmeniz şart. pandas bilmek + sayılarla uğraşmak kaçınılmaz olduğundan bir de numpy bilmeniz gerekiyor. sayılarla uğraşmaktan kasıt yalnızca toplama çıkarma çarpma bölme değil, machine learning içerisinde öyle ya da böyle çoğu şeyi vektörlere ve sayılara indirgemeniz gerekmekte. kategorik veriyi one-hot array'lere çevirme, dizilerle serilerle uğraşma, dört işlem, birleştirme, ayrıştırma, yeniden boyutlandırma, veri tipleriyle oynama gibi işlerin bazılarını pandas ile (eğer pandas içerisinde istediğiniz şey varsa), yoksa numpy ile yapacaksınız. haricinde machine learning için kullanılan çoğu kütüphane de numpy temelinde geliştirildiğinden aşinalık gerekmekte.

henüz bilmiyorsanız bir de lambda function olayına göz atmanız gerekiyor, iki kütüphane de bunları yoğun biçimde kullanır. büyük kolaylık.

görselleştirme için birden fazla opsiyon var, istediğinizi seçebilirsiniz. genel kapsam görselleştirme araçları: matplotlib, seaborn, bokeh, plotly... matplotlib en temel olanı denebilir. diğer kütüphanelerde daha cafcaflı görselleştirme şekilleri bulunabilir. özel durumlarda kullanılabilen araçlar da var, mesela harita üzerine plot yapmak istiyorsanız folium var. veriyi interaktif harita şeklinde gösteriyor.

pipeline, verinin peşpeşe seri biçimde tanımlanmış birtakım işlem geçmesine deniyor. veriyi modeller için hazır hale getirmek için 5-6 basamak ön-işleme yapıyorsanız bir pipeline oluşturuyorsunuz, o pipeline veriyi bir ucundan alıyor, 5-6 basamaklı veri işleme fonksiyonlarını yürütüyor, modele veriyor, diğer ucundan da istenen çıktıyı alıyorsunuz. bunları manuel olarak yapmak da mümkün, sklearn gibi bir kütüphaneyle yapmak da mümkün. sklearn kendi içerisinde hem bu yapacağınız pipeline için bir framework sunuyor, hem de sık kullanılan bazı veri ön işleme metotlarını hazır olarak kendi içinde barındırıyor. işiniz baya hızlanıyor. mesela bir resim sınıflandırma algoritması yaptınız, ama resmi modele göstermeden önce siyah beyaza çevirip kontrastı biraz artırmak istiyorsunuz. bunla baya rahat yapıyorsunuz.

3. klasik machine learning

klasik machine learning'ten kasıt, yapay sinir ağları (artificial neural network) olmayan machine learning. support vector machines, k-nearest neighbors, lineer/lojistik regresyon, karar ağaçları vb.

bunlar için sık kullanılan kütüphane scikit-learn. hatta aslen sklearn'ün içinde de bir yapay sinir ağı modeli var ama, onun için daha ziyade o işle özelleşmiş kütüphaneler kullanıldığından biraz yabana atılmış gibi.

4. deep learning

zurnanın zırt dediği yerde opsiyonlar bol. tensorflow, pytorch, keras, sonnet, ve niceleri. bunlar en çok adı duyulan dört genel kapsam machine learning (ama özellikle deep learning) platformu. artık bunlara kütüphane denmiyor, platform deniyor. literal olarak bakılacak olursa bunların yaptıkları iş, bir hesaplama grafiği çıkarıp hızlandırılmış biçimde belli bir veriye uygulamak. popüler machine learning ve deep learning öğelerini tek çatı altında toplamışlar ve istediğiniz hesap grafiğini lego gibi önce oluşturmanızı, sonra da yarattığınız modeli yürütmenize yardımcı oluyorlar.

tensorflow, google'ın machine learning platformu. 2.0 sürümüyle birlikte keras ile birleştiler. keras artık tensorflow'un yüksek seviyeli api'ı oldu. o yüzden baştan söyleyip aradan çıkarayım, keras öğrenmek isteyenler doğrudan tensorflow 2.x'ın ilgili kısımlarını öğrensinler. hiç zahmet etmesinler.

tensorflow 2.0 olmadan önce, sadece statik hesap ağaçları kullanıyordu. statik hesap ağacının kendine has avantajları var, dezavantajları var. statik hesap ağacı, daha model eğitime başlamadan tanımlanıyor, oluşturuluyor ve eğitime hazır halde yürütülüyor. bunun iyi yanı: hızlı olması, kötü yanı: yazmanın işkence olması ve model bir sebepten patlayınca patlayan kısmı anlayamamanız. çünkü pythondan çıktı gitti artık compile edilmiş bir model olarak o. 4 sayfalık tanzimat fermanı gibi bir hata traceback'i veriyor lakin faydasız. kod da oldukça okunaksız oluyor, sanki python yazmıyormuşsunuz da bambaşka bir dilmiş hissiyatı veriyor.

tensorflow 2.0'la birlikte, eager execution mode diye bir şey getirdiler ve bunu tf'un standart modu yaptılar. bu mod, hesap ağacını hızdan kaybetmek pahasına (baya bi kaybetmek pahasına) dinamik hale getiriyor. yani model birnevi parça parça compile edilip çalıştırılıyor, böylece kodun patlayan kısmını daha net görebiliyorsunuz. pytorch oldu olası böyle yapıyordu, oradan arakladılar bunu. hala daha eski usûl statik grafik kullanabilirsiniz tabii, öyle bir opsiyon da var.

tensorflow'un bunlar harici iyi yanları da var, google platformu olması dolayısıyla google'ın bulut hesaplama hizmetleri ve yine google'ın özel tensor processing unitleri (ekran kartlarından bile kat kat hızlı ve verimli çalışan, machine learning için özel üretim işlem birimleri) ile mükemmel uyumu var. tensorflow.js var, front-end'de tensorflow keyfi yapmak isteyenler için. tensorflow lite var, mobil app'lere tensorflow modelleri entegre etmek için. tensorboard gibi modelleri eğitim sırasında izleyebileceğiniz ve inceleyebileceğiniz eklentileri var. stack overflow'da en yakını pytorch'tan 3.5x daha fazla sorulmuş sorusu var, ekosistemi de ona kıyasla daha büyük. laaaakin bu şöyle de yorumlanabilir, tf her minor versiyonla beraber çökmelere ve hatalara doyamayan bir platform. dokümantasyonlarının da azımsanmayak bir kısmı bu bağlamda hatalı. çorap değiştirir gibi api'ı değiştiriyorlar ve bunu yapmayı bırakacak gibi de durmuyorlar. yine de aradığınızı bulmanızın en olası olduğu platform bu.

pytorch da facebook'un machine learning platformu. tek mod olarak dinamik hesaplama grafiği kullanıyor. ama kullandığı dinamik hesap grafiği, dinamik olmasına rağmen kabul edilebilir bir verim ve hızla çalışıyor. özellikle ona odaklandıkları için. hız sıralaması şöyle: tf statik > pytorch > tf eager execution. kodları daha okunaklı, debug etmek daha kolay, kodu yönetmek daha kolay, kod gayet pythonic, tf'daki gibi kara büyü yazıyor hissiyatı yaratmıyor. araştırma özelinde tensorflow'a şu an katbekat fark atıyor ama uygulamaya dönecek işlerde hala tensorflow'un eline su dökemiyor. böyle bir tezat var. sebebi deploy etmenin hala daha zor olması ve ekosistem etkisi diye tahmin edilebilir. tensorboard'a alternatif olarak captum denen şeyleri var, ben şahsen kullanmadım bilmiyorum ama eskiden bu da yoktu. mobil uygulamalara entegrasyon, frontend'e entegrasyon gibi şeyleri de henüz yok; yapmayı düşünüyorlarmış. dokümantasyon ve kaynaklar da, kütüphanelerini zırt pırt değiştirmedikleri için daha olgun. öğrenmek için mükemmel bir kaynak olan fastai da pytorch kullanıyor.

sonnet, google'ın deep mind şirketinin başta kendine özel geliştirdiği, sonradan açık kaynak ettiği bir platform. hiç kullanmadım, özellikle tercih eden de görmedim ama var böyle bir şey. tensorflow 2.0 tabanlı bir framework. haricinde microsoft'un da kendi nanesi var ama adını bile unuttum. özellikle microsoft teknolojilerine bağlı olanlar onlara göz atabilir.

bazı uğraş alanları, mimariler ve paradigmalar çok ses getiriyor, bizzat onlara has yeni platformlar yaratacak kadar etkileyici olabiliyorlar. örnek olarak yeni transformer modeller (doğal dil işleme için de kullanılabiliyor ama baya maharetli), reinforcement learning, makine görüşü, doğal dil işleme vb. sayılabilir. öyle durumlarda uygulama alanınız bunlarla kısıtlı olacaksa bunlar da ek tercih olabilir. yukarıdaki platformlarla yapamazsınız değil, sadece özelleşmiş üst seviye kütüphaneler olarak düşünmek daha iyi.

kolaylık isteyen keras (yani tensorflow 2.0'ın ilgili kısımları), halihazırda yazılımcı olup uygulama geliştirmek isteyen tensorflow, matematiksel notasyona halihazırda aşina olan ve araştırma yapmak isteyen pytorch şeklinde tercih edebilir. bunlar sert kurallar değil tabii isteyen istediğini seçse de genel eğilim böyle diyeyim.

transformer modeller için huggingface transformers var.
makine görüşü için opencv, yolo, facenet var.
doğal dil işleme için bert, huggingface transformers var.
reinforcement learning için openai gym, tensorlayer, reagent var.

5. özet

iyi bilinmesi şart: pandas, numpy
bilinmesi şart: sklearn
birinin bilinmesi şart: matplotlib/seaborn/bokeh/plotly/...
yüksel performanslı ml yapılacaksa birinin bilinmesi gerekli: tensorflow, pytorch, ...
opsiyonel: huggingface transformers, opencv, yolo, gym, tensorlayer, ...
bilinmesi şükela: regular expressions, jupyter notebook veya jupyterlab, sql

Günümüz Yazılımcılığının Yükselen Değeri Makine Öğrenmesi (Machine Learning) Nedir?

Yapay Zekanın Korkutucu Bir Boyuta Geçtiği Deep Learning (Derin Öğrenme) Nedir?