Yapay zeka temelleri

Gradient Descent Nedir?

mm
Unite.AI sitesini Google'daki tercih ettiğiniz kaynaklara ekleyin

Gradient Descent Nedir?

Yapay sinir ağları nasıl eğitilir diye okumuşsanız, muhtemelen daha önce “gradient descent” terimini duymuşsunuzdur. Gradient descent, bir yapay sinir ağının performansını optimize etmenin birincil yöntemidir ve ağın kaybını/hata oranını azaltmaya yardımcı olur. Ancak, gradient descent yeni başlayanlar için biraz zor anlaşılabilir ve bu makale, gradient descent’in nasıl çalıştığını anlamak için size bir fikir vermeye çalışacaktır.

Gradient descent, bir optimizasyon algoritmasıdır. Bir yapay sinir ağının performansını geliştirmek için kullanılır ve ağın parametrelerini değiştirerek, ağın tahminleri ile gerçek/beklenen değerler arasındaki farkı (kayıp olarak adlandırılır) mümkün olduğunca küçük hale getirir. Gradient descent, parametrelerin ilk değerlerini alır ve bunları, ağın mümkün olduğunca doğru olmasını sağlayacak değerlere yaklaştırmak için hesaplamalar yapar. Gradient descent’i anlamak için çok fazla hesaplama bilgisine ihtiyacınız yoktur, ancak gradientlerin ne olduğunu anlamak önemlidir.

Gradyan Nedir?

Bir yapay sinir ağının yaptığı hatayı temsil eden bir grafik olduğunu varsayalım. Grafikteki en alt nokta, en düşük hata noktalarını temsil ederken, en üst nokta en yüksek hatayı temsil eder. Bizim amacımız, grafikteki en üst noktadan en alt noktaya doğru ilerlemek. Bir gradyan, hatanın ağırlıklarla olan ilişkisini nicel olarak ifade eder. Bu ilişki, bir eğim olarak grafiklenebilir ve yanlış ağırlıklar daha fazla hata üretir. Eğimdeki/gradyanın dikliği, modelin ne kadar hızlı öğrendiğini gösterir.

Daha dik bir eğim, büyük hata azaltmaları anlamına gelir ve model hızlı bir şekilde öğreniyor, ancak eğim sıfırsa, model bir plato üzerinde durur ve öğrenmez. Bizim amacımız, grafiğin en alt noktasına ulaşmak ve en düşük kaybı bulmaktır. Bunu yapmak için, bir gradyan hesaplarız ve modelin parametrelerini güncellemek için bir yön belirleriz.

Şimdi, bir dizi tepe ve vadiyi hayal edelim. Bizim amacımız, vadinin en alt noktasına ulaşmak ve en düşük kaybı bulmaktır. Tepeye çıktığımızda, büyük adımlar atarak aşağıya doğru ilerleyebiliriz ve en düşük noktaya doğru gidiyor olduğumuzdan emin olabiliriz.

Ancak, en düşük noktaya yaklaştıkça, adımlarımızı küçültmeliyiz, yoksa gerçek en düşük noktayı aşabiliriz. Aynı şekilde, ağın ağırlıklarını güncellerken, güncellemeler modeli gerçek en düşük noktadan uzaklaştırabilir, bu nedenle güncellemelerin zamanla küçülmesi gerekir. Gradyan, modelin parametrelerini güncellemek için bir yön ve adım büyüklüğü belirler.

Şimdi, gradyanların ne olduğunu ve nasıl çalıştığını anladığımıza göre, gradyanların nasıl hesaplandığını keşfedebiliriz.

Gradyanların Hesaplanması ve Gradient Descent

Gradient descent, yüksek kaybın olduğu bir noktadan başlar ve birden fazla iterasyon aracılığıyla, en düşük kaybın olduğu noktaya doğru adımlar atar. Fotoğraf: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Gradient descent’i gerçekleştirmek için, gradyanların hesaplanması gerekir. Gradyanları hesaplamak için, kaybı/hata fonksiyonunu bilmemiz gerekir. Kaybı/hata fonksiyonunu kullanarak, türevi hesaplarız. Türev, bir fonksiyonun belirli bir noktadaki eğimini temsil eder, bu nedenle temel olarak kaybın eğimini hesaplarız. Kaybı, katsayılara kaybı/hata fonksiyonunu uygulayarak hesaplarız. Kaybı/hata fonksiyonunu “f” olarak temsil edebiliriz, bu nedenle kaybı hesaplamak için aşağıdaki eşitliği kullanabiliriz:

Kayıp = f(katsayı)

Türevi hesaplarız, yani eğimini belirleriz. Kaybın türevini hesaplamak, eğimdeki doğru yönde hareket etmemize yardımcı olur ve katsayılarda necessary değişikliği belirler. Bu değişikliği “delta” olarak temsil edebiliriz.

delta = türev_fonksiyonu(kayıp)

Şimdi, kaybın en düşük olduğu noktaya doğru hareket etmemiz gereken yönü belirledik. Bu, katsayılarda necessary değişikliği yapmamıza yardımcı olur ve kaybı azaltabilir. Katsayılarda değişikliği, önceki katsayılardan delta ve alpha (adım büyüklüğü) değerini çıkarmak suretiyle hesaplarız.

katsayı = katsayı – (alpha * delta)

Bu işlemi, ağın kaybı sıfıra yakınsayana kadar tekrarlarız.

Alpha (adım büyüklüğü) değerini doğru seçmek çok önemlidir. Seçilen alpha değeri ne çok küçük ne de çok büyük olmamalıdır. Unutmayın ki, en düşük kaybın olduğu noktaya yaklaştıkça, adımlarımızı küçültmeliyiz, yoksa gerçek en düşük noktayı aşabiliriz. Alpha değeri çok büyükse, ağın performansı en düşük kaybın olduğu noktaya ulaşamadan sürekli olarak o noktayı aşabilir ve geri dönebilir.

Buna karşılık, alpha değeri çok küçükse, ağın optimal parametrelerine ulaşması çok uzun zaman alabilir.

Gradient Descent Tipleri

Şimdi, gradient descent’in genel olarak nasıl çalıştığını anladığımıza göre, farklı gradient descent tiplerine göz atalım.

Batch Gradient Descent: Bu gradient descent tipi, tüm eğitim örneklerini işler ve ardından katsayılarda güncelleme yapar. Bu tip, en hesaplamalı olarak verimlidir, çünkü katsayılarda güncelleme yalnızca tüm batch işlendikten sonra yapılır, bu nedenle güncelleme sayısı daha azdır. Ancak, eğitim veri kümesi çok büyükse, batch gradient descent eğitim süresini uzatabilir.

Stochastic Gradient Descent: Stochastic gradient descent’te, her iterasyonda yalnızca bir eğitim örneği işlenir ve katsayılarda güncelleme yapılır. Bu, her eğitim örneği için yapılır. Sadece bir eğitim örneğinin işlenmesi ve ardından katsayılarda güncelleme yapılması, stochastic gradient descent’in batch gradient descent’den daha hızlı converge etmesini sağlar. Ancak, büyük veri kümelerinde, bu işlem çok uzun sürebilir.

Mini-Batch Gradient Descent: Mini-batch gradient descent, tüm eğitim veri kümesini daha küçük mini-batch’lere ayırır. Her mini-batch işlendikten sonra, katsayılarda güncelleme yapılır. Mini-batch gradient descent, stochastic gradient descent ve batch gradient descent arasında bir orta yol sağlar. Model, batch gradient descent’den daha sık güncellenir, bu nedenle slightly daha hızlı ve daha robust bir converge sağlar. Ayrıca, stochastic gradient descent’den daha hesaplamalı olarak verimlidir.

Blog yazarı ve programcı, Machine Learning ve Deep Learning konularında uzmanlık sahibi. Daniel, başkalarının AI'nin gücünü sosyal fayda için kullanmasına yardımcı olmak umudu taşıyor.