Published on

15 Dakikada Python ile Yapay Zekaya Giriş (Bölüm 1)

Bu yazı serimizde yapay zeka ve Python ile uygulanması hakkında (çok kısa bir şekilde) konuşacağız. İlk olarak makine öğrenmesi ile başlıyoruz.


Makine Öğrenmesine Giriş

Basit bir soruyla başlıyoruz. Makine nedir?

def makine():
  for i in range(1):
    print("Ben bir makine miyim?")

makine()

Hemen akabinde de Öğrenme nedir? sorusuyla devam edelim.

def ogrenmek():
  tecrube = 3
  while tecrube > 2:
    print("Bu öğrenmek midir?")
    tecrube -=1

ogrenmek()

Peki, tam olarak nedir bu Makine Öğrenmesi?

Şimdi tam burada kullanmalık bir tanımımız var makine öğrenmesi için. Tom Mitchell zamanında şöyle tanımlamış:

Bir bilgisayar programının, G görevi üzerindeki, P ile ölçülen performansı, D deneyimi ile iyileşiyorsa; o programın D deneyiminden öğrendiği söylenebilir.

Sözün tercümesi kafa karıştırdıysa, aslı yazının ingilizce halinde mevcut (ilgilisine).

Aklınıza bir örnek geliyor mu? 🤔

Evet dediyseniz, helal olsun ne diyelim ama şimdi daha önemli bir sorumuz var.

Bir makineye neden bir şey öğretmek isteriz ki?

Neden ne yapması gerektiğini düzgünce tanımlayıp onu yapmasına müsade etmiyoruz? Yıllardır makinelerin görevi buydu, belirli bir görevleri vardı ona uygun tasarlanıyorlardı ve alan razı veren razıydı. Neden öğretmek istedik birden? El-cevap ZOR SORUNLAR.

Şimdi, farz edelim ki bir program geliştirmek istiyoruz. Bu programın da elle yazılmış belgelerdeki rakamları tanıması gerekiyor. Yani ilk duyunca bir kolay geldi dimi? Hepi topu dokuz tane rakam var toplamda, her birinin neye benzediğini nasıl olduğunu güzelce tanımlarsak; program zaten bunu tanıyabilir. Yani, aslında doğru ama bir şeyi unutuyoruz. HERKESİN YAZDIĞI RAKAMA KİMSE KARIŞAMIYOR. Oturun bir düşünün, bugüne kadar gördüğünüz o tüm garip el yazılarını düşünün, ilkokuldaki yazıları, doktorları, tez canlı arkadaşların yazılarını... "7" rakamını çizmenin kaç farklı yolu olduğunu gördüğünüzde şaşırmadınız mı? Biri düz çizer biri yamuk çizer biri tek parça çizer, çizer de çizer. Tüm bu farklılıkları tek tek nasıl anlatacağız programa?

İşte geliyooor! Makine öğrenmesi!

Şimdi, bizim elle yazılmış rakamları tanıyacak bir programa ihtiyacımız var.

Ya ne uğraşıyoruz çağıralım bir elemanı, okusun tüm belgeleri aktarsın bilgisayara, mis gibi iş diyenleri duyuyorum. BU İŞ BİTEER.

Bilimsel yazı yazıyor olmamız hasebiyle bu konuyu kapatıp çözüme geri dönüyoruz. Hiç eleman çağırmakla falan uğraşmayalım, makineye öğretelim biz o yapsın bu işi dedik, öyle ilerliyoruz. Pekii, makineye bunu nasıl öğreteceğiz? Bu nasıl öğreteceğiz kısmı bir sonraki yazının konusu ama kısaca özetlemek gerekirse, gösterebildiğimiz kadar çok elle yazılmış rakaml resmi gösterip, Bak buna, resmi görüyor musun? Bak bu resimdeki rakam 8 diyeceğiz. Bunu defalarca (baya bir defa) yaptıktan sonra makine her bir rakamı öğrenmiş olacak.

Şaka bir yana, bu elle yazılmış rakamları tanıma meselesi evrişimli sinir ağları (TDK güzel bir isim bulalım buna) (İngilizcesi: Convolutional Neural Networks) yönteminin ortaya çıkmasına vesile oldu. Bundan da sonraki yazılarda bahsedeceğiz ama sabırsız arkadaşlar Google'da MNIST tanıma, Yann LeCun yazarsa bahsedilen hikayeye ulaşabilirler.

Tamam gördük anladık, bilgisayar elle yazılan rakamları tanıyabiliyor, aferin ona, helal olsun, çok iyi, müthiş de daha zor mevzularda durum nasıl?

Mesela, Satranç satranç, oynayabiliyor mu bu makineler bunu? Yüzlerce yıldır oynadığımız, en zekilerimizin boy ölçüştüğü oyun. Gelsinler iki tokatlayıp gönderelim diyenler oluyor, takdir ediyorum ama hızlı gaza gelmeyelim diyorum.

Bu satranç konusunda meşhur bir AlphaZero var, Google Deepming tarafından geliştirilmiş. Daha yeni olmasına rağmen ortalığı dağıttı geçti. İşin komik tarafı bu AlphaZero'nun yaşı teknik olarak 9 saat. Öğrenme sırasında buna satrancın kurallarını söylüyorlar o da sadece kendine karşı oynamaya başlıyor. Böyle çok sayıda oyun oynayarak (44 milyon oyun civarı) öğreniyor.

Güzel övdün be bu yapay zekayı. Anlat bakalım nasıl yapabiliyoruz bu işi?

Tamam, hepimiz yapay zekanın kaliteli olduğunda mutabığız. Hala daha teredütte olan varsa şu siteye girip baksın, fikrini değiştirsin, gelsin geri.

Python ile makine öğrenmesi yapacaksak, işimize yarayacak bazı kütüphaneler var. Onlardan bir kısaca bahsedip bu yazıyı tamamlayalım.

ML Libraries

Numpy

Bu kütüphaneden kaçış yok gibi bir şey. Herhangi bir veriyle işiniz varsa NumPy size en iyi yardımcı olacak kütüphane olabilir. Özellikle matematiksel işlemler ve yüksek dereceli matrislerle işiniz varsa gayet yardımcı oluyor.

Bir de gizli bir kural var, numpy kullanılırken np şeklinde kullanılıyor 😎.

import numpy as np

Pandas

Pandas kütüphanesi de tablo şeklinde verilerle işiniz varsa çok yardımcı oluyor. Dışarıdan bi dosyadan veri okurken de işleri kolaylaştıran bir kütüphane.

Burada da gizli bir kural var; pandas kullanılırken pd olarak kullanılıyor 😎.

import pandas as pd

Scikit-Learn

Scikit-learn de klasik makine öğrenmesiyle uğraşıyorsanız çok faydalı işlevler sunuyor. Aynı zamanda performans ölçümleri için de (PSNR, SSIM, vs.) gayet faydalı.

import sklearn

TensorFlow and PyTorch 🔥

Bunlar krallar. Bunları ağababalar destekliyor (TensorFlow = Google, Pytorch = Facebook). En çok kullanılan derin öğrenme sistemleri bunlar. Hangisini seçerseniz seçin işinizi görecektir. Ama genel olarak Pytorch araştırmada, TensorFlow da üretimde, sahada daha sık tercih ediliyor.

Bir gizli kural da TensorFlow için var: import as tf 😎

import tensorflow as tf
import torch

İlk yazının sonuna gelmiş olduk böylece. Okuduğunuzu beğendiyseniz, ben bu işi biraz daha öğrenmek istiyorum diyorsanız, bir sonraki yazıda meşhur Derin Öğrenme hakkında konuşacağız. Oraya da bekleriz. Görüşmek üzere!