• veri modellerinden öğrenen ve programlanmaya ihtiyaç duymadan zaman içinde doğruluklarını artıran algoritmalar kullanarak uygulamalar oluşturmaya odaklanan bir yapay zeka (aı) dalıdır.

    araçlar;

    (bkz: tensorflow) , makine öğrenimi için uçtan uca bir açık kaynak platformudur. araştırmacıların makine öğrenimi alanındaki en son teknolojiyi kullanmalarına ve geliştiricilerin makine öğrenimi destekli uygulamaları kolayca oluşturup dağıtmalarına olanak tanıyan kapsamlı, esnek bir araç, kitaplık ve topluluk kaynakları ekosistemine sahiptir.

    (bkz: keras) , (bkz: python) ile yazılmış ve tensorflow, cntk veya (bkz: theano) üzerinde çalışabilen yüksek seviyeli bir (bkz: neural networks) apı'sidir. hızlı deney yapmaya odaklanılarak geliştirilmiştir. tensorflow, (bkz: microsoft cognitive toolkit), r, theano veya (bkz: plaidml) üzerinde çalışabilir.

    (bkz: pytorch) , grafikler, nokta bulutları ve (bkz: manifold)lar gibi düzensiz girdi verileri üzerinde derin öğrenme için bir kitaplıktır. öncelikle (bkz: facebook)'un aı araştırma laboratuvarı tarafından geliştirilmiştir.

    (bkz: amazon sagemaker) , her geliştiriciye ve veri bilim insanına makine öğrenimi (ml) modellerini hızlı bir şekilde oluşturma, eğitme ve dağıtma becerisi sağlayan, tam olarak yönetilen bir hizmettir. (bkz: sagemaker), yüksek kaliteli modeller geliştirmeyi kolaylaştırmak için makine öğrenimi sürecinin her adımındaki ağır yükleri ortadan kaldırır.

    (bkz: azure databricks) , veri bilimi ve veri mühendisliği için tasarlanmış hızlı ve işbirliğine dayalı bir (bkz: apache spark) tabanlı büyük veri analizi hizmetidir. azure databricks, apache spark ortamınızı dakikalar içinde kurar, otomatik olarak ölçeklendirir ve etkileşimli bir çalışma alanında paylaşılan projeler üzerinde işbirliği yapar. azure databricks, python, (bkz: scala), r, (bkz: java) ve (bkz: sql)'in yanı sıra tensorflow, pytorch ve scikit-learn dahil olmak üzere veri bilimi çerçevelerini ve kitaplıklarını destekler.

    (bkz: microsoft cognitive toolkit) (cntk) , ticari düzeyde dağıtılmış derin öğrenme için açık kaynaklı bir araç takımıdır. sinir ağlarını, yönlendirilmiş bir grafik aracılığıyla bir dizi hesaplama adımı olarak tanımlar. cntk, kullanıcının ileri beslemeli dnn'ler, convolutional neural networks (cnn'ler) ve tekrarlayan sinir ağları (rnn'ler/lstm'ler) gibi popüler model türlerini kolayca gerçekleştirmesini ve birleştirmesini sağlar. cntk, birden çok gpu ve sunucu arasında otomatik farklılaşma ve paralelleştirme ile stokastik gradyan iniş (sgd, hata geri yayılım) öğrenimini uygular.

    (bkz: apple coreml) , makine öğrenimi modellerini uygulamanıza entegre etmeye yardımcı olan bir çerçevedir. core ml, tüm modeller için birleşik bir temsil sağlar. uygulamanız, tümü kullanıcının cihazında tahminlerde bulunmak ve modelleri eğitmek veya ince ayar yapmak için core ml apı'lerini ve kullanıcı verilerini kullanır. model, bir dizi eğitim verisine bir makine öğrenimi algoritması uygulamanın sonucudur. yeni girdi verilerine dayalı tahminler yapmak için bir model kullanırsınız.

    (bkz: tensorflow macos) , apple'ın ml hesaplama çerçevesi kullanılarak hızlandırılan macos 11.0+ için tensorflow ve tensorflow eklentilerinin mac için optimize edilmiş bir sürümüdür.

    apache opennlp , doğal dil metninin işlenmesinde kullanılan makine öğrenimi tabanlı bir araç takımı için açık kaynaklı bir kitaplıktır. adlandırılmış varlık tanıma , cümle algılama , pos(part-of-speech) etiketleme , tokenization özellik çıkarma , (bkz: chunking) , (bkz: parsing) ve (bkz: coreference) çözünürlüğü gibi kullanım durumları için bir apı içerir .

    (bkz: apache airflow) , iş akışlarını programlı olarak yazmak, planlamak ve izlemek için topluluk tarafından oluşturulan açık kaynaklı bir iş akışı yönetim platformudur. airflow modüler bir mimariye sahiptir.

    (bkz: open neural network exchange) (onnx) , aı geliştiricilerine projeleri geliştikçe doğru araçları seçmeleri için güç veren açık bir ekosistemdir. onnx, hem derin öğrenme hem de geleneksel ml olmak üzere aı modelleri için açık kaynak formatı sağlar. genişletilebilir bir hesaplama grafiği modelinin yanı sıra yerleşik operatörlerin ve standart veri türlerinin tanımlarını tanımlar.

    (bkz: apache mxnet) , hem verimlilik hem de esneklik için tasarlanmış bir derin öğrenme çerçevesidir. verimliliği ve üretkenliği en üst düzeye çıkarmak için sembolik ve zorunlu programlamayı karıştırmanıza olanak tanır. mxnet özünde, hem sembolik hem de zorunlu işlemleri anında paralel hale getiren dinamik bir bağımlılık planlayıcı içerir. bunun üzerine bir grafik optimizasyon katmanı, sembolik yürütmeyi hızlı ve belleği verimli hale getirir. mxnet taşınabilir ve hafiftir, birden çok gpu'ya ve birden çok makineye etkin bir şekilde ölçeklenir. (bkz: python), r, (bkz: julia), scala, go, (bkz: javascript) ve daha fazlası için destek sağlar.

    (bkz: autogluon) , uygulamalarınızda kolayca güçlü tahmine dayalı performans elde etmenizi sağlayan makine öğrenimi görevlerini otomatikleştiren derin öğrenme araç takımıdır. yalnızca birkaç satır kodla, tablo, görüntü ve metin verileri üzerinde yüksek doğrulukta derin öğrenme modellerini eğitebilir ve dağıtabilirsiniz.

    (bkz: anaconda) , kullanıcıların modeller geliştirmesine, eğitmesine ve dağıtmasına olanak tanıyan, makine öğrenimi ve derin öğrenme için çok popüler bir veri bilimi platformudur.

    (bkz: plaidml) , dizüstü bilgisayarlarda, gömülü cihazlarda veya mevcut bilgi işlem donanımının iyi desteklenmediği veya mevcut yazılım yığınının hoş olmayan lisans kısıtlamaları içerdiği diğer cihazlarda derin öğrenmeyi etkinleştirmek için gelişmiş ve taşınabilir bir tensör derleyicisidir.

    (bkz: opencv) , gerçek zamanlı bilgisayarlı görü uygulamalarına odaklanan, yüksek düzeyde optimize edilmiş bir kitaplıktır. (bkz: c++), (bkz: python) ve (bkz: java) arabirimleri linux, macos, windows, ios ve android'i destekler.

    (bkz: scikit-learn) , (bkz: scipy), (bkz: numpy) ve (bkz: matplotlib) üzerine kurulu makine öğrenimi için bir python modülüdür ve birçok popüler makine öğrenimi algoritmasının sağlam ve basit uygulamalarını uygulamayı kolaylaştırır.

    (bkz: weka) , bir grafik kullanıcı arabirimi, standart terminal uygulamaları veya bir java apı aracılığıyla erişilebilen açık kaynaklı bir makine öğrenimi yazılımıdır. öğretim, araştırma ve endüstriyel uygulamalar için yaygın olarak kullanılır, standart makine öğrenimi görevleri için çok sayıda yerleşik araç içerir ve ayrıca scikit-learn, r ve (bkz: deeplearning4j) gibi iyi bilinen araç kutularına şeffaf erişim sağlar.

    (bkz: caffe) , ifade, hız ve modülerlik göz önünde bulundurularak yapılmış bir derin öğrenme çerçevesidir. (bkz: berkeley aı research) (baır)/(bkz: the berkeley vision and learning center) (bvlc) ve topluluk katılımcıları tarafından geliştirilmiştir.

    (bkz: theano) , (bkz: numpy) ile sıkı entegrasyon da dahil olmak üzere çok boyutlu dizileri içeren matematiksel ifadeleri verimli bir şekilde tanımlamanıza, optimize etmenize ve değerlendirmenize izin veren bir python kitaplığıdır.

    (bkz: ngraph) , derin öğrenme için açık kaynaklı bir (bkz: c++) kitaplığı, derleyici ve çalışma zamanıdır. ngraph derleyici, herhangi bir derin öğrenme çerçevesini kullanarak ve çeşitli donanım hedeflerine dağıtarak aı iş yüklerini geliştirmeyi hızlandırmayı amaçlar. aı geliştiricilerine özgürlük, performans ve kullanım kolaylığı sağlar.

    (bkz: nvıdıa cudnn) , derin sinir ağları için gpu ile hızlandırılmış bir ilkel kütüphanesidir . (bkz: cudnn), ileri ve geri evrişim, havuzlama, normalleştirme ve etkinleştirme katmanları gibi standart rutinler için yüksek düzeyde ayarlanmış uygulamalar sağlar. cudnn, (bkz: caffe2) , (bkz: chainer) , (bkz: keras) , (bkz: matlab) , (bkz: mxnet) , (bkz: pytorch) ve (bkz: tensorflow) dahil olmak üzere yaygın olarak kullanılan derin öğrenme çerçevelerini hızlandırır .

    (bkz: jupyter notebook) , canlı kod, denklemler, görselleştirmeler ve anlatım metni içeren belgeler oluşturmanıza ve paylaşmanıza olanak tanıyan açık kaynaklı bir web uygulamasıdır. jupyter, veri temizleme ve dönüştürme, sayısal simülasyon, istatistiksel modelleme, veri görselleştirme, veri bilimi ve makine öğrenimi yapan sektörlerde yaygın olarak kullanılmaktadır.

    (bkz: apache spark) , büyük ölçekli veri işleme için birleşik bir analitik motorudur. scala, java, python ve r'de üst düzey apı'ler ve veri analizi için genel hesaplama grafiklerini destekleyen optimize edilmiş bir motor sağlar. ayrıca sql ve (bkz: dataframes) için (bkz: spark sql), makine öğrenimi için (bkz: mllib), grafik işleme için (bkz: graphx) ??ve akış işleme için (bkz: structured streaming) dahil olmak üzere zengin bir üst düzey araç setini destekler.

    (bkz: sql server) ve (bkz: azure sql) için (bkz: apache spark connector), büyük veri analizinde işlem verilerini kullanmanıza olanak tanıyan ve geçici sorgular veya raporlama için kalıcı sonuçlar sağlayan yüksek performanslı bir connectördür.

    (bkz: apache predictionıo) , geliştiriciler, veri bilimcileri ve son kullanıcılar için açık kaynaklı bir makine öğrenimi çerçevesidir. (bkz: rest apı)'leri aracılığıyla olay toplamayı, algoritmaları dağıtmayı, değerlendirmeyi, tahmine dayalı sonuçları sorgulamayı destekler. (bkz: hadoop), (bkz: hbase) (ve diğer db'ler), (bkz: elasticsearch), (bkz: spark) gibi ölçeklenebilir açık kaynak hizmetlerine dayanır.

    (bkz: bigdl) , (bkz: apache spark) için dağıtılmış bir derin öğrenme kitaplığıdır. bigdl ile kullanıcılar, derin öğrenme uygulamalarını doğrudan mevcut spark veya hadoop kümelerinin üzerinde çalışabilen standart spark programları olarak yazabilir.

    (bkz: eclipse deeplearning4j) (dl4j) , jvm tabanlı (scala, (bkz: kotlin), (bkz: clojure) ve (bkz: groovy)) derin öğrenme uygulamasının tüm ihtiyaçlarını desteklemeyi amaçlayan bir dizi projedir. bu, ham verilerle başlamak, nereden ve hangi biçimde olursa olsun, onu yüklemek ve önceden işlemek, çok çeşitli basit ve karmaşık derin öğrenme ağlarını oluşturmak ve ayarlamak anlamına gelir.

    (bkz: tensorman) , (bkz: system76) tarafından geliştirilen tensorflow kapsayıcılarının kolay yönetimi için bir yardımcı programdır. tensorman , tensorflow'un sistemin geri kalanından izole edilmiş bir ortamda çalışmasına izin verir. bu sanal ortam, temel sistemden bağımsız olarak çalışabilir ve (bkz: docker) çalışma zamanını destekleyen herhangi bir linux dağıtımı sürümünde tensorflow'un herhangi bir sürümünü kullanmanıza olanak tanır.

    (bkz: numba) , (bkz: anaconda), ınc tarafından desteklenen python için numpy ile uyumlu, açık kaynaklı bir derleyicidir. python söz diziminden makine kodu oluşturmak için llvm derleyici projesini kullanır. numba, birçok numpy işlevi de dahil olmak üzere sayısal odaklı python'un büyük bir alt kümesini derleyebilir. ek olarak, numba, döngülerin otomatik paralelleştirilmesi, gpu ile hızlandırılmış kod oluşturulması ve ufuncs ve c geri çağrılarının oluşturulması için desteğe sahiptir.

    (bkz: chainer) , esnekliği hedefleyen python tabanlı bir derin öğrenme çerçevesidir. çalıştırarak tanımla yaklaşımına (dinamik hesaplama grafikleri) dayalı otomatik farklılaştırma apı'lerinin yanı sıra sinir ağları oluşturmak ve eğitmek için nesne yönelimli üst düzey apı'ler sağlar.

    (bkz: xgboost) , yüksek verimli, esnek ve taşınabilir olacak şekilde tasarlanmış optimize edilmiş bir dağıtılmış gradyan artırma kitaplığıdır. (bkz: gradient boosting) çerçevesi altında makine öğrenimi algoritmaları uygular. xgboost, birçok veri bilimi problemini hızlı ve doğru bir şekilde çözen parallel tree boosting (gbdt, gbm olarak da bilinir) sağlar. aws, gce, azure ve (bkz: yarn) kümeleri dahil olmak üzere birden çok makinede dağıtılmış eğitimi destekler. ayrıca (bkz: flink), spark ve diğer bulut veri akışı sistemleri ile entegre edilebilir.

    (bkz: cuml) , diğer (bkz: rapıds) projeleriyle uyumlu apı'leri paylaşan makine öğrenimi algoritmaları ve matematiksel temel işlevler uygulayan bir kitaplık paketidir. cuml, veri bilimcilerin, araştırmacıların ve yazılım mühendislerinin, cuda programlamanın ayrıntılarına girmeden gpu'larda geleneksel tablolu ml görevlerini çalıştırmasını sağlar.
  • makine öğrenimi kullanarak kalp hastalığı tahmini için bir modelin eğitilmesine ait kodları ve pdf çıktısını paylaşayım. kullanılan dil (bkz: python). algoritma ise (bkz: lojistik regresyon).

    modeli eğitmek için kullanılan veri kümesinde 303 insana ait veri var. bunların 165'i kalp hastası, 138 kişi ise kalp hastalığı olmayan kontrol grubunda yer alıyor. veri kümesinde boş değer yok. verilerin %70 eğitim ve %30 test olarak ikiye ayrıldı ve model buna göre eğitildi.

    sonuçlara gelince; eğitim verileri üzerindeki doğruluk oranı (accuracy score): % 87.2. test verileri üzerindeki doğruluk oranı ise % 81,3. yani bu model daha önce hiç görmediği yeni bir insana ait veri geldiğinde yüzde 81.3 oranında kalp hastalığı olup olmadığını doğru tahmin ediyor.

    satır satır hangi kod ne işe yarıyor, ayrıntılı açıklamalarıyla türkçe yorumlandı. aşağıdaki bağlantılardan ulaşılabilir. genç dimağlar, faktörleri çoğaltarak modeli çok daha iyi bir hale getirebilirler.

    pdf file

    ipynb file

    github
  • 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
  • amacım tensorflow developer sertifikası sınavını geçmek, o yüzden bu aralar biraz çalışmalara hız verdim. bu sınav pycharm ortamında yapılıyor. sınavın içeriği şurada verilmiş. atla deve değil ama belli bir bilgi seviyesi istiyor haliyle. girip geçenlerin tavsiye ettiği, benim de bizzat yararlandığım kaynakları ilgilenenlerle paylaşayım dedim.

    nispeten matematiğine girmek isterseniz andrew ng'nin coursera'daki dersleriyle başlamak ilerisi için temel atmayı kolaylaştırır. ayrıca youtube linki de mevcut. coursera'nın salak sistemiyle uğraşmaya değmez. ders notları da burada. yalnız ucundan kıyısından lineer cebir öğrenmek şart.

    matematik şimdilik çok lazım değil derseniz çok başlangıç seviyesi pratik örnekler için toplam 10+4 saatlik şu iki videoyu (1.kısım, 2.kısım) tavsiye ederim. bu arkadaş bazı şeyleri biraz fazla tekrar ediyor, arada laf salatası da yapıyor ama 1.5x hızda ilerleyip örnekleri de aynı anda kodlarsanız workflow ister istemez kafaya iyice işliyor. kodların github linki. 2 günde hiç atlamadan bitirdim bu iki videoyu. bu arkadaşın sertifikaya yönelik zero to hero tadında bir ders serisi de var ama ücretli. gene de linki salayım şuraya.

    ardından laurence moroney'in youtube'daki serisine inceden bir bakış atmak bir önceki 14 saatlik videoyu pekiştirdiği gibi nlp'ye de göz kırptığı için geleceğe zihinsel hazırlık yaptırıyor. çıtır çerez, 1.5x hızda 1.5 saatte biter.

    bunların üstüne yine laurence moroney'in coursera'daki profesyonel tensorflow sertifikası adı altında 4 ayrı dersten oluşan 16 haftalık programını da ücretsiz olarak takip edince basit tensorflow okur yazarlığı elde etmiş olursunuz. 16 haftalık olmasi göz korkutmasın, hem videolar kısa, hem de alıştırmalar basit. şu adreste exercises altında alıştırmaların cevapları mevcut. diğerleri de derste işlediği kodlar. derse ücretsiz katıldığım için resmi olarak quizleri yapamıyorum ama karşılaştırmak için internette cevaplar mevcut. herhangi bir soruyu tırnak icinde aratınca github'da çıkıyor. 8 haftalık ilk iki dersi alıştırmalar, quizler dahil 8 saatte bitirdim. buna daha devam ediyorum.

    yine convolutional nn icin andrew ng'in şöyle bir serisi var. buna da göz atılabilir. kernel, padding, stride falan akılda canlandırmak için oldukça faydalı.

    "bu işlere nereden başlamalı?" şeklinde bir arama yaptıysanız karşınıza şu iki kitabı önerenler kesin çıkmıştır. aurelion geron'dan "hands-on machine learning with scikit-learn, keras, and tensorflow, 2nd edition" adlı kitabı (pdf için tık) ve içindeki örnek kodlar ve alıştırmalar için github linki. ikinci olarak da françois chollet'den "deep learning in python" (pdf için tık). ikisinden de şimdilik bir 50şer sayfa falan okudum, çok faydalı.

    github'da da binlerce repo bulmak mümkün. örnek için tık. olay tensorflow öğrenmekle bitmiyor ama maalesef. gerçek problemler bulup onları hayata geçirmek gerekiyor. kedi-köpek, insan-at klasifikasyonu falan işin en yüzeysel kısmı yani.

    neyse, bir yerden başlamak lazım sonuçta. şimdiden herkese başarılar.
  • abi okurken bu dersi almak istiyordum simdi cok pismanim diyen arkadaslar icin cok farkli kaynaklardan cok farkli sekillerde ogrenilmesi mumkun. sizin ogrenme seklinize en uyabilecek turunu bulup onunla ilgili dersleri izlemenizi tavsiye ederim orneklemek gerekirse

    stanford in openclassroom unda andrew ng tarafindan anlatilan dersler mevcut linki http://openclassroom.stanford.edu/…=machinelearning andrew ng genellikle matematik agirlikli bir anlatim dili kullaniyor (konu zaten matematik ya ne olacagidi demeden once asagidaki caltech derslerini de incelemenizi oneririm.) andrew ng nin machine learning derslerine ayrica youtubedaki su listeden de ulasabilirsiniz https://www.youtube.com/…e&list=pla89dcfa6adace599. ama buralara girmeden once calculus, ve mathematical statistics derslerini almanizi ya da biliyorsanizda bir daha gozden gecirmenizi oneririm. yoksa tahtadaki (openclassroom icin ekrana yazdiklari) size cok bir sey ifade etmeyebilir.

    mit nin patrick winston tarafindan artificial intelligence adi altinda anlatilmis ders koleksiyonuna su youtube listesinden ulasabiliyorsunuz https://www.youtube.com/…gp63gfhb6xb-kvbiqhye_4hsi. patrick abinin ilk derslerini (hatirladigim kadari ile ilk 7 ders falan) isin felsefik boyutunu kavramak adina bu listelerden hangisini secerseniz secin yine de izlemenizi oneririm. cok farkli noktalarda kafa aciyor konuya bakis acinizi degistiriyor acikcasi. ama anlatim dili ve tarzi sizi yorabilir. ayni derslerin aduni.org daki versiyonlarinda daha enerjik sanirim yaslandikca ici gecmis. cok fazla konuyu zaten bildiginizi varsayiyor ve uzerinde fazla durmuyor/aciklamiyor. surekli siz ne anlarsiniz lan tarzinda bir tavri var. kendince de hakli adam.

    son olarak caltech in https://www.youtube.com/…lpicgphduidywssuev8jvelsei su online course listesi mevcut. goreceli olarak daha az matematige boguldugunuz tabiri caizse daha practical bir course bu. yaser abu-mostafa abinin misirli olmasi sizin icin ingilizcesini belki daha basit/anlasilir kiliyor bile olabilir. digerlerinin aksine burada q&a sessionlar da mevcut ve sorulan sorular ta ler tarafindan seslendirildigi icin daha verimli. diger serilerdeki sorulan sorulari hoparlorleri kulaklik gibi kulaginiza dayayarak ancak duyabiliyorsunuz ki buna ragmen cogu anlasilmayabiliyor.

    ulan biz bunlari zaten youtube ta arama yaparak bulabiliyoruz diyen arkadaslar icin gelsin; amacim buradaki listelerin hepsine mesai harcamis biri olarak ilgili olan ve konuya yeni bulasmaya baslamis arkadaslara ogrenme profiline en uygun olacagini dusundugum yonlendirmeyi yapabilmek. benim cektigim cileleri cekmesin istememdir.

    bunun haricinde sahsim spesifik olarak nlp ile ilgilenmekte. bununla ilgili de onerebilecegim girla open course mevcut. eger soru sormak bilgi paylasmak isteyen olursa emel sayindan gelsin bak yesil yesil. umarim birilerinin isine yarar.
  • yapay zeka* biliminin babası marvin minsky, yapay zekayı şöyle tanımlar:

    "the science of making machine do those things that would be considered intelligent if they were done by people."

    yani baba aslında diyor ki; birader, öyle bir makine yapalım ki, en gerizekalı versiyonu bile aklı başında bir insandan beklenebilecek, kabul edilebilir düzeyde zekice bir performans göstersin. böyle bir makinenin tasarımında da ilk esin kaynağı doğal olarak insan beyni ve sinir sistemi olacağından, beyin hücrelerinin işleyişinden yola çıkılarak 1950'li yıllarda yapay sinir ağlarına (bkz: artificial neural network) dayalı çeşitli öğrenme modelleri geliştiriliyor (bkz: hebb kuralı). daha sonra 1960'lı yılların başında bir örüntü tanıma* problemini çözebilmek için ilk kez perceptron kavramı ortaya atılıyor. fakat marvin ve saz arkadaşları bakıyorlar ki bu tek katmanlı*, ilkel perceptron'lar xor gibi bir fonksiyonu bile öğrenmekten acizler. yani yalnızca doğrusal olarak ayrıştırılabilir (bkz: linearly separable) problemleri çözebiliyorlar. doğrusal olarak ayrıştırılamayan problemlerin çözümü için de çok katmanlı* sinir ağlarına ihtiyaç var. lakin, çok katmanlı ağ topolojisine sahip bir model ile öğrenme sürecinde ise algoritmanın hesaplama karmaşıklığı üstel olarak artış gösterdiği için, haliyle dönemin* bilgisayarlarının işlem kapasitesi bu problemin polinom zamandaki çözümünde yetersiz kalıyor. bunun üzerine millet uzunca bir süre elini eteğini çekiyor bu yapay sinir ağı araştırmalarından*. gelgelelim, sonraki yıllarda kernel trick gibi, sınıflandırmada* doğrusallık problemine çözüm olabilecek tekniklerin, özellikle yapay sinir ağları ile öğrenmede ve ağırlık vektörlerinin güncellenmesinde bir çeşit geriye doğru automatic differentiation tekniği olan backpropagation tekniğinin uygulanmasıyla birlikte, 1980'lerin sonundan itibaren yapay sinir ağları alanındaki araştırmalar yeniden yükselişe geçiyor.

    günümüz teknolojisindeki gelişmelerle beraber, bilhassa çok çekirdekli* mikroişlemci tasarımları, vektörel işlemleri ve matris çarpımlarını bir çırpıda yapabilecek** yüksek kapasitede işlem gücüne sahip grafik işlemcilerin (bkz: gpu) geliştirilmesiyle -ve fiyatların ucuzlamasıyla- birlikte, makine öğrenmesi alanındaki uygulamalar da ivme kazanıyor ve son yıllarda bu denli popüler oluyor. peki, neden bu teknikler geliştiriliyor, nedir olayı? adam gibi bir tane teknik geliştirsek olmaz mıydı? yanıt: olmazdı. soru: niye olmazdı? yanıt: çünkü, işte. demeyi isterdi deli gönlüm... lakin bu sorunun geniş kapsamlı yanıtı, bütün bir makine öğrenmesi ve istatistik bilimi külliyatını kapsayacağı için, biz en basit ve en anlaşılır yanıtla yetinelim şimdilik. yanıt: çünkü farklı problemler ve farklı veri tipleri var. nasıl ki insanoğlu, bisiklete binmeyi/denge kurmayı (bkz: feedback) (bkz: control theory) (bkz: non-linear systems), bilinen iki nesneyi birbirinden ayırt edebilmeyi (bkz: classification) yahut kendi aralarındaki benzerliklere göre gruplandırabilmeyi (bkz: clustering) veya geçmişte yaşanmış olaylara, ipuçlarına dayanarak gelecekte olabilecek bir olayı tahmin edebilmeyi ya da öngörebilmeyi (bkz: prediction) (bkz: regression) farklı öğrenme süreçleri neticesinde başarabiliyorsa, aynı durum makineler için de geçerli. dolayısıyla, duruma göre, eldeki veri tipine göre, uygulanacak öğrenme modeli de farklı.

    örneğin, yapay zeka alanında deterministik ve deterministik olmayan problemler için yaklaşımlar farklı olurken; makine öğrenmesinde, aynı tipte bir problemin benzer tipte veriler üzerinde işlemesine yönelik geliştirilmiş iki farklı öğrenme tekniği arasında, hız/performans kıstası göz önünde bulundurularak, biri diğerine göre tercih sebebi olabiliyor. ya da elimizde büyük miktarda veri (bkz: big data) var diyelim ve bununla ne halt edeceğimizi bilemiyoruz... milyonlarca veriyi kısa sürede ayrıştırarak, anlamlandırmaya çalışmak insanoğlunun bilişsel yeteneklerinin çok ötesinde. fakat beri yandan, enteresan kurallar ve ilişkiler de çıkarsamak istiyoruz bu veri yığınından. arsızın önde gideni, bayrak sallayanıyız yani. işte burada da devreye veri madenciliği* konusu giriyor. ve istatistiksel yahut kümeleme tabanlı makine öğrenme teknikleri ile bir güzel çakışabiliyor matematiksel modelimiz mesela. marketten bebek bezi satın alan adamın neden zaman içerisinde dramatik bir şekilde bira göbeği sahibi olduğunu falan keşfetme ayrıcalığını yaşayabiliyoruz... (bkz: association rule mining)

    şimdi gelelim derin öğrenme* mevzusuna... derin öğrenme, temel olarak yukarıda değinilen çok katmanlı yapay sinir ağı topolojisinde, çok sayıda gizli katmana* sahip olan ve öğrenme aşamasında büyük miktarda verinin işlenmesi neticesinde ortaya çıkan matematiksel modele dayalı olarak, anlamlı ve yüksek başarımlı bir sınıflandırma/tahmin çıktısı üretebilen, bir makine öğrenmesi tekniğidir. günümüzde özellikle, örüntü/nesne tanıma* ve ses tanımada*, doğal dil işlemede*, satranç, go gibi kural tabanlı oyunların öğrenilmesinde*, hatta bazı video oyunlarında** gösterdiği başarımın, aynı görevler için klasik makine öğrenmesi algoritmaları ile eğitilmiş modellerin gösterdiği başarımdan üstün olduğu kanıtlanmıştır. lakin, çok daha az miktarda veri kullanılarak eğitim süreci gerçekleştirildiğinde, klasik makine öğrenmesi algoritmalarının daha başarılı sınıflandırma/tahmin sonuçları verdiği bilinmektedir. bu anlamda ikisi arasında bir trade off mevcuttur. öğrenme süreci doğrudan gözetimli öğrenme (bkz: supervised learning) kategorisinde olmadığı gibi, gözetimsiz öğrenme (bkz: unsupervised learning) kategorisinde de değildir. hibrit bir yapıdadır. zira klasik makine öğrenmesinde özellik çıkarımı (bkz: feature extraction) ve sınıflandırma (bkz: classification) aşamaları ayrık durumdayken, derin öğrenmede katmanlar arasına yedirilmiştir ve bir bütündür. klasik tekniklerde en iyi sınıflandırma/tahmin başarımına ulaşabilmek için uygun özelliklerin seçilmesi gerekirken, derin öğrenmede böyle bir işleme gerek yoktur. derin öğrenme mimarisinde, gözetimsiz öğrenme katmanında kullanılan aynı giriş/çıkış vektörlerinden elde edilen ağırlık değerleri, gözetimli öğrenme yani sınıflandırma katmanında başlangıç ağırlıkları olarak atanır. öğrenme süreci gizli katmanlar arasında arttırımlı* olarak ilerler. bunu şöyle düşünebiliriz, söz gelimi, yazılı bir metnin öğrenilmesi sürecinde; önce harflerin anlamlandırılması, daha sonra bu harflerden oluşan kelimelerin öğrenilmesi, kelimelerden cümlelerin, cümlelerden bütün metnin... gibi. bu aşamada mimarinin geri kalanı bildiğimiz yapay sinir ağı sınıflandırıcısıdır* ve klasik teknikle örtüşür. tabii modelin öğrenilmesi sürecinde bütün bu işlemler ve çok sayıda katmanın varlığı, ciddi bir işlemci gücüne gereksinim duymaktadır. işte bu durum da üst paragrafta işaret edilen yüksek performanslı ve çok çekirdekli cpu/gpu teknolojilerini adreslemektedir. bu anlamda, öğrenme sürecinde kaynak tüketimi daha fazladır denilebilir. kavramsal olarak değerlendirmek gerekirse, yapay zeka alanı makine öğrenmesi tekniklerini kapsarken, derin öğrenme de makine öğrenmesi teknikleri kümesinin bir alt kümesidir ve bir tekniktir. fakat klasik anlamda bir makine öğrenmesi tekniği değildir. modern ve nispeten daha maliyetli, buna mukabil yüksek başarımlı bir öğrenme tekniğidir.

    filhakika, şunu çok iyi anlamak lazımdır ki; doğada hiçbir süreç tam anlamıyla lineer değildir. göreceli olarak, geniş bir periyotta bütün sistemler non-lineer davranış göstermektedir. buna makinelerin öğrenme süreci de dahildir. insan algısı ve içgüdüleri mükemmelliği doğrusallıkta aramakta ve fakat bulamamaktadır. neden? çünkü, doğrusallık basittir. anlaması basittir bir kere, üzerinde çalışması basittir, mutabakata varması kolaydır, test etmesi basittir. düz adamlık da basittir. insanın fizyolojik yapısı, öğrenme, düşünme ve karar verme süreçleri çok karmaşık olsa da; özünde, bilişsel yetenekleri çok sınırlı olan varlıklar mıyız, neyiz? bilemiyorum altan, bilemiyorum.

    kırmızı hap mı, mavi hap mı?

    reloading the matrix...
  • istatistik ile bilgisayar bilimlerinin birleşimi olan alan. veride var olan örüntü* kullanılarak veriden bilgi çıkarılması olayıdır. makine öğrenmesi bu işe kural temelli* bir algoritma şeklinde bakarken istatistiksel öğrenme ise değişkenler arasındaki ilişkinin formüle edilmesi olarak bakar. ama temelde yapılan şey veriden öğrenmektir. aslında her ikisi de aynı şeyi yapmaktadır. günümüzde bunları kıyaslamanın da bir manası yok bence.

    nereden başlamalı ne yapmalı konusunda naçizane * fikirlerim ile 3 -5 link paylaşacağım. zira ben de yeni öğrenmekteyim.

    öğrenim açısından ilk tavsiyem bilgisayar mezunu istatistik yüksek lisansı, istatistik mezunu biri de bilgisayar yüksek lisansı yaparsa şu diyagramın büyük bir kısmını halletmiş olur zaten. bunu söylememin en büyük nedeni aha da bu. ha yüksek yapamıyor musunuz? misafir gidin, özel öğrenci olun vs. ama kıyısından köşesinden diğer pencereden bakmaya çalışın.

    coursera, udemy, udacity machine learning dersleri ile dolu. andrew ng bu işin piri. başlangıç için onun dersleri fena olmaz. ben yine de şöyle bir link bırakayım buraya.

    şu sıralar data science alanında en çok tartışılan şeylerden biri de python vs. r. ikisinden birini biliyorsanız tavsiyem diğerini de öğrenmeniz. ikisini de mi bilmiyorsunuz? hangisinden başlamalı konusunda fikir verebilir. ama ikisini de bilmek bence fazlasıyla avantajlı.

    r ya da python biliyorum diyorsanız da şu paketlere göz atabilirsiniz.
    r için <- data table, dplyr, caret, h2o, xgboost, ggplot2.
    python için = sklearn, h2o, xgboost, matplotlib, seaborn, numpy, pandas.

    uygulama kısmı bence en önemlisi. o kadar ders izledik, dersteki uygulamaları yaptık ama ben başka bi veri gelince yapamıyorum, eğitim verisinde çok iyiydim ama test verisinde sıçtım diyorsanız* çare kaggle. kaggle bi yeniliğe gitti ve artık veri setinizi paylaşabiliyorsunuz. tabi ki tüm olay bu değil. veri setlerini analiz etmek için yazdığınız kodları da (r, python ya da julia olabilir) notebook ya da markdown şeklinde paylaşabiliyorsunuz. dolayısıyla az çok problemlerin nasıl çözüleceğine dair fikir sahibi olabiliyor, "oha ulan ne kodlar var" diye içinizden geçirebiliyorsunuz. kaggle öğreticilik açısından çok iyi. mesela ben uygulamadan teoriye giden biri olduğum için çatır çatır çalıştırdığım kodlar ne yapıyor diye günlerdir kaggle forumlarını, xgboost dökümanlarını okuyorum. kaggle kesinlikle yatırım tavsiyesidir.

    reddit'in data is beautiful ve machine learning sub-reddit'leri takip etmelik yerler. yakın zamanda çıkan makale ıvır zıvırı kolayca takip edebilirsiniz buralardan.

    son olarak github'dan derlediğim awesome list vb. repo'lar. göz atmakta fayda var. kıpss ;)

    awesome machine learning

    dive into machine learning

    python machine learning

    machine learning tutorials

    machine learning for hackers

    data analysis and machine learning projects

    data science python

    not: başta belirttiğim gibi kişisel fikirlerim. o yüzden mahmut sen haksızsın ibne olmasın lütfen.

    edit: bu da #59687708 derin öğrenme için olanı.
  • #63835150 no'lu entry'de verdiğim linklere ek olarak birkaç kaynak daha paylaşacağım. ara ara bu tarz eylemlerim devam edecek. vatandaşa cart curt yok, vatandaş verisini analiz edecek!

    python'da scikit dökümanlarını takip ederek giden, türkçe videolu anlatımların olduğu bir youtube kanalı var. bu konularda türkçe materyal olması adına süper hareket!

    (yatırım tavsiyesi) edu uzantılı mailiniz ile github education'a üye olarak 1 ay boyunca udacity nanodegree programlarından faydalanabilirsiniz. misal. (tüyo: her derse kayıt olup sağ üstten download course materials)
    (bkz: github education pack)

    edit: githun education pack'ten udacity kısmını kaldırmış maalesef.

    genellikle r kullanıyorum o yüzden r ile ilgili birkaç paket önereceğim. şu sıralar caret paketine sardım. döküman desteği canavar. veri önişleme olayını çok kolay hale getiriyor. pek çok paket desteği var, 200 küsür algoritmayı çalıştırmanız mümkün. görselleri de lattice paketi ile yapıyor. ee daha nolsun? ensemble modeller kurmak isterseniz de caret ensemble adında bir paket mevcut. caret ile ilgili bir döküman daha

    rstudio'nun chief data scientist'i olan, rstudio'nun son yıllarda atağa kalkmasını sağlayan hadley * reyiz'in r for data science adında bir kitabı var. r ile bu işlere girişmek için güzel bir kaynak.

    aslında derin öğrenme konusu ama r'dan devam ediyorken belirtmek istedim. tensorflow ve keras için iki paket var. (tensorflow'u 64 bit windows'a kurabiliyorsunuz. tf kullanarak keras kurmanız da mümkün. dolayısıyla bu paketleri windows'da kullanabilirsiniz.)
    (bkz: tensorflow/@rahmetli de sollardi)

    amme hizmeti yapan, algoritmaları karşılaştıran machine learning benchmark repo'su var ki dadından yenmiyor.

    uygulama kısmı için kaggle'da güreş tutmalık iki yarışma var. biri house prices: advanced regression techniques diğeri de allah'ın emri olan titanic: machine learning from disaster veri setleri. her ikisinde de kayıp gözlemleri (missing values) tahmin etmek/doldurmak (imputation) gerekiyor. ayrıca regresyon ve sınıflama da yapılabilir. olay hep tahmin/sınıflama gibi gözükse de bi de işin görselleştirme kısmı var ki onlar için de güzel kernel'lar var (görselleştirmeye de değineceğim bi ara). bi de gözlem sayılarının (kaggle yarışmalarına göre) az olması itibariyle de bilgisayarı çok yormayacak veri setleri bunları. kernel'ler de mevcut. (kopya çekmek hiç bu kadar keyifli olmamıştı)
  • sıkı tutununun uzun entry geliyor

    öncelikle konu hakkında lisansta konuyla ilgili dersleri almış yüksek lisansını nlp alanında bitirmekte olan biri olarak bir uzman görüşü olarak değil bilgi kirliliğine akademik ve nizami bilgi sokmak amacıyla bu entryi girmeyi düşündüm. ilgili referanslara [1] şeklinde bulabilirsiniz, malesef referanslar ingilizce olacaktır, türkçe kaynak bulmak hem zor hem güvenemedim. iyi okumalar.

    öncelikle tanımlar ve nedir ne değildir üstünden gidelim.

    makine öğrenmesi nedir : makine öğrenmesi kitapta yazan tanımı kullanmadan söylemek gerekirse bir algoritma ile elektronik bir alete insana yakın veya daha tutarlı ve hızlı karar verme yetisini kazandırma işidir. örneğin bir bilgisayar grip konusunda kararını istatiksel önemli (ing. statistically significant) [1] bir doğrulukta ya da düz hesap %99.9 doğrulukta veriyorsa doktorun yerine geçebilir. ama geçmeli midir? yani doktorlar da gayet yüksek doğrulukta karar veriyor. burada da hız var doktor 10 dakikasını harcarken makine 30 saniyede işini bitirmiş olabilir bu gayet mantıklı bir sebep yaratır. makine öğrenmesi için bu şekilde karar verebilen bir mekanizma yapmanız yeterlidir. yani kullandığınız algoritmanın dünyanın en gelişmiş en yeni modeli olmak zorunda değil, bayes theorem bile bir makine öğrenmesi modeli geliştirmek için yeterlidir eğer problem uygunsa. yapay zeka'nın bir alt dalıdır.

    makine öğrenmesini nerelerde kullanabiliriz : hemen hemen arzu edilen, problemin uygulanabilirliği olduğu her yerde. örn. savunma sanayi, tıp, yazılım/bilişim, güvenlik sistemleri, seri üretim tesisleri, eğitim, finans ... vb. problemin uygulanabilirliği kelimesi burada anahtar kelimedir. nedir peki bu, örneğin borsa, borsayı yüksek doğruluk oranıyla tahminleyecek bir model şuanki bilgilerle mümkün değil. borsa başlıklarında linear regression kullananları görünce ağlayacak gibi oluyorum sinirden. neden kullanılamaz peki? çünkü kaotik ve spekülatiftir. böyle bir model haberleri takip etmeli, televizyon izlemeli. amerikan başkanının açıklaması ile 0.40 artıyorsa dolar bunu öngörebilmeli çünkü modelin tüm işi öngörmek. ama haberleri twitterı takip etmiyorsa amerikan başkanının açıklamasını bir anomali (ing. outlier) olarak görecektir. şuanki teknik gelişmeyle pek mümkün değil borsayı modellemek. bu şekilde bir şablonu (ing. pattern) olmayan problemlerde herhangi bir şey öğretemezsiniz zira kaotik bir yapıdır bu.

    makine öğrenmesi ile öğrenilen nedir: matematiksel modeldir. problemin matematiksel bir modeli otomatik bir şekilde öğrenilmiş olur. buradaki otomatik bayesian ya da frequentist bakış açısını temsil eder. bayesian vs frequentist karşılaştırmasını açıklayalım, bayesian inference bayesçi çıkarsama önceki verilerin dağılışını modelleyip gelecekteki verilerin de böyle davranacağını öngörür [3], frequentist (tr. sıklıkçı, frekansçı) bakış açısı matematiksel ve parametriksel bir çıkarım yaparak benzerlik fonksiyonu (ing. likelihood function) yaratır. yani (yanide örnek bir yazı var konuyla ilgili) bayesian grubu der ki abi önceki verileri kullanarak olasılık hesaplayacak veriler güncellenebilir gerçek dünya sıkıntılı, frequentist der ki abicim veri dediğin şey bir matematiksel model ile tekrarlanabilir örnek grubundan rastgele örnekler alınarak bu frekans ile işlem yapılabilir [4]. sonsuz sayıda veri ile ikisi de aynı sonucu verir ama rahat olun. sadece kısıtlı bilgi sahip insan evladı tarafından iyisi kötüsü seçilmelidir. makine öğrenmesi algoritmaları ikisini de kullanabilir, kullanır.
    konuya dönecek olursa makine öğrenmesi ile ne öğreniriz? makine öğrenmesi size bir model çıkartır, modellenebilir uzayın matematiksel modelidir bu. verilerin bir şablona (ing. pattern) uyduğu varsayımından yola çıkarak size özellik (ing. feature) verir. tüm yaptığı budur. ilahi bir anlam yükleyemeyiz. aşkı öğrenir, insanların geleceğini tahminler ve en erdemli yaratıktır şu bu, öyle şeylerden oldukça uzaktır alakası yoktur. yapay zeka üst ailesi de aynı şeyleri öğrenmektedir. örnek verelim, diyelim ki dünyadaki tüm ülkelerdeki insanların taş atış biçimlerini tahminlememiz lazım, bu taktirde şunu yapmalıyız, parametreler neler: taş atış açısı, taş atış hızı, kol uzunluğu, boy uzunluğu, rüzgar. bu bilgilerle taş atışını simüle edebiliriz bireylerin. diyebilirim ki ortalama bir ganalı taşı 3m öteye atar ama bu ganalının boyu 10cm uzunsa 3.2m öteye atar. bunu yaparken parametrelerimizi bulduk, şimdi model oluşturacağız. buradaki taş atış açısı hızı kol uzunluğu hepsini fizik dersinde öğrendiğimiz eğik atış denklemleriyle oluşturduk diyelim. şimdi bir ganalı ve bir türkün parametrelerini öğreneceğiz. o zaman örnek lazım bize. gidip türkiyenin ve gana'nın farklı bölgelerinden o bölgelerin nüfus yoğunluğuna göre örnek topladık, insanlara taş attırdık hızını ölçtük kollarını ölçtük vs. şimdi elimizdeki parametreleri öğrenmemiz lazım, o zaman sırada bu parametrelerin nasıl dağıldığını bulmak var. diyelim ki gaussian distribution dediğimiz gaussian dağılıma sahip olsun o zaman bu veriler ışığında bir güven aralığı belirleriz, ve bu güven aralığı arasında kalan bütün veriler türklerin parametreleridir deriz, daha sonra bu parametreleri eğik atış denklemleriyle oluşturduğumuz modele verirsek türkler gibi taş atacaktır. [2](referans diğer uygulamaları gösterir) böyle saçma bir şey için bile çok gayret istiyor. ama genel olarak süreç bu, gördüğünüz gibi çok uzay işi değil, böyle bir süreç ile düşünebilen bilgisayar yaratmak vs gibi mevzular hayal. konuşmak bile saçma. tekrarlıyorum şuanki bilgilerle.

    sıkılmayanlar ve ilgililer için artık teknik makine öğrenmesi kısmına geçiyoruz. anlamadığınız ve referans vermediğim terimleri googlede araştırıp öyle okumaya devam etmenizi öneririm. buradan sonrası içinde daha fazla ingilizce terim barındaracak malesef.

    öğrenme çeşitleri:
    supervised learning: supervised learning yöntemlerinde elimizde probleme dair veriler bulunmaktadır. probleme uygun bir model oluştururuz, bu modeli elimizdeki verilerle eğitiriz ve daha sonrasında bu model gerçek dünyadan gelen verileri doğru tahminleyeceğini umarız. yani düşündüğümüz en başından beri konuştuğumuz öğrenme yöntemi budur. önce elinde başlangıç verisi olsun onu oluşturduğun modeli eğitmekte kullan sonra piyasaya sal çalışsın. böylesine basit bir anlatımda sormadığımız nice soru bulunmakta. örn. veriler yeterli sayıda mı? verilerde yanılsama (ing. bias) (seçim anketi için sadece izmirde anket yapmak mesela) bulunmakta mı? modelin problemi açıklayabilecek kadar karmaşık mı? modelin problemi açıklamak için fazla mı karmaşık? eğitim setinin %20sini kenara ayırıp test etmek için kullandın mı, kullandıysan tahminleme doğruluğun %kaç? bu soruların hepsine tatminkar cevap vermeden kimse dönüp yaptığınız işe bakmaz.
    supervised learning algoritmaları: linear regression, logistic regression, k nearest neighbor, neural networks, support vector machine ...vb

    unsupervised learning: bu arkadaşlar da daha veri gelirken onun hakkında tahminin yapar. eğitim verileri yoktur. eğitim veriniz yokken probleminiz uygulanabilir haldeyse kesinlikle durmayın. veriniz varken de kullanılabilir pek tabi. genel olarak dimensionality reduction ve clustering gibi alanlarda sıkça kullanılır. dimensionality reduction dediğimiz şey örnekle açıklamak gerekirse taş atma modelinde uzayımız şu boyutlardan oluşur [kol uzunluğu, rüzgar, taş atma açısı, taş atma hızı, boy uzunluğu] burada kol ve boy uzunluğu doğru orantılıdır, birbirleriyle linearly dependant yapıdadır. bu da demek oluyor ki birini kullansan yeter durduk yere daha karmaşık yapma sistemi. dimensionaly reduction (tr. boyut azaltma) dediğimiz şey bunu yapıyor ve birbirlerinden bağımsız olanları tutup diğerlerini eliyor diyebiliriz kabaca. clustering dediğimiz şey kümeleme yukarıda verdiğim uzayda (taş atma) boyut düşürmezsek 5 boyut var. bu 5 boyutu kullanarak bir kümeleme yapabiliriz. mesela boyut1 i (kol uzunluğu) 60-70cm arası olup bulunduğu yerdeki rüzgar 10m/s.... şeklinde bir tanım yaparak bu tanım etrafındaki kişileri, yani benzer özelliklere sahip kişiler bir gruptur diyebiliriz. bu grup bize bir ülke olarak tanımlanabilir, yani gana ile türkiyeyi ayırabilir taş atışında. k means algoritması buna güzel örnektir. görselle anlatabiliriz kümeleyi. k means ise başta sizden k tane ortalama (ing. mean) değeri ister, daha sonra gelen her veriyi bu k tane gruptan en yakın olanına atar, her atamadan sonra mean değerlerini tekrar hesaplar, böyle böyle yapar gider, sizede k tane güzel grup verir.
    unsupervised learning algoritmaları: k means, hierarchical clustering, dimensionality reduction...vb.

    reinforcement learning : en ilginç ve şuan yeni yeni doğrulmuş olup çeşitli problemi vardır hala. bu öğrenme şekli ödül mantığına dayanır. bir hayali denekimiz (ing. agent) vardır. bu denek başta rastgele kararlar verir, bu kararların sonunda + bazen de probleme göre - puan alır. denekin tek amacı alabileceği en yüksek puanı almaktır. başta rastgele hareketler yapıp etrafını keşfeder, bu saçma hareketler daha sonra + aldığı yöne doğru yakınsar. amacı + almak olduğu için artık + yönünde gitmeye başlar. temel olarak budur. bir model oluşturup bu modele + - puan vererek doğruyu kendi bulmasını sağlamak. oyunlarda çokça kullanılır. openai adlı şirket, dota 2 oyununda bu yöntem ile pro oyuncuları yenebilen bir bot geliştirmiştir. temeli aynıdır. videoda görüleceği gibi bir şekilde kötü başlayıp toparlıyorlar. tabi o videoda genetic algorithm de kullanılmış. kötü yanı ise çok iyi bir amaç fonksyionu (ing. cost function) lazım, makineye nerede ne kadar + vereceğiz nerede vermeyeceğiz çoğunu iyi hesaplamalısınız, ek olarak çok fazla zaman alır öğrenmesi, hayvan gibi bilgisayar ve zaman ister, ek olarak kolay overfit eder. yani diyelim sağ üstte ama yukarıda bir ödül var ve 1milyon değerinde. eğer sağ altta ama çok yakında bir ödül varsa oraya gidip oturabilir. çok rahat ve kolaylıkla yapar bunu. 1milyonluk ödülü görmüyordur görse gider ama gördüğü ya da deneyimlerinden yola çıkarka en çok burası puan veriyor diyip sağ alta oturur. tabi bunu önlemek için çeşitli yöntemler var ama genel olarak bu algoritmalar kolay overfit ediyor ve genel bir çözüm veremiyor. çeşitli yöntemlerle bu overfitten kurtulunabiliniyor ama belirli ölçüde. openai ın dota botunda da aynısı var belirli stratejilere oturuyor, 100 farklı stratejiden en mantıklısını seçmek yerine en yüksek getiri veren strateji ile devam ediyor o da agresif oyun.
    reinforcement learning algoritmaları: q learning, sarsa, dqn ... vb.

    makine öğrenmesi alanına gireceklere bakmaları gereken konular için tavsiyeler:
    overfit vs underfit
    model complexity
    bias vs variance
    bayesian vs frequentist
    sampling (elektronikteki signal sampling değil data spaceden sample bu)
    sampling bias

    felsefik bakış açılarına biraz da cevap verelim.

    yapay zekalar insanın yerine geçecek : hem evet hem hayır. iş alanında evet, sosyal alanda hayır. yani robot sevgiliniz falan olmayacak, yukarıyı okuyanlar zaten işin baya matematik olduğunu ve öyle aşık olan robot vs oralara fersah fersah uzak olduğumuzu anlamıştır. ama kusura bakmayın sanayide paşa paşa geçecek. ama bu da başka iş kolları oluşturacak kuşkusuz. üretim ucuzlarsa daha fazla oyuncu girer pazara, daha fazla oyuncu rekabet ile fiyatı düşürür işimize gelir, böyle bir ortamda teknoloji o pazara değil yeni pazarlara yönelir yeni bir pazar oluşturur böyle gider işsiz kalmazsınız yani.

    neden düşünen robot yapılamıyor şuan : von neuman mimarisi dediğimiz mimariyi kullanıyor şuan bilgisayarlar. basit bir mantık mimarisi bu. bu mimari ile temel mantık operasyonlarını yapabiliyorsunuz ve bu operasyonları karmaşıklaştırdıkça daha karmaşık işler yapabiliyorsunuz. faakkaaatt... halting problem diye bir şey var [5]. hemen açıklayayım. "bir makinenin ne zaman duracağını veya durmayacağını bilebilen evrensel bir makine yapılamaz" diyor. örnekleyelim. bir makinemiz var bu makineye girdi (ing. input) olarak herhangi bir makinenin tasarımını veriyorsunuz ayrıntısıyla. yani makinemiz herhangi bir makinenin bütün detay bilgilerini alıyor ve sonuç (ing. output) olarak çalışır ya da çalışmaz diyor. yani bilgileri verilen makine çalışır mı çalışmaz mı bunu söylüyor. diyelim ki bu makinenin önüne kendisine verilen inputu tersine çeviren bir makine daha ekleyelim. yeni makinemiz çalışır diyince bu küçük makineye çalışır yazısı giriyor o da çalışmaz yazısı çıakrtıyor. yani şuanki makinamız çalışacak makine için çalışmaz çalışmayacak makine için çalışır diyor. pekiiiii bu yeni makinemize kendi tasarımını girdi olarak versek ne cevap verir? dediğim gibi yeni makinemizde 2 parça var biri çalışır çalışmaz diyor diğeri sonucu tersine çeviriyor, makinemizin ilk parçasına controller, ikinci parçasına inverter, bu ikisinin de birleşimi olan makinemizin toplamına da eksi diyelim. şimdi eksimakinemiz kendi tasarımını değerlendirirken controller parçamız çalışır sonucunu verdi diyelim, ama tersine çeviren inverter aygıt onu çalışmaz olarak çıkarttı, yani bizim eksi makinemizin çalışmaz sonucu vermesi gerekiyordu ama eksi makinesi çalıştı ve sonuç üretti ve bu sonuç çalışmaz oldu, aynı zamanda herkesi mükemmel kontrol eden controller parçası yanlış sonuç üretti. olmadı, o zaman controllerçalışmaz desin, bu sefer tersine çeviren inverter bölüm çalışır diye sonuç üretecek ama her şeyi bilen controller bölümümüz çalışmaz diyordu. bu bir ikilem yaratıyor ve kısır döngüye giriyor. bu kısır dönügüyü aşabilecek bu kısır döngüyü kendi içinde farkedecek bir sistem yaratamıyoruz malesef. von neumann architecture buna izin vermiyor. yeni bir bilgisayar mimarisi belki çözer ama onu görmeye ömrüm el vermez bence. yukarıdaki örnek karmaşıksa videosu linkte ingilizce anlatılıyor, ben türkçesini anlattım, video ile bağdaştırırsanız demek istediğimi anlayabilirsiniz.
    yani sözün özü bilin sahibi robot şuanki teknik bilgiyle imkansız. çünkü en başta çözemeyeceğini garanti ettiğimiz bir halting problemi var, mesel insanoğlu bunun bir çıkmaz yarattığının ve halting problemin kaynağını anlayabiliyor ki bu da soyutlama yeteneğimiz ve bilincimizle mümkün. sonuç olarak düşünen robot vs uzağız, yolun sonu orası, ama yol o kadar uzunki bunu tartışmak (yapılabilir mi yapılamaz mı vs) bilime katkı sağlamıyor, felsefeye sağlıyor sadece. bu sebeple bilim dünyası insana yakınsayan ve tutarlı karar veren sistemleri akıllı diye nitelendiriyor. nolur bir daha bu başlığa ya da yapay zeka başlığına ama öğrenmiyor bilinçli değil ki insan değil ki vs yazmayın, yazacaksanız da bilime dayandırarak yapma gayretine düşmeyin felsefik bir problem bu, bu bağlamda tartışınız.

    peki düşünen robot yapamıyorsak yapay zeka falan yalan mı: ne alakası var. yapa zekanın gayesi insana benzer kararlar verebilecek yapay bir alet yaratmaktır. nlp, insan dilini anlayan, o dili normal bir insanla aynı şekilde konuşan, çeviri yapabilen bir sistem yaratma gayesi taşıyor, vision processing alanı insana benzer bir şekilde görüntüleri, objeleri birbirinden ayırabilen *, resimler çizebilen*, fotoğraflar ve videolar üzerinde insanlar gibi ya da daha iyi bir anlamlandırma süreci tasarlamayı hedefliyor. şimdiye kadar bu iki alanda bir şeyler yaptığımdan onlar hakkında tanım yaptım sadece yoksa yapa zeka information retrieval, data mining, stochastic process, robotik (bir kısmı) gibi bir sürü alt dala ayrılıyor. temel gaye insan kadar iyi kararlar verebilen sistem oluşturmak, kimse insan olsun android olsun demiyor. evet hedef düşünebilen, bilinçli insan gibi davranan insan-robot üretmek. ana gaye bu. psikolojinin gayesinin insanın düşünsel sürecini anlamak olduğu gibi, kısa ve orta vadede yakalamak imkansıza yakın bir hedef. ama bu doğrultuda yapılan her katkı katkıdır. computing machinery and intelligence adlı alan turing'in makalesinde bunlara sıkça yer vermiştir şiddetle tavsiye ederim. derdimiz insan gibi bir sistem yaratmak, insan yaratmak değil. aşık olmasına gerek yok, bilince kavuşmasına gerek yok, eğer bir insan makinenin kararları ile insanın kararlarını ayırt edemiyorsa, yapay zeka o problemde başarıya ulaşmıştır diyor.

    referanslar:
    [1] sander greenland et al, "statistical tests, p values, confidence intervals, and power: a guide to misinterpretations"
    [2] jonas mockus, "application of bayesian approach to numerical methods of global and stochastic optimization"
    [3] rens van de schoot and sarah depaoli "bayesian analyses: where to start and what to report"
    [4] jerzy neyman"frequentist probability and frequentist statistics" (güzel makaledir)
    [5] alan turing, "on computable numbers, with an application to the entscheidungsproblem"

    edit1: çeşitli typo düzeltmeleri.
  • - (bkz: çiftlik bank)'a yatırım yapacağım, sanal inek alıp sütünü sağıp satacağım.
    ....aylar geçer.

    soru: neden çiftlik banka güvendiniz?
    machine learning: bu kadar insan mal olamaz heralde dedim.
hesabın var mı? giriş yap