Yapay Zekâ 101
Gradient Descent Nedir?

Gradient Descent Nedir?
Eğer sinir ağlarının nasıl eğitildiğine dair bir şeyler okuduysanız, muhtemelen daha önce “gradient descent” terimini duymuşsunuzdur. Gradient descent bir sinir ağının performansını optimize etmenin birincil yöntemidir ve ağın kaybı/hata oranını azaltır. Ancak gradient descent, makine öğrenimi konusunda yeni olanlar için biraz zor anlaşılabilir ve bu makale size gradient descent nasıl çalışır konusunda yeterli bir sezgi verecektir.
Gradient descent bir optimizasyon algoritmasıdır. Sinir ağının performansını geliştirmek için kullanılır ve ağın parametrelerinde bazı ayarlamalar yapar, böylece ağın tahminleri ile ağın gerçek/beklenen değerleri (kayıp olarak adlandırılır) arasındaki fark mümkün olduğunca küçültülür. Gradient descent, parametrelerin ilk değerlerini alır ve parametrelerin değerlerini, ağı mümkün olduğunca doğru yapacağı değerlere doğru ayarlamak için hesaplamalar yapar. Gradient descent nasıl çalıştığını anlamak için çok fazla hesaba gerek yoktur, ancak gradientleri anlamak gerekir.
Gradyenler Nedir?
Bir sinir ağının yaptığı hata miktarını 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 hata noktalarını temsil eder. Bizim grafikteki en üst noktadan en alt noktaya doğru gitmemiz gerekir. Bir gradyan, sadece hata ve sinir ağının ağırlıkları arasındaki ilişkiyi nicel bir şekilde ifade eder. Bu iki şey arasındaki ilişki bir eğim olarak grafiklenebilir, yanlış ağırlıklar daha fazla hata üretir. Eğimdeki diklik, modelin ne kadar hızlı öğrendiğini temsil eder.
Eğimin dik olması, büyük hata azaltmaları yapıldığını ve modelin hızlı bir şekilde öğrendiğini gösterir, ancak eğimin sıfır olması, modelin bir plato üzerinde olduğunu ve öğrenmediğini gösterir. Eğimi hesaplayarak, modelimiz için bir hareket yönü (ağırlıkların değişimi) belirleyebiliriz.
Metaforu biraz değiştirerek, tepe ve vadiler dizisi hayal edelim. Vadideki en düşük noktaya ulaşmak istiyoruz. Tepeye çıktığımızda, büyük adımlar atarak vadideki en düşük noktaya doğru gidebileceğimizden emin olabiliriz.
Ancak vadideki en düşük noktaya yaklaştıkça, adımlarımızın küçülmesi gerekir, yoksa gerçek en düşük noktayı aşabilir ve vadideki diğer tarafına geçebiliriz. Benzer şekilde, ağırlıkları ayarladığımızda, ayarlamalar ağı gerçek en düşük noktadan uzaklaştırabilir ve因此 ayarlamaların zamanla küçülmesi gerekir. Vadideki en düşük noktaya inerken, gradyan, almamız gereken yolu ve adımlarımızın büyüklüğünü belirten bir vektör/talimatlar dizisidir.
Şimdi gradyanların, hangi yöne gitmemiz gerektiğini (hangi katsayılarda güncellenmesi gerektiğini) ve adımlarımızın ne kadar büyük olacağını (katsayılarda ne kadar güncellenmesi gerektiğini) söyleyen talimatlar olduğunu bildiğimize 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 yönünde adımlar atar ve optimal ağırlık yapılandırmasını bulmaya çalışır. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Gradient descent gerçekleştirmek için, önce gradyanlar hesaplanmalıdır. Gradyanları hesaplamak için kayıp fonksiyonuna ihtiyacımız vardır. Kayıp fonksiyonunu kullanarak türevi belirleyeceğiz. Hesaplamada, türev sadece bir fonksiyonun belirli bir noktadaki eğimini ifade eder, yani esas olarak kaybın eğimini hesaplıyoruz. Kaybı, katsayılara kaybı fonksiyonu aracılığıyla uygulayarak belirleriz. Kayıp fonksiyonunu “f” olarak temsil ediyorsak, kaybı hesaplamak için aşağıdaki gibi bir denklem kullanabiliriz (basitçe katsayılara seçtiğimiz maliyet fonksiyonunu uyguluyoruz):
Kayıp = f(katsayı)
Sonra türevi veya eğimini hesaplarız. Kaybın türevini almak, bize eğimdeki yukarı veya aşağı yönde hangi yöne gitmemiz gerektiğini söyler ve katsayılarda ayarlamamız için uygun işareti verir. Uygun yöne “delta” diyelim.
delta = türev_fonksiyonu(kayıp)
Şimdi en düşük kaybın yönünü belirledik. Bu, sinir ağının parametrelerindeki katsayıları güncelleyerek kaybı azaltabileceğimiz anlamına gelir. Katsayıları, önceki katsayılardan delta (yön) ve değişim büyüklüğünü kontrol eden bir argüman (adım büyüklüğü) kullanarak güncelleriz. Değişim büyüklüğünü kontrol eden argümana “öğrenme oranı” diyelim ve bunu “alpha” olarak temsil edelim.
katsayı = katsayı – (alpha * delta)
Sonra bu işlemi, ağ en düşük kaybın etrafında toplandığı ana kadar tekrarlarız, ki bu genellikle sıfıra yakındır.
Öğrenme oranını (alpha) doğru değer olarak seçmek çok önemlidir. Seçilen öğrenme oranı neither çok küçük ne de çok büyük olmamalıdır. En düşük kaybın noktasına yaklaştıkça adımlarımızın küçülmesi gerektiğini hatırlayın, yoksa gerçek en düşük kaybı aşabilir ve vadide diğer tarafına geçebiliriz. En düşük kaybın noktası küçüktür ve değişim oranımız çok büyükse, hata tekrar artabilir. Eğer adım büyüklükleri çok büyükse, ağın performansı en düşük kaybın noktası etrafında sürekli olarak sekebilir ve bir yandan aşabilir, diğer yandan da geri gelebilir. Eğer bu olursa, ağ asla optimal ağırlık yapılandırmasına ulaşamaz.
Öğrenme oranının çok küçük olması durumunda, ağ optimal ağırlıklara ulaşmak için çok uzun zaman alabilir.
Gradient Descent Türleri
Şimdi gradient descent nasıl çalıştığını genel olarak anladığımıza göre, farklı gradient descent türlerine bir göz atalım.
Toplu Gradient Descent: Bu gradient descent türü, parametreleri güncellemeden önce tüm eğitim örneklerini işler. Bu tür gradient descent, muhtemelen en hesaplamalı olarak verimli olanıdır, çünkü ağırlıklar yalnızca tüm toplu işlendikten sonra güncellenir, bu da daha az güncelleme anlamına gelir. Ancak, eğitim kümesi çok sayıda eğitim örneği içeriyorsa, toplu gradient descent eğitimi uzun sürebilir.
Rastgele Gradient Descent: Rastgele Gradient Descent’te, her bir gradient descent iterasyonu ve parametre güncellemesi için yalnızca bir eğitim örneği işlenir. Bu, her bir eğitim örneği için gerçekleşir. Çünkü yalnızca bir eğitim örneği işlendikten sonra parametreler güncellenir, bu da Rastgele Gradient Descent’in Toplu Gradient Descent’ten daha hızlı converge olmasını sağlar, çünkü güncellemeler daha erken yapılır. Ancak, işlem tüm eğitim kümesindeki her bir öğe için gerçekleştirilmelidir, bu nedenle büyük bir veri kümesi varsa, bu işlem çok uzun sürebilir ve diğer gradient descent türlerinden birinin kullanılması tercih edilebilir.
Mini-Toplu Gradient Descent: Mini-Toplu Gradient Descent, tüm eğitim veri kümesini daha küçük alt kümelere ayırarak çalışır. Mini-toplu veri kümesini ağdan geçirir ve mini-toplu veri kümesi kullanılarak hata hesaplandıktan sonra, katsayılara güncelleme yapılır. Mini-Toplu Gradient Descent, Rastgele Gradient Descent ve Toplu Gradient Descent arasında bir orta yol sağlar. Model, Toplu Gradient Descent’ten daha sık güncellenir, bu da modelin optimal parametrelerine slightly daha hızlı ve daha robust bir şekilde converge olmasına yol açar. Ayrıca, Rastgele Gradient Descent’ten daha hesaplamalı olarak verimlidir.












