Makine Ogrenmesine Giris

ABDULLAH ATCILI
Machine Learning Turkiye
7 min readDec 6, 2021

Maliyet Fonksiyonu, Hata Fonksiyonu, Cost Function, Gradient Descent

Makine Öğrenmesi nedir?

Makine öğrenmesini, muhtemelen farkında bile olmadan, günde onlarca kez kullanıyoruz. Google veya arama motorlarında her web araması yaptığımızda, bu çok işe yarar çünkü makine öğrenmesi yazılımları hangi sayfaların nasıl sıralanacağını çözmüştür. Facebook veya Apple’ın fotoğraf uygulaması resimlerinizdeki arkadaşlarınızı tanıdığında, bu aynı zamanda makine öğrenmesidir. Veya günlük hayatta kontrol ettiğimiz maillerin, spam veya spam olmayarak sınıflandırılması ve bizim dolaylı olarak korunmamız da bir makine öğrenmesidir.

Direk olarak programlanmadan, bilgisayarların öğrenmesini sağlayan bir bilim var. Mesela evinizi süpüren, süpürge robotu. Evinizi tanıyarak, eşyaların (engellerin) yerini öğrenir ve sonraki süpürmelerinde bu eşyalara çarpmadan görevini tamamlar.

Peki gerçekten bir insan kadar akıllı ve insan kadar öğrenebilen yapay zekaya sahip robotlar geliştirmek mümkün müdür? Bu yazının yazıldığı tarihlerde bu kadar gelişmiş robotlar bulunmamaktadır. Ancak birçok Yapay Zeka araştırmacısı, bu hedefe ulaşmanın en iyi yolunun insan beyninin nasıl öğrendiğini taklit etmeye çalışan algoritmaları öğrenmek olduğuna inanmaktadır.

Peki, makine öğrenmesi, bugün neden bu kadar yaygın? Makine öğrenmesinin, yapay zeka alanından gelişen bir alan olduğu ortaya çıktı. Akıllı makineler üretilmek istendi. Mesela A’dan B’ye en kısa yolun nasıl bulanacağı. Web araması veya fotoğraf etiketleme ya da e-posta anti-spam gibi daha ilginç şeyler yapmak için programları yazmak denendiğinde, bunları yapmanın tek yolunun, bir makinenin kendi kendine yapmayı öğrenmesi olduğunun farkına varıldı. Bu nedenle, makine öğrenmesi bilgisayarlar için yeni bir yetenek olarak geliştirildi ve bugün endüstri ve temel bilimin birçok alanına etki ettiği açıkça görülüyor.

Veya el yazısı tanıma konusu. Aslında Doğal Dil İşleme (Naturel Language Processing - NLP) veya bilgisayarla görme (computer vision) alanları da yapay zeka ile ilgili alanlardır. Günümüzde doğal dil işlemenin çoğu ve bilgisayarla görmenin çoğu uygulamalı makine öğrenmesidir. Öğrenme algoritmaları, kendi kendini özelleştiren programlar için de yaygın olarak kullanılmaktadır. Spotify, youtube gibi uygulamar video veya müzik önerdiğinde, bu bir öğrenme algoritmasıdır. Aslında bu uygulamaların milyonlarca kullanıcısı var. Kişiye özel bir algoritmalar ile bu tavsiye sisteminin yapılması oldukça pahalı bir işlem olurdu. Yazılımın bu özelleştirilmiş önerileri vermesini sağlamanın tek yolu, kendisini tercihlerinize göre özelleştirmeyi öğrenmektir. Son olarak, öğrenme algoritmaları günümüzde insan öğrenmesini anlamak ve beyni anlamak için kullanılmaktadır.

Bu yazımda, sizlere çeşitli farklı öğrenme algoritmaları hakkında bilgi vermeyi amaçlıyorum. Birkaç farklı öğrenme algoritması vardır. Başlıca; denetimli öğrenme (supervised learning) ve denetimsiz öğrenme (unsupervised learning) olmak üzere iki ana algoritma türünün varlığından söz edebiliriz. Denetimli öğrenmede bilgisayara bir şeyin nasıl yapılacağını öğretilmektedir. Denetimsiz öğrenmede ise bilgisayarın kendi kendine öğrenmesine izin verilmektedir.

Takviyeli öğrenme (Reinforcement learning) ve öneri sistemleri (Recommender System) gibi başka öğrenme algoritmaları da bulunmaktadır. Bunlar, ilerleyen zamanlardaki yazılarımda bahsedeciğim diğer makine öğrenmesi algoritmalarıdır. Ancak en çok kullanılan iki öğrenme algoritması, denetimli öğrenme ve denetimsiz öğrenmedir. [1]

Supervised Learning (Denetimli Öğrenme)

Elimizde etiketlenmiş veriler bulunması durumunda, supervised learning algoritmlarını kullanabiliriz. Elimizdeki datada target (hedef) kolonu etiketlenmiş olmalıdır. Yani başka bir deyişle, aradığımız sorunun cevapları, örneklemler ile datasette bulunuyor olacaktır. Mesela ev fiyatı tahmini algoritmasında, elimizdeki verilerde, ev fiyatlarını görmemiz gerekmektedir. Bu sonuçlara göre, modelleme yapılarak, modelin daha önce görmediği ev özellikleri için tahminde bulunması istenmektedir. Aynı şekilde belli girdi değerlerine göre hastalık tespitinin yapılması. Elimizdeki datada hasta olanlar ve olmayanlar etiketlenmiş olmalıdır. Ki modelimiz bu veriden öğrenme sağlayarak, bilmediği örnekleme ait kişinin hasta olup olmadığını tahmin edebilecektir.

Modelleme esnasında, girdi ile çıktı arasında bir hipotez olur. Bu fonksiyonun girdi ile üreteceği değere göre, çıktı sonuçlanır. Hipotez fonksiyonu girdi boyutuna göre parametre alır. En temel ifade ile

H(X) = teta0 + teta1.X

olarak ifade edilir.

Supervised learning algoritmalarını iki temel başlık altında incelemek mümkündür: regresyon ve sınıflandırma.

Unsupervised Learning (Denetimsiz Öğrenme)

Denetimli öğrenme, etiketli bir çıktı değişkeninin değerini tahmin etmek için bir dizi girdi değişkeninin kullanılması anlamına gelir. Etiketlenmiş veriler gerektirir (bunu, modelin performansını değerlendirmek için kullanabileceği bir cevap anahtarı gibi düşünün). Tersine, denetimsiz öğrenme, etiketli sonuçlara veya tahminlere herhangi bir referans olmaksızın etiketlenmemiş bir veri kümesinden temeldeki kalıpların çıkarılması anlamına gelir.

Denetimsiz öğrenmenin birkaç yöntemi vardır, ancak kümeleme açık ara en yaygın kullanılan denetimsiz öğrenme tekniğidir. Kümeleme, benzer özelliklere sahip veri noktalarını otomatik olarak gruplandırma ve bunları “kümelere” atama sürecini ifade eder. [2]

Denetimsiz öğrenme için bazı kullanım örnekleri şunları içerir:

  • Müşteri segmentasyonu veya etrafında pazarlama veya diğer iş stratejileri oluşturulacak farklı müşteri gruplarını anlama.
  • Genetik, örneğin evrimsel biyolojiyi analiz etmek için DNA kalıplarını kümelemek.
  • Benzer içerik önermek için benzer görüntüleme modellerine sahip kullanıcıları bir araya getirmeyi içeren öneri sistemleri.
  • Dolandırıcılık tespiti (Fraud Detection)veya kusurlu mekanik parçaların tespit edilmesi dahil anormallik (Anomaly detection) tespiti (yani, kestirimci bakım).

Temel seviyede Supervised ve unsupervised learning algoritmalarını tanıdık. Şimdi Supervised Learning için biraz detaya inebiliriz.

Supervised Learning (Denetimli Öğrenme)

Regresyon (Regression) Problemleri :

Elimizdeki datanın çıktısı sürekli (continuous) değer alıyorsa, bu bir regresyon problemidir. Örneğin ev fiyatı tahmini, araba fiyatı tahmini.

Şekilde görüldüğü üzere, ev büyüklüğüne göre fiyat bilgileri, girdi olarak alınmıştır. Regresyon modeli, bu girdilere uyacak en başarılı doğruyu (grafikteki pembe renkli doğru) çizmeyi amaçlamaktadır. Bu çizilen doğruya göre de, model daha sonra sorulacak ev büyüklüğüne göre, ev fiyatı tahmininde bulunacaktır. Mesela yukarıdaki grafik için, modele sorulacak 2500 feetkare boyutundaki evin fiyatı, 400k olarak tahmin edilecektir.

H(X) = teta0 + teta1.X formulündeki teta0 ve teta1 değerleri, çizilecek doğrunun nasıl olduğunu belirler ve bu fonksiyonun aldığı X girdisine göre, bir çıktı oluşturarak tahminde bulunur.

Sınıflandırma(Classification) Problemleri :

Regresyon problemlerinde sürekli değer alan sonuçların aksine, sınıflandırma problemleri ayrık sonuçlar alır. Mesela hasta veya hasta değil, spam veya spam değil, kedi veya köpek, mandalina veya portakal gibi tahminlerin tamamı sınıflandırma problemini temsil eder. Sınıflandırma problemindeki sınıflar sadece iki sınıf ile sınırlı olmak zorunda değildir (spam veya spam değil). İkiden fazla sınıf tahmininde de bulunulabilir. Örneğin akciğer görüntüsüne göre hastanın Covid mi, zaturre mi yoksa sağlıklı mı olduğunun tespiti.

Yukarıdaki grafikte, hastanın tümör büyüklüğüne göre kanser hastalığı için sınıflandırma amaçlanmaktadır. Görüldüğü üzere 1'ler hastalık durumunu, 0'lar hasta olmama durumunu simgelemektedir. Yani bir devamlı değerden ziyade ayrık olarak 0 ve 1 durumunun varlığından söz edilmektedir.

Başlıca supervised learning algoritmaları aşağıdaki gibidir.

  • Linear Regression
  • Logistic Regression
  • k-Nearest Neighbors
  • Support Vector Machines (SVMs)
  • Decision Trees
  • Random Forests
  • XGBoost
  • Neural networks

Şimdi ise

H(X) = teta0 + teta1.X ,

formülünde bulunan teta0 ve teta1 parametreleri üzerine konuşalım.

Maliyet fonksiyonu nedir?

Eğittiğimiz model, bize bir tahminde bulundu. Peki bu tahmin doğru mu? Ne kadar doğru? Bunu optimize etmeli miyim? Nasıl? sorularını sorar gibi olduğunuzu görüyorum.

Maliyet fonksiyonu (Kayıp fonksiyonu, Cost Function) : Maliyet fonksiyonu, kurulan makine öğrenmesi modelinde, gerçek değer ile modelin tahmin ettiği değer arasındaki farkı hesaplamayı amaçlar.

Yukarıda gösterilen data pointler incelendiğinde, datalara en uygun olan doğru hangi renklidir? Turuncu mu, yeşil mi yoksa mavi mi? Evet cevap tabiiki turuncu. Peki ama model bunu nasıl anlayacak?

Modelin tahminde bulunduğu her bir değer için (y_pred), gerçek değer ile (y) arasındaki uzaklık bulunur. Maliyet fonksiyonu; bu datada bulunan her bir data point için, farkların (y -y_pred) karelerinin alınıp toplanması olarak ifade edilebilir.

h(X) fonksiyonunu daha önce, modelin tahminde bulunduğu fonksiyon olarak tanımlamıştım. Formülde de görüldüğü üzere, her bir data point için, tahmin değeri ile gerçek değer arasındaki fark bulunup, karesi alınıyor. Tüm data pointler için işlem tekrarlanarak, hata karelerinin toplamı bulunuyor. Formülün başında bulunan 1/2m ise sadece sabit bir sayıyı temsil etmektedir.

Evet formülü bulduğumuza göre maliyet fonksiyonunda üretilen değer ne kadar küçük olursa, hatanın o kadar az olacağı, dolayısıyla da çizilen doğrunun dataya tam(maksimum) uyma sağlayacağı söylenebilir (Yani turuncu renkli doğru da olduğu gibi. Yeşil ve mavi renkli doğrularda, maliyet fonksiyonun daha yüksek değerlerde olacağı görülmektedir).

Peki amacımızı anladık, maliyet fonksiyonunu minimize edersek, daha iyi tahmin üreten modele erişebiliriz. Peki nasıl maliyet fonksiyonunu minimize edebiliriz? Tekrar maliyet fonksiyonu formülünü hatırlarsak h(x) değeri y değerine ne kadar yakın ise, maliyet fonksiyonu o kadar az olur. Bu şartlar altınada bizim h(x) fonksiyonunu hatırlamamız gerekmektedir.

h(X) = teta0 + teta1.X

teta0 ve teta1 parametreleri ne kadar uygun değerlerde bulunursa, h(X) fonksiyonu o kadar iyi tahminde bulunur, hata o kadar az olur, maliyet de o oranda düşer.

Peki bu parametreleri nasıl optimize edebiliriz?

Gradient Descent nedir?
Gradient Descent : Maliyet fonksiyonun türevini alarak, parametre optimizasyonu yapan ve maliyet fonksiyonunu minimize etmeye yarayan yöntemdir.

Gradient Descent, türevlenebilir bir fonksiyonun yerel minimumunu bulmak için birinci dereceden türevini alan bir optimizasyon algoritmasıdır. Amaç maliyet (kayıp, hata) fonksiyonumuzu en aza indirecek parametrenin değerini elde etmek için, o fonksiyonun gradyanının (türevden bulunan eğim) zıt yönünde hareket ettirmektir. Başka bir deyişle aşağıda görülen grafikte, random değer olarak başlayan teta parametresinin, bulunduğu noktadaki türevini aldıktan sonra, parametre değerini güncellemek, bu güncelleme işlemleri çok defalar (100, 1000, 10000 gibi tekrar sayıları) tekrarlayarak, maliyeti sıfıra yaklaştırmaktır.

Her adımın boyutu, öğrenme hızı (learning rate) adı verilen bir parametre tarafından belirlenir. Gradient Descent birinci dereceden türev alan algoritmadır. Çünkü minimumları bulmak için maliyet (kayıp, hata) fonksiyonunun birinci dereceden türevini kullanır.

Görüldüğü üzere random olarak başlatılan teta değeri, bulunduğu noktadan türevi alınarak, learning rate oranında, minimum değerine doğru yaklaştırılmaktadır.

Formülden de görüldüğü üzere, maliyet fonksiyonu bulunduktan sonra, alfa(learning rate) ile maliyet fonksiyonu türevi ile çarpılıyor. Bu çarpım, teta parametresinden çıkarılarak grafikte de görülen local mimimum değerine erişilmek hedefleniyor. Bu maliyet fonksiyonundaki minimum nokta, elimizdeki data için en başarılı doğruyu (yukarıda gösterilen yeşil doğru) çizen parametreleri bize verecektir.

Gradient descent algoritmasının Pythonda yazılmış scriptine buradan erişebilirsiniz.

Bu yazımda, makine öğrenmesine yeni başlayanlar için, makine öğrenmesinin ne olduğunu, supervised ve unsupervised learning algoritmalarını, classification ve regresyon arasındaki farklı anlatmayı, maliyet (cost, loss, hata, kayıp) fonksiyonunu ve son olarak da gradient descenti anlatmaya çalıştım. Umarım faydalı olmuştur.

Referanslar :

  1. https://www.coursera.org/learn/machine-learning/home/welcome
  2. https://blog.dataiku.com/unsupervised-machine-learning-use-cases-examples

--

--