• gelirmiş ülkelerin kullanıp adeta biz bırak insanı artık makinaları egitiyoruz hem de kendi kendine öğreniyor dedikleri kavramdır
  • kaynak tavsiye edeceklere minnettar olacağım konu.
  • herkesin hakkında çok konuştuğu ama hakkında pek az şey bildiği teknoloji. kısaltması "ml"dir.

    ml'den önce öğrenilmesi gereken iki konu vardır:

    - veri toplama (data collection)
    - verileri anlamlandırma -- yani ml'yi doğru bilgiler ile eğitme, ml'nin örneklem uzayına doğru bilgileri aktarma.

    yoksa, yanlış bir şey öğretirsiniz, sonucu üzer sizi.
  • liselerde zorunlu olarak okutulmasına daha çok var olan daldır.
  • şuraya uzun ve içine teknik terimler yerleştirilmiş bir entry yazayım da hem havam olsun, hem de belki bir şey biliyorum sanıp özelden iş teklif eden olur.

    ...uzun ve teknik terimli entry...
  • işin içine girince internetteki kaynakların ne kadar üstün körü olduğunu gördüm. yeni başlayan biri olarak kitaplardan gitmenin daha iyi olduğunu düşünüyorum. mesela missing value gibi önemli bir konuda mean ve median'ı alıp geçin diye anlatıyor internetteki çoğu kaynak. ama kitabı açıp okuduğunuzda adam 40-50 sayfayı sadece bu konuya ayırmış. giriş açısından internetteki kaynaklar iyi olabilir fakat insan neler yapılacabileceğinin ve aslından bunların çok basit kaldığını bilmeyince kendini geliştirme fırsatı olmuyor.

    tabi bunlar öğrenilse bile kodlamada çoğu konu projeye özel oluyor ve internette çözümünü bulmak zorlaşıyor. bu konuda çok basit çözümünün olabileceğini düşündüğüm fakat takılıp kaldığım birkaç hususta yardımcı olabilecek birisi varsa ve yeşillendirebilirse çok mutlu olacağım.
  • edit: aylar sonra sosyal medyada bu alan üzerinde yazılanları gördükten sonra çaylak olsam bile editlemek istedim. herkesin bu alan üzerinde uzmanlaşacak insanlar için önerdiği matematik önbilgileri var, genel olarak bu ön bilgiler şu şekilde sıralanabilir:
    - lineer cebir
    - istatistik
    - olasılık
    - calculus
    evet, bu önbilgilerle çok iyi işler yapılabilir, hatta alana yeni bir şeyler de eklenebilir, tabii hilbert uzayında kalırsanız. çünkü, zaten çalışılan alan lineer cebirdeki uzaylara çok benziyor, tabii sonsuz boyutlu uzaylarda heine-borel teoremin tutmaması dışında, ancak zaten bilgisayara yaptırdığınız iş çoğunlukla sonlu boyutlu uzaylarda geçiyor. gerçi, sonsuz boyutta bir problemin öğrenilebildiğini gösterip bilgisayarda onu uygulayanlar da vardır. işte bu noktaya çıktınız mı işin içine direkt fonksiyonel analiz giriyor, lineer cebirde hiç karşılaşmadığınız yapılara giriyorsunuz ve iş ilginçleşiyor. herhangi gelişmiş seviyede bir optimizasyon kitabını açarsanız lineer cebir veya calculus bilginizle anlattığından bir gram anlamadığınızı hissedeceksiniz. internette gördüğüm kadarıyla çoğu insan muhtemelen optimizasyonun ve onunla ilintili olarak makine öğrenmesinin bu şekilde derin konularla bağlantılı olduğunu göz ardı ediyor. bunu ekşi sözlükteki fonksiyonel analiz ve makine öğrenmesi başlıklarına bakarak da anlayabiliriz. lafın kısası, iyi bir matematik arkaplanınız varsa, fonksiyonel analiz ve optimizasyon gibi baba konuları da derinlemesine öğrenmek istiyorsanız sizlere şu kitapları tavsiye edebilirim:

    -erwin kreyszig-ıntroductory functional analysis with applications (bu kitap için biraz reel analiz bilmeniz de gerekebilir.)

    -david luenberger-optimization with vector space methods

    -shai shalev-schwartz, shai ben-david-understanding machine learning from theory to algorithms

    tanım: yapay zekanın bir uygulama alanı. genel amacı, bir sensörden gelen bilgisayarda depolanmış veriyi alıp işleyerek gelecek verileri bilgisayara tahmin ettirmektir.

    ben yukarıdaki tanımı yaptım ama kaç kişi bunun ne anlama geldiğini ve verinin nasıl işlendiğini bilip ekşide bunun başlığını açıp buradaki girdileri okuyor? muhtemelen bu yazıyı okuyacakların %1'i anca. bunu neden diyorum? çünkü, ben de bu konu hakkında pek bir şey bilmiyorum ama yukarıdaki tanımı yazabiliyorum. neden? çünkü, bu konu o kadar popülerleşti ki herkesin hiçbir bildiği yok ama konu hakkında fikri var.

    konunun popülerliği konunun gelişmesi için iyi bir şey, çünkü, ne kadar popüler olursa çer çöp insanların doluştuğu kadar bu neymiş ya diyen işinin ehli ve zeki insanlar da bu konuya doluşuyor. ancak, benim gibi matematiksel altyapısıyla beraber bu konuyu öğrenmek isteyen insanlar da bu çer çöp insanlar yüzünden şevkini kaybediyor. nasıl mı? hemen söyleyeyim. bu arada kendimin de ileride çer çöp mü işinin ehli mi olacağını bilmiyorum. belki de ben de çer çöpümdür.

    buradaki asıl sorun şurada başlıyor: bir konu popülerleştikçe advanced mathematics (yüksek matematik) bilmeyip onu öğrenmek de istemeyip bu konuya dalacak insanlar türüyor. tabii bu insanlardan gelen talep fazla olunca internette onlara hitap edecek yazılar türemeye başlıyor. böylece siz konuyu derinlemesine öğrenmek isteyen bir insan olarak internette bu yazılar arasında kayboluyorsunuz ve kafanızdaki cevapları bulamıyorsunuz. bu da sizi soğutuyor. ya da çok fazla araştırma yapıp daha derinlemesine inceleyen bir site bulmanız gerekiyor. iyi ki stack exchange forumları ve textbooklar var, bu sitelere muhtaç kalmıyorsunuz.

    değinmek istediğim bir diğer konu ise bir konu popüler olunca hemen lisede ortaokulda bunun dersinin verilmesini isteyen kitle ortaya çıkıyor. aynı durum kodlama ve robot yapma için de geçerli. yahu, 12 senede çocuklar matematiğin bırak msini, msinin nsini bile öğrenmiyor buna rağmen müfredat daha da hafifleştiriliyor, sen çıkıyorsun 'losoyo gotorolmolo, ortookolo gotorolson' diyorsun. milli eğitimde matematik ezber olarak gösteriliyor, bunlar da hala kodlama getirilsin, robot yapsınlar çocuklar diyor. onlara gelmeden önce bir sürü sorunu halletmemiz gerekiyor, farkediyor musunuz bilmiyorum ama. hadi diyelim kodlama öğrettin bu çocuklara int** asdasd;, çocuğun içinde yoksa öğretmenin ne anlamı var hiç anlamış değilim. keşke her şey bir programlama dili öğrenmek kadar kolay olsaydı, insanlar bilgisayarı geliştirmek ve bu haline getirmek için bu kadar uğraşmasaydı.
  • python bilenlerin sıfırdan machine learning öğrenmesini kolaylaştıran site:
    (bkz: https://scikit-learn.org/stable/)
  • 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 diller

    ö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
  • algorithms background

    (bkz: linear algorithms)
    (bkz: nonlinear algorithms)
    (bkz: ensemble algorithms)
hesabın var mı? giriş yap