Yapay Zeka Çalışmaları İçin Python Neden Önemli
Üniversite okuduğum 2000’li yılların sonlarında, (daha sonradan çok sığ olduğunu fark edeceğimiz) java mı yoksa .net mi daha iyi tartışmasını yürütülürdü. Ancak, son dönemlerde yapay zeka, makine öğrenmesi veya derin öğrenme ile ilgili bir etkinliğe katıldıysanız Java ya da C# gibi dillerin artık esamesi okunmuyor. Artık veri bilimcilerinin olmazsa olmazı Python, R gibi araçlar.
GitHub’ta makine öğrenmesi ile ilişkili projeleri aratarak kolaylıkla bu sonuca erişebilirsiniz. Python ve yine daha esnek python geliştirmenizi sağlayan jupyter notebook ile üretilen proje sayısı tüm projelerin %70’ini oluşturuyor (html ve tex’i göz ardı ettim).
GitHub kadar baskın olmasa da google’daki arama eğilimlerini analiz edebileceğiniz Google Trends hizmeti ile derin öğrenme altyapılarını değerlendirebilirsiniz. Python tabanlı Keras ve TensorFlow alternatiflerine göre ezici bir üstünlüğe sahipler. Burada belirtmek gerekir ki Keras başlı başına bir altyapı olarak değil (şimdilik) TensorFlow, Theano, CNTK altyapılarının önünde sağlanmış bir API. Geliştireceğiniz ortak kod, sadece bir konfigürasyon değişikliği ile TensorFlow’da çalışırken Theano’da çalışır hale gelebiliyor. Keras’ın desteklediği altyapılar arasında en yaygını da TensorFlow olduğu için aşağıdaki grafikteki Keras rakamlarını TensorFlow’a eklemek çok da yanlış olmayacaktır.
Özetle yapay zeka dünyasının (bugün için) mutlak galibi python dili ve tensorflow altyapısıdır. Peki ama bu teknolojiler yakın geçmişte baskın olan java ve .net teknolojilerini nasıl altüst (disrupt) etti?
Topluluk
Java tabanlı Weka ve DeepLearning4j, .Net tabanlı da CNTK altyapı ve kütüphaneleri olmasına rağmen sahip oldukları topluluk TensorFlow’un çok gerisinde. Topluluğun fazla olması bir problem ile karşılaşıldığında, basit bir stackoverflow araması ile problemi aşılmasını sağlıyor. Çünkü benzer bir problemi bir başkası zaten yaşamış oluyor.
Performans
Topluluğun büyüklüğü bu altyapıların benimsenmesinin aslında dolaylı bir sonucu. Toplulukların neden bu teknolojileri benimsediklerini irdeleyelim.
Kısa vadede ekonomik değerin derin öğrenme ile sağlayanacağı konusunda herkes hemfikir. Derin öğrenme dediğimiz şey de aslında derin ve geniş yapay sinir ağlarından başka bir şey değil. Sinir ağında sonuç girdilerin bağlı oldukları ağırlıklar ile çarpılmasıyla elde edilir.
Klasik programcı yaklaşımı ile düğüm ve ağırlıkların ilişkisini tuttuktan sonra for döngüleri işleterek çıktıyı hesaplayabilirsiniz. Ancak bu maliyetli olan yöntem. Alternatif olarak, ağırlık ve girdileri vektörel olarak saklarsanız bu vektörlerin çarpımı da size aynı sonucu verecektir. Tek farkı daha performanslı şekilde! Çünkü matris çarpımlarını for döngüleri işletmek yerine optimize çalışan numpy, pandas veya tensorflow kütüphanesi ile python’da kolayca ve hızlıca yapabilirsiniz. Öyle ki vektörel yaklaşım ile 300 kat daha hızlı sonuç üretmeniz mümkündür. Öte yandan java’da matris çarpımları için out-of-the-box olarak gelen bir fonksiyon bulunmamaktadır.
Öyle ki sinir ağı ve derin öğrenmeyi çok sayıda matris çarpımı olarak tanımlayanlar da var.
Bir Gerçek Dünya Problemi
700 satır ve 600 sütunluk çok da büyük olmayan bir veri setini aynı konfigürasyon ile weka ve tensorflow’da sinir ağları yöntemiyle eğitmeye kalkıştım. Weka’da eğitim 50 dk sürerken, tensorflow’da 30 sn’de eğitimi tamamlayabildim. Bu major farkın nedeni weka for döngüleri bir hesaplama yapmaya çabalarken, tensorflow matris çarpımları ile sonucu hızlıca hesaplayabiliyor.
Konuyu toparlarken; bugün makine öğrenmesi çalışmaları için Java’da ısrar etmeyi, geçmişte Nokia’nın Symbian konusunda ısrarına benzetiyorum. Tabi tüm bunların bir amaç değil bir araç olduğunu unutmamakta fayda var.