En Basit Şekilde Gradient Descent Algoritması

Burak Doğrul
5 min readApr 14, 2021

--

Makine öğrenmesinin temelleri konusundaki ilk yazımı belki de en önemli algoritmalardan birisi olan Gradient Descent algoritması ile başlatıyorum.

Makine öğrenmesindeki en önemli parçalarından birisi kuşkusuz optimizasyondur. Peki optimizasyon (eniyileme) nedir? Kısaca bir problemi çözerken en iyi sonuca ulaşmak için kullanılan matematiksel işlemlere verilen isimdir.

Gradient Descent (Gradyan Azalması)

Gradyan azalması, bir maliyet fonksiyonunu en aza indiren parametrelerinin değerlerini bulmak için kullanılan bir optimizasyon algoritmasıdır.

Şimdi daha anlaşılır olması için şöyle düşünelim. Elinizi aşağıdaki gibi tuttuğunuzu ve elinizin iç kısmındaki herhangi bir noktayı düşünün. Amacımız bu noktadan en çukur noktaya yani ellerin birleşme noktasına gitmektir.

Evet şimdi bu örneği bir de grafik üzerinde görelim.

Gördüğünüz gibi amaç mavi noktadan kırmızı yıldızlı noktaya gitmek. Aslında burada yaptığımız şey şu: Rastgele bir nokta seçiyoruz ve bu noktanın eğimine bakıyoruz. Daha sonra bu eğimi, belirlediğimiz learning rate büyüklüğünde parametreleri güncelliyoruz. Sonra tekrar eğime bakıyoruz. Bu işlemler minimum noktaya ulaşana kadar devam ediyor. Bunun için bize bir maliyet fonksiyonu gerekiyor. Maliyet fonksiyonu aşağıdaki şekilde formülize edilir.

Maliyet Fonksiyonu (Cost Function)

Tabi buradaki teta değerlerimizin güncellenmesi gerekiyor. Bu güncelleme işlemi yapmamız gerekiyor.

Güncelleme yapmamız gereken formülasyonu gördük. Şimdi bunun türevini almamız gerekiyor.

Burada dikkat etmemiz gereken Teta 0 değerinden gelen xi 0’ın 1 değerine eşit olması. O yüzden formülasyonda gösterilmiyor. Yani şöyle:

Bir adım daha ileri gitmeden önce Learning rate (α) in öneminden bahsedeceğim. Learning rate’in büyüklüğü veya küçüklüğü bizim için çok önemlidir.

Learning rate’in büyük olması; ani değişimlere yol açar ve ıraksama yapar, çok küçük olması; çok küçük adımlarla hedefe doğru gitmemizi dolasıyla çok fazla güncelleme yapılmasını gerektirir ve bize zaman maliyeti oluşturur. En uygun şekilde seçildiğinde ise minimum noktaya en hızlı ve doğru şekilde gitmemizi sağlar.

Şimdi elimizde şöyle bir fonksiyon olduğunu düşünelim.

Fonksiyonun x ekseni üzerinde -5 ile +5 arasında sınırlandıralım. Grafiği aşağıdaki şekildedir.

Amacımız rastgele bir nokta seçip bu noktadan x ekseninde 3 ile 4 arasındaki siyahla işaretlenmiş doğru noktaya ulaşmak

En basit şekilde 3 adımda ilerleyeceğiz.

1) Rastgele bir nokta seçeceğiz.

2) Seçtiğimiz noktanın eğimini hesaplayacağız.

3) Güncelleme işlemi yapacağız.

Minimum değere ulaşana dek bu 3 işlemi tekrar edeceğiz.

Fonksiyonumuzu tanımlayalım:

Rastgele bir nokta seçiyoruz. Örneğin x0 = -1 i seçtik diyelim.

Grafikte gördüğünüz siyah nokta x=-1 için y=6.08 değerini verir.

Şimdi eğimi hesaplayalım:

Eğimi hesaplamak için fonksiyonumuz türevini alıyoruz.

Eğimimiz -5.478 çıktı

Şimdi 3.adım olarak değerlerimizi güncelliyoruz.

x1 = x0 — α ∗ f′(x0)

α= 0.05 alıyoruz. Şimdilik bu değeri test edelim

-1 olan değerimizi -0,726 oldu. Yani bir adım ilerledik

Şimdi tekrar edelim;

-0,72 olan x değeri -0,40 oldu.

Evet yavaş yavaş gidiyoruz. Şimdi bu işlemleri hızlandıralım.

Sonunda ulaştık. X=3.87 için minimum y noktasına ulaştık. 20 iterasyonda doğru sonuca ulaştık. Aşağıdaki grafikte adımları görebilirsiniz.

Şimdi şöyle bir problemimiz var. Az önceki örnekte x = -1 noktasından değil de x = -2 noktasından başlasaydık ne olurdu. Bizi -3 ile -4 arasındaki noktaya götürseydi yani local minimum noktasına.

Öncelikle global minimum/maximum ( mutlak minimum ve mutlak maksimum) ve local minimum/maximum ( yerel minimum ve yerel maksimum) noktaları nedir ona bakalım. Calculus dersi almış olanlar çok iyi bilecektir ama başka bir alandan gelenler için bilinmesi gereken şeyler olduğu için üzerinden geçeceğim.

Mutlak maksimum (Global maximum) : Fonksiyonun tamamı için geçerli olan en büyük değer noktasıdır. Bu noktadan daha büyük bir değer yoktur.

Mutlak minimum (Global minimum) : Fonksiyonun tamamı için geçerli olan en küçük değer noktasıdır. Bu noktadan daha küçük bir değer yoktur.

Yerel maksimum (Local maximum) : Fonksiyondaki kısıtlı bir alan içerisindeki en büyük değer noktasıdır.

Yerel minimum (Local minimum) : Fonksiyondaki kısıtlı bir alan içerisindeki en küçük değer noktasıdır.

Şimdi bir fonksiyonun grafiğinin tamamının aşağıdaki gibi olduğunu düşünelim. 0.2 ile 1 arasındaki en büyük değer yerel maksimum iken 0 ile 1.2 arasında yani fonksiyonun tamamı için baktığımızdaki en büyük değer mutlak maksimumdur. Aynı şeyler minimum için de geçerlidir.

Yaptığımız örnekte biz x eksenini -5 ile 5 arasında sınırlandırdığımız için bulduğumuz nokta mutlak minimum noktasıdır.

Peki ya ilk rastgele değerimiz -2 olsaydı ne olacaktı. Bu sefer bizi siyahla işaretlenmiş olan yere götürebilirdi ve yanlış bir sonuca ulaşabilirdik.

Peki bu sorunun nasıl üstesinden geleceğiz? Aslında çok basit ilk başta sadece bir sayı seçerek başlıyorduk bunu farklı sayılarla başlatarak deneyeceğiz.

Bu konuyla ilgili olarak bir sonraki yazıda learning rate optimizasyonunu detaylı bir şekilde anlatmaya çalışacağım.

Okuduğunuz için çok teşekkür ederim. Hatam varsa affola.

Kaynaklar:

https://www.charlesbordet.com/en/gradient-descent/#but-the-maths (örnek buradan alınmıştır)

--

--