AI 101
Gradyan İniş nedir?
Gradyan İniş nedir?
Sinir ağlarının nasıl eğitildiğini okuduysanız, daha önce "gradyan iniş" terimiyle neredeyse kesinlikle karşılaşmışsınızdır. Dereceli alçalma bir sinir ağının performansını optimize etmenin, ağın kayıp/hata oranını azaltmanın birincil yöntemidir. Ancak, makine öğrenimine yeni başlayanlar için gradyan inişini anlamak biraz zor olabilir ve bu makale, gradyan inişinin nasıl çalıştığına dair size iyi bir sezgi vermeye çalışacaktır.
Gradyan iniş bir optimizasyon algoritmasıdır. Ağın tahminleri ile ağın gerçek/beklenen değerleri arasındaki fark (kayıp olarak anılır) mümkün olduğunca küçük olacak şekilde ağın parametrelerinde ince ayarlar yaparak bir sinir ağının performansını iyileştirmek için kullanılır. Gradyan iniş, parametrelerin başlangıç değerlerini alır ve değerlerini ağı olabildiğince doğru yapacak değerlere ayarlamak için analize dayalı işlemleri kullanır. Gradyan inişinin nasıl çalıştığını anlamak için çok fazla matematik bilmenize gerek yok, ancak degradeler hakkında bir anlayışa sahip olmanız gerekiyor.
Degradeler Nedir?
Bir sinir ağının yaptığı hata miktarını temsil eden bir grafik olduğunu varsayalım. Grafiğin altı en düşük hata noktalarını temsil ederken, grafiğin üstü hatanın en yüksek olduğu noktadır. Grafiğin tepesinden aşağıya doğru hareket etmek istiyoruz. Bir gradyan, hata ile sinir ağının ağırlıkları arasındaki ilişkiyi ölçmenin bir yoludur. Bu iki şey arasındaki ilişki eğim olarak çizilebilir, yanlış ağırlıklar daha fazla hata üretir. Eğimin/eğimin dikliği, modelin ne kadar hızlı öğrendiğini gösterir.
Daha dik bir eğim, hatada büyük azalmalar yapıldığı ve modelin hızlı öğrendiği anlamına gelir; oysa eğim sıfırsa, model bir düzlüktedir ve öğrenmemektedir. Modelimiz için bir gradyan, bir hareket yönü (ağ parametrelerindeki değişiklik) hesaplayarak daha az hataya doğru yokuş aşağı hareket edebiliriz.
Metaforu biraz değiştirelim ve bir dizi tepe ve vadi hayal edelim. Tepenin dibine inip vadinin en düşük kaybı temsil eden kısmını bulmak istiyoruz. Tepenin zirvesinden yola çıktığımızda yokuş aşağı büyük adımlar atabilir ve vadinin en alçak noktasına doğru gittiğimizden emin olabiliriz.
Ancak vadinin en alçak noktasına yaklaştıkça adımlarımızın küçülmesi gerekecek, yoksa gerçek en alçak noktayı aşabiliriz. Benzer şekilde, ağın ağırlıklarını ayarlarken, ayarlamaların aslında onu en düşük kayıp noktasından daha da uzaklaştırması mümkündür ve bu nedenle ayarlamaların zamanla küçülmesi gerekir. Bir tepeden en düşük kayıp noktasına doğru inme bağlamında, eğim, izlememiz gereken yolu ve adımlarımızın ne kadar büyük olması gerektiğini detaylandıran bir vektör/talimatlardır.
Artık gradyanların bize hangi yönde hareket etmemiz gerektiğini (hangi katsayıların güncellenmesi gerektiğini) ve atacağımız adımların ne kadar büyük olduğunu (katsayıların ne kadar güncellenmesi gerektiğini) söyleyen talimatlar olduğunu biliyoruz, gradyanın nasıl hesaplandığını keşfedebiliriz.
Eğimleri ve Gradyan İnişini Hesaplama

Gradyan iniş, yüksek kayıplı bir yerde başlar ve çoklu iterasyonlarla en düşük kayıp yönünde adımlar atarak optimum ağırlık konfigürasyonunu bulmayı amaçlar. Fotoğraf: Wikimedia Commons aracılığıyla Роман Сузи, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Gradyan inişini gerçekleştirmek için öncelikle eğimlerin hesaplanması gerekir. Sırayla gradyanı hesaplamak için, kayıp/maliyet fonksiyonunu bilmemiz gerekiyor. Türevi belirlemek için maliyet fonksiyonunu kullanacağız. Hesaplamada türev, yalnızca belirli bir noktadaki bir fonksiyonun eğimine atıfta bulunur, bu nedenle temelde yalnızca kayıp fonksiyonuna dayalı olarak tepenin eğimini hesaplıyoruz. Kaybı, katsayıları kayıp fonksiyonundan geçirerek belirliyoruz. Kayıp fonksiyonunu "f" olarak temsil edersek, kaybı hesaplamak için denklemin aşağıdaki gibi olduğunu söyleyebiliriz (katsayıları yalnızca seçtiğimiz maliyet fonksiyonundan geçiriyoruz):
Kayıp = f(katsayı)
Daha sonra türevi hesaplıyoruz veya eğimi belirliyoruz. Kaybın türevini almak, bize katsayılarımızı ayarlamak için uygun işareti vererek, eğimin hangi yönün yukarı veya aşağı olduğunu söyleyecektir. Uygun yönü “delta” olarak göstereceğiz.
delta = türev_fonksiyonu(kayıp)
Artık hangi yönün en düşük kayıp noktasına doğru yokuş aşağı olduğunu belirledik. Bu, sinir ağı parametrelerindeki katsayıları güncelleyebileceğimiz ve umarım kaybı azaltabileceğimiz anlamına gelir. Önceki katsayılara dayalı olarak katsayıları, yön (delta) tarafından belirlenen değerdeki uygun değişiklik eksi ve değişimin büyüklüğünü (adımımızın boyutu) kontrol eden bir bağımsız değişkene göre güncelleyeceğiz. Güncellemenin boyutunu kontrol eden argümana “öğrenme oranı” ve onu “alfa” olarak temsil edeceğiz.
katsayı = katsayı – (alfa * delta)
Daha sonra, ağ sıfıra yakın olması gereken en düşük kayıp noktası etrafında birleşene kadar bu işlemi tekrarlıyoruz.
Öğrenme oranı (alfa) için doğru değeri seçmek çok önemlidir. Seçilen öğrenme oranı ne çok küçük ne de çok büyük olmalıdır. En düşük kayıp noktasına yaklaştığımızda adımlarımızın küçülmesi gerektiğini unutmayın, aksi takdirde gerçek en düşük kayıp noktasını aşacağız ve diğer tarafa geçeceğiz. En küçük kayıp noktası küçüktür ve değişim oranımız çok büyükse hata tekrar artabilir. Adım boyutları çok büyükse, ağın performansı bir tarafta ve sonra diğer tarafta aşarak en düşük kayıp noktası etrafında sıçramaya devam edecektir. Bu olursa, ağ hiçbir zaman gerçek optimum ağırlık konfigürasyonunda birleşemez.
Buna karşılık, öğrenme oranı çok küçükse, ağın optimum ağırlıklara yaklaşması potansiyel olarak olağanüstü uzun zaman alabilir.
Gradyan İniş Türleri
Artık gradyan inişinin genel olarak nasıl çalıştığını anladığımıza göre, farklı yöntemlerden bazılarına göz atalım. gradyan iniş türleri.
Toplu Gradyan İnişi: Bu gradyan iniş formu, katsayıları güncellemeden önce tüm eğitim örneklerinden geçer. Ağırlıklar yalnızca tüm parti işlendikten sonra güncellendiğinden, yani toplamda daha az güncelleme olduğu anlamına geldiğinden, bu tür gradyan iniş muhtemelen hesaplama açısından en verimli gradyan iniş şekli olacaktır. Bununla birlikte, veri kümesi çok sayıda eğitim örneği içeriyorsa, toplu gradyan iniş, eğitimin uzun sürmesine neden olabilir.
Stokastik Gradient Descent: Stokastik Gradient Descent'te, her gradyan iniş ve parametre güncelleme yinelemesi için yalnızca tek bir eğitim örneği işlenir. Bu, her eğitim örneği için oluşur. Parametreler güncellenmeden önce yalnızca bir eğitim örneği işlendiğinden, güncellemeler daha erken yapıldığından Toplu Gradyan İnişinden daha hızlı yakınsama eğilimi gösterir. Ancak eğitim kümesindeki her öğe üzerinde işlem yapılması gerektiğinden, veri kümesi büyükse tamamlanması oldukça uzun sürebilir ve bu nedenle tercih edilirse diğer gradyan iniş türlerinden birinin kullanılması.
Mini-Batch Gradient Descent: Mini-Batch Gradient Descent, tüm eğitim veri setini alt bölümlere ayırarak çalışır. Ağ üzerinden yürütülen daha küçük mini partiler oluşturur ve hatayı hesaplamak için mini parti kullanıldığında katsayılar güncellenir. Mini-toplu Gradient Descent, Stokastik Gradient Descent ve Batch Gradient Descent arasında bir orta noktayı vurur. Model, Batch Gradient Descent durumunda olduğundan daha sık güncellenir, bu da modelin optimum parametreleri üzerinde biraz daha hızlı ve daha sağlam bir yakınsama anlamına gelir. Ayrıca Stokastik Gradient Descent'ten hesaplama açısından daha verimlidir.