Başaracaksın: Google Machine Learning Crash Course Dersleri 1 - Giriş

Herkese merhabalar,

Yeni bir yazı serisinde sizlerleyiz. Makine Öğrenmesi’ne aşırı temel bir giriş niteliğinde olan, önceki yazı serim Başarabilirsin: Makine Öğrenmesine Giriş serimin ilkine buradan ulaşabilirsiniz.

Bu yazı serisinde Mart ayında Global AI Hub, Google Developers ve Turkish AI Hub tarafından düzenlenen Google Machine Learning Crash Course kursundaki bilgileri kendi perspektifimden anlayacağınız şekilde anlatmaya çalışacağım. Bu seriyle beraber hep beraber Makine Öğrenmesi alanına biraz daha dalıp ellerimizi koda bulayacağız. Eğer arzu ederseniz kursa bu link üzerinden ulaşabilirsiniz.

Bu seriye başlamadan önce bir önceki serimi okumanız bu seride anlatılmayan bazı girizgah bilgilerini anlamanızda büyük fayda sağlayacaktır.

Uyarımızı yaptığımıza göre, giriş niteliğindeki ilk yazımıza başlayalım 🙂

Önceki serimin son yazısında modelimizi eğitmiştik ancak modelimiz hata dolu bir model olduğu için tahminlerimizi en optimum derecede gerçekleştirmemişti. Şimdi hata kısmını bir de Google’ın Machine Learning Crash Course’u gözünden inceleyelim 🙂

HATASIZ MODEL, MODEL MİDİR?

Cevabı direk verelim. Hayır. Modelimizin hatalı olması değil ne kadar hatalı olduğu onun performansı hakkında bir indikatör olabilir. Burada hatadan kastımız tahmin edilen değerlerin gerçek değerlerden farklı olmasıdır. Bu duruma zaten alışık olmamız gerekiyor çünkü modelimiz psişik güçlere sahip olmadığı için asla kesin tahmin yapamaz, yapmamalıdır da. “Peki modelimizi böyle kabul edip gerçekten farklı tahmin yaptırıyoruz e o da hata olmuyor mu ama biz hata istemiyorduk” dediğinizi duyar gibiyim. Ancak yanılıyorsunuz. Burada istediğimiz hatanın en aza indirgenmesidir. Bunun için türlü yöntemler vardır ancak ben kurstaki iteratif yaklaşım üzerinden devam edeceğim.

HATAYI DÜŞÜRMEK — İTERATİF YAKLAŞIM

Öncelikle iteratifin tanımından başlayalım. İteratif için bir şeyin tekrar etmesi diyebiliriz. Örneğin iteratif bir fonksiyon belli bir periyodda belli bir sayıda tekrar ediyordur. (Örneğin programlama dillerindeki for veya foreach döngüleri)

Model Eğitim Diyagramı. Kaynak :https://developers.google.com/machine-learning/crash-course/reducing-loss/an-iterative-approach

Yukarıdaki resim bize iteratif bir fonksion ile hata düşürülmesini göstermektedir. Modelimize gönderilen featurelar kullanılır ve label tahminleri oluşturulur. Sonra bu tahminler ile gerçek veriler kıyaslanarak kaybımız(hatamız) hesaplanır. Sonrasında ise modelimizin oluşumunda kullandığımız belli parametreler tekrar hesaplanarak modelimiz iyileştirilmeye çalışılır. Bu kısımları detaylarıyla ilerleyen kısımlarda anlatacağımdan endişe etmeyin. Ucu açık bir şey kalmayacak 🙂

Aşağıdaki lineer regresyon denklemini modelimzin eğitimi sonucu oluşturduğu denklem olarak düşünelim:

y’ değeri tahmin edilen label değerini belirler

b değeri bizim sabit sayımızdır(bias).

w1 değerimiz ise feature’ımızın (xler bu denklemde feature olurlar) ağırlığıdır. Birden fazla feature değeri olduğunda weight(ağırlık) değerlerini kıyaslayarak hangisinin tahminde daha çok rol aldığını kestirebilmemiz mümkündür.

Ağırlık ve bias değerlerimiz model eğitimi sonucunda oluşan değerlerdir. Amacımız bu değerleri en optimum (gerçeğe yakın tahminler gerçekleştirecek) şekilde ayarlayıp en optimum modeli elde etmek.

Modelimiz bu değerleri eğitimi sırasında ayarlar ancak bu bizim için yeterli olmayabilir. Oluşan hatayı azaltmak için bu değerleri optimum hale getirmemiz gerekebilir.

Şimdi bu değerleri optimum hale getirmek için iteratif bir yapı kullanacağımızdan bahsettik. Bahsetmedik mi? O zaman şimdi bahsettik 🙂

Burada b ve w değeri her türlü optimize edileceği için başlangıç değeri olarak ne verdiğimizin pek bir önemi yok. Burada önemli olan zaten bunların hatanın en az olacağı şekilde optimize edileceği.

Peki nedir bu iteratif yaklaşım?

Hemen söyleyelim:

GRADIENT DESCENT (DERECE DÜŞÜRME)

Yukarıdaki model eğitim diyagramındaki compute parameter updates kısmına tekabül eden yer iteratif bir hata düşürme fonksiyonu olan Gradient Descent fonksiyonudur. Bu fonksiyon iteratif çalışır ve her iterasyonda önceki iterasyonda göre daha optimum w ve b parametreleri elde ederek hata oranını düşürmeyi hedefler. Peki bunu matematiğe nasıl dökeriz?

Kısa cevap : Türev

Uzun ve daha açıklayıcı cevap:

Gradient Descent Grafiği. Kaynak: https://developers.google.com/machine-learning/crash-course/reducing-loss/gradient-descent

Yukarıda kayıp-w değeri grafiğini görebilirsiniz. Bu grafiği ele aldığımızda convex bir yapı gözlemleyebiliriz. Bu convex yapının en aşağısına tekabül eden w değeri, kaybımızın en az olduğu varyasyondur ve modelimizin en optimum hali bu w değeriyle olur. Regresyon problemlerinde bu grafik her zman convex yani kase şeklinde olacaktır. Convex grafiklerinde sadece bir minimum nokta vardır ve bu noktada eğim sıfırdır. W değerini kendimiz her değer için tek tek hesaplamaktansa gradient descent fonksiyonu ile bunu hesaplatabiliriz. Peki üzerinde çok konuştuğumuz o minimum değere nasıl ulaşacağız?

Tekrar kısa cevap: Türev 🙂 Hatta parçalı türev 🙂

Korkulacak bir şey yok söz veriyorum 🙂

Yukarıdaki grafikte kırmızı noktamız elimizde bulunan modelin w değeri olsun. Kırmızı çizgi ise bu noktanın eğimi olsun. Bizim burada istediğimiz bu kırmızı noktanın (w değerimizin) en düşük kayıp değerine tekabüle den w değerine olabildiğince yakınsaması (yaklaşması). Yani kase şeklindeki grafiğimizin en dibine olabildiğince yaklaşması. Bunun için Gradient Descent denklemimizi incelemek yeterli olacaktır.

Kaynak: https://hackernoon.com/gradient-descent-aynk-7cbe95a778da

Bu denklemdeki theta değeri bizim ağırlık(w) değerimizdir. Gradient descent en optimum w değeri bulunana kadar bu denklemi tekrar eder. Bu denklemde türevi alınmış ağırlık değerinin kendisinden çıkarıldığını görebilirsiniz. Böylece ağırlık değeeri her iterasyonda yeniden ayarlanır ve en optimum seviyeye getirilir.

Önemli bir noktaya değinmek istiyorum. Gradient descent’teki w noktası bir vektördür ve bu da bu vektörün 2 karaktersitiğinin bulunduğunu gösterir.

  1. Yön (Direction)
  2. Büyüklük (Magnitude)

Bu da gradient descent algoritmasının w noktamızı her zaman eğimin en dik olacağı yere yani kasemizin en alt noktasına doğru azaltacağı anlamına gelir.

Aşağıda gradient descent algoritmasının çalışmasını görebilirsiniz. Buradaki her bir step aslında her bir iteredir.

Yukarıdaki gifi incelerseniz her iterasyonda optimum noktaya yaklaşıldığını görebilirsiniz. Peki bu yakınlaşmalar arasındaki yakınlaşma farkı nereden geliyor? (İlk iterasyonda optimum alana büyük adımal yaklaşırken sonraki iterelerde daha düşük bir yaklaşma oranı gözlemleriz. Bunun nedenine bir sonraki yazımda değineceğim için şimdilik merak konusu olarak kalsın 🙂

Diğer önemli bir nokta ise bu işlem tek bir w değeri olan bir model üzerinden anlatılsa da eğer bizim birden fazla ağırlık(w) değerimiz olsaydı her bir ağırlık değerimiz için aynı anda gradient descent yapılacaktı.

KAPANIŞ

Yeni yazı serimizin ilk yazısında Gradient Descent algoritmasından bahsetmeye çalıştım. Eğer sorularınız olursa cevaplamaya çalışmaktan memnuniyet duyarım. Serinin bir sonraki yazısında Hiperparametre konumuzun ilki olan Learning Rate’in ne olduğuna ve nasıl optimize edildiği konularına dalıp aslında her şeyin ne kadar basit olduğunu birlikte göreceğiz.Hepinize güzel, verimli, mutlu ve koronasız günler diliyorum Yapay Zeka ve sağlıcakla kalın. Serinin sonraki yazısında görüşmek üzere 🙂

 

 

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.