Teknoloji Burada

inovasyon meraklılarını bir araya getiren "Sosyal Ağ"

Yapay Zeka ve Öğrenen Makinalar

Hızla dünyada en çok konuşulan konulardan biri haline gelen yapay zeka benim de yıllardır ilgimi çeken konuların başında gelmektedir. Daha önceden de bu alanda yapılan yazılımları incelemiş ve önemli bir konu olduğuna kanaat getirmiştim. Ama hep kendi kendine düşünebilen makinalar yapmak için bu düşünce sisteminin dışından probleme bakmak gerektiğini savunmuşumdur. Bunu da insan oğlu nasıl yapabilir ki demişimdir. Bu düşünce sisteminin dışından bir bilgisayar peki hala bunu yapabilir. Yapay zeka konuşmaları mutlaka felsefi bir yöne doğru gitmeye meğillidir ama ben bunu yapmayacağım. 2017 yılında kendimi bu konuda geliştirmek yönünde bir karar aldım ve öğrendiklerimi buradan sizlerle paylaşacağım. Gnexlab’da çoğunlukla laf üretmek yerine çalışan örnekler vermeye çalışıyorum. ML (Machine Learning) konusunda da durum böyle olacak. Bu konuya ilgi duyan bu konuda çalışan sizlerle iletişim kurmak beni mutlu eder. Ama ödev sorularınızı cevap veremiyeceğimi belirtmek isterim. Bu yazıda sadece 6 satır kod ile çalışan bir ML uygulaması yapacağız.

Şimdi hızlıca ML nedir ve neden bu kadar önemli biraz bundan bahsedelim. Aslında ML yapay zekanın bir alt dalı. Bir çok problemi yeniden kodlama yapma gereği olmadan çözmek amacı ile geliştiriliyor.

Yalçın Yenigün burada şu şekilde türkçeleştirmiş

ML : Bilgisayarların dışarıdan programlanmaya ihtiyaç duymadan kendi kendine öğrenme yeteneğine “machine learning” denir.

Aslında ML kod içine gömülmüş kural setleri yerine örneklerden ve tecrubelerden öğrenen bilgisayar yazılımlarına verilen genel bir isim bir kavram.

Bu tanım bile ne kadar önemli olduğunu anlatıyor ama basit olmasına rağmen ML dışında çözümü pek de mümkün olmayan bir örnek üzerinden devam edelim.

Elma ile Portakal arasındaki farkı anlatan bir kod yazmanızı istesem. İlk aklımıza gelen turuncu ve yeşil pikselleri saymak bir çözüm olarak gelebilir.

Inline image 1

Turuncunun fazla yeşilin az olduğu resimleri portakal olarak ayırabilirsiniz. Fakat gerçek dünya bu kadar basit değil malesef. Kod içine yazdığınız sabit kural setleri çok kolay kırılacaktır. Mesela size siyah beyaz bir resim versem.

Inline image 2

Emin olun yukarıda yazdığınız kural setlerini kıracak bir çok resim bulabilirim. Siz de tonlarca kod ekleyerek tüm bu kural setlerini benim bulduğum uygunsuz resimleri de kapsayacak şekilde düzeltmeye çalışırsınız. Peki ya problemi değiştirirsem? Yeni problem için sil baştan tekrar tonlarca yeni kural seti mi yazacaksınız?

O zaman bizim için tüm bu kural setlerini yazacak bir algoritmaya ihtiyacımız var.

Şimdi işte işin zevkli kısmına geliyoruz. Bizim bir sınıflandırıcıya (Classifier ) ihtiyacımız var. Nedir bu sınıflandırıcı? Aslında sınıflandırıcıyı bir fonksiyon olarak düşünmek gerek. Bu fonksiyon dataları input olarak alıyor ve sonuç olarak bir etiket döndürüyor. Örnek olarak sınıflandırıcınız bir e-postayı alıp bunun spam mi yoksa değilmi diye ayrıştırıyor olabilir.

Örnekler içerisindeki belirli patternleri (kalıpları) bulmak için sınıflandırıcı geliştirmeye Supervised Learning deniliyor. (Türkçe terimlerde yardımlarınızı bekliyorum.)

Sınıflandırıcımıza girdi olarak verdiğimiz datalardan birisi eğitim datalarıdır. Mesela yukarıdaki örnek için meyvaların ağırlık ve yüzeyleri tablosu eğitim datamız olsun.

Inline image 3

 

ML de bu ağırlık ve yüzey pürüzlülüğüne features denilmekte. Bu özellikleri ne kadar doğru ve çeşitli verirseniz sınıflandırıcınız o denli doğru çalışacaktır. Bu örnekde Karar ağacı (decision tree) sınıflandırıcısını kullanacağız. Bunun gibi bir çok sınıflandırıcı algoritması geliştirilmiştir. Şimdilik karar ağıcı yada diğer sınıflandırıcı çeşitlerinin iç yapısına girmeden onları bir kurallar kutusu olarak düşünmekte yarar var. Buradaki en önemli konu içeriğini şimdilik bilmesek de tüm sınıflandırıcıların girdi ve çıktıları aynıdır. Data girer tahmin çıkar.

Sınıflandırıcıyı oluştururken örnekler içerisindeki kalıpların kullanılacağından bahsetmiştik.

Inline image 4

Mesela portakal genellikle elmadan daha ağırdır. O zaman ağır olan meyva daha büyük olasılıkla portakaldır diye bir kural seti olabilir. Demin de dediğimiz gibi bu kural setini biz elimizle yazmıyoruz. Verdiğimiz ağırlık datalarına bakarak bu kural setini sınıflandırıcı otomatik olarak oluşturuyor. Bu kural seti gibi yüzlerce binlercesini kendisi oluşturabilir. Mesela verdiğiniz yüzlerce hastalık belirtilerinden, tahlil sonuclarından o hastalığın büyük olasılıkla ne olduğuna bir makina insandan daha doğru karar verebilir. Ya da insansız bir hava aracı işlediği görüntü verilerden hareket kalindeki insan topluluğunun terorist mi yoksa yöre halkı mı olduğunun kararını doğru bir şekilde verebilir.

Konuyu dağıtma eğilimimi bastırıp ilgimi çeken ve bundan sonra derinlemesine inceleyeceğim iki açık kaynak ML kütüphanesinden bahsederek devam edeyim. Bunlardan ilki scikit-learn diğeri de çıkalı bir yıl olmasına rağmen Linux dan daha fazla yıldız alan Google’ın TensorFlow kütüphanesi. Bundan sonra çalışmalarımda bu iki kütüphaneden yararlanacağım.

Yukarıdaki örneği scikit’de kodlarsak aşağıdaki 6 satır kodu elde ediyoruz. (Python kodu)

Inline image 5

 

Burada etiketleri ifade etmesi için sayıları kullanmamız gerekiyor. Zira aslında ML kütüphaneleri dediğimiz kodlar büyük matris işlemlerini çok hızlı yapabildikleri için günümüzde ML bir ivme kazandı. (ML kodlarının çalıştırıldığı donanımlardan ilerde bahsedeceğim)

0  bumpy yani pürüzlü yüzeyi 1 ise smooth yani düzgün yüzeyi
1 portakalı 0 ise elmayı temsil etsin.
Kodu yukarıdaki tablolarla birlikte incelerseniz özellikler tablosundan features dizinini oluşturuyoruz. Labels da bunlara karşılık gelen meyvenin ismini tutuyor.
clf olarak Karar ağacı sınıflandırıcımızı tanımlıyoruz. Bu sınıflandırıcıya features ve labels dizinlerini fit foksiyonu yardımıyla input olarak veriyoruz. Bu sınıflandırıcımızın eğitim işlemi. Daha sonra yine clf objesinin bir fonksiyonu olan predict ile ağırlığı 150 gram ve yüzeyi pürüzlü meyva nedir diye tahmin etmesini istiyoruz. Cevap 1 yani Portakal oluyor.

Tebrikler

Buraya kadar geldiyseniz 6 satırlık ilk ML kodunu anladınız demektir. Asıl güzel kısmı bu kodu hiç değiştirmeden yeni örneklerle eğitip başka problemleri çözmesini isteyebiliriz.

Inline image 6

 

Konu, anlaşılması için ne kadar sadeleştirilmiş olsa da eğer buraya kadar anlatılanlardan hoşlandıysanız ML sizin için de öğrenmeye değer olabilir. Zira Önümüzdeki 10 sene bunu çok konuşuyor olacağız.

Bir sonraki bölümlerde kod geliştirme ortamı kurulumu ve basit örneklerle devam edeceğiz. Takipte kalın.

Kaynaklar :

1- Açık kaynak ML kütüphanesi Scikit-Learn:  http://scikit-learn.org/stable/index.html

2- Açık kaynak ML kütüphanesi TensorFlow: https://www.tensorflow.org/

3- Google Developers:  https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw

4- ML Recepies by Josh Gordon : https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal

 

 

 

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.

Araç çubuğuna atla