Stochastic Gradient Descent (SGD), (lineer) Destek Vektör Makineleri ve Lojistik Regresyon gibi konveks kayıp fonksiyonları altında lineer sınıflandırıcıların ayırt edici öğreniminde basit ama çok etkili bir yaklaşımdır. SGD, makine öğrenmesi alanında uzun zamandır var olsa da, son zamanlarda büyük ölçekli öğrenme bağlamında dikkat çekmektedir.

SGD, metin sınıflandırmasında ve doğal dil işlemede sıklıkla karşılaşılan büyük ölçekli ve seyreltilmiş makine öğrenmesi problemlerine başarıyla uygulanmıştır. Verilerin seyrek olduğu göz önüne alındığında, bu modüldeki sınıflandırıcılar, 10^5 den fazla eğitim örneği ve 10^5’den fazla özellik içeren problemlere kolayca ölçeklenebilir.

Stochastic Gradient Descent’in avantajları:

  • Verimlilik
  • Uygulama kolaylığı (kod ayarlama için birçok olanak)

Stochastic Gradient Descent’in dezavantajları şunları içerir:

  • SGD, düzenlileştirme parametresi ve yineleme sayısı gibi bir dizi hiper parametre gerektirir
  • SGD özellik ölçeklemeye duyarlıdır

Gra­di­ent Descent’te wdeğerini her bir adımda (step) bütün verise­tini gezdik­ten sonra gün­cellenebiliyor. Bütün veri setini gezmek gerken bah­set­tiğim  nota­sy­onu ile yapılan işlem. Sto­chas­tic Gra­di­ent Descent’te amaç her bir adımda verisetindeki her bir örneği gezdik­ten sonra gün­celle­mektir.

SGD’nin en büyük avantajı, eğitim örneği sayısıyla temelde doğrusal olan verimliliğidir. X, bir boyut matrisi (n, p) ise, k, yineleme sayısı (dönemler) ve \bar p, örnek başına sıfıra yakın niteliklerin ortalama sayısı olan O(k n \bar p) maliyetine sahiptir .
Bununla birlikte, son teorik sonuçlar, eğitim seti boyutu arttıkça, istenen optimizasyon hassasiyetini elde etmek için çalışma süresinin artmadığını göstermektedir.

Her iterasyondaki parametrelere bir sonraki güncellemeyi hesaplamak için tam eğitim setini kullanan sınırlı bellek BFGS gibi toplu yöntemler, yerel optimuma çok yakınsaklık kazanma eğilimindedir. Ayrıca, ayar yapmak için çok az sayıda hiper parametreye sahip oldukları için, iyi bir raf uygulamasına (örn., MinFunc) sağlanan bir çalışma ortamı sağlamak için açıktırlar. Bununla birlikte, pratikte, veri seti ana belleğe sığmayacak kadar büyükse, tüm eğitim seti için maliyet ve gradyan hesaplama, tek bir makinede çok yavaş ve bazen zor olabilir. Toplu optimizasyon yöntemleriyle ilgili bir diğer konu da, yeni verileri “çevrimiçi” bir ayara dahil etmek için kolay bir yol sağlamamalarıdır. Stochastic Gradient Descent (SGD), yalnızca bir veya birkaç eğitim örneğini gördükten sonra objektifin negatif eğimini izleyerek bu konuların her ikisine de değinir. SGD’nin kullanımı Sinir ağı ayarında, tam eğitim seti üzerinden geri yayılımı çalıştırmanın yüksek maliyeti tercih edilir. SGD bu maliyetten kurtulabilir ve yakınsama hızlanır.

Stochastic Gradient Descent

Standart dereceli azalma algoritması objektif  θ ve  J(θ) parametrelerini şu şekilde güncellenir:

formul_stochastic
Burada, yukarıdaki denklemdeki beklenti, tam eğitim seti üzerinden maliyet ve dereceyi değerlendirerek yaklaşıklaştırılır. Stochastic Gradient Descent (SGD), güncellemedeki beklentiyi ortadan kaldırır ve yalnızca bir veya birkaç eğitim örneği kullanılarak parametrelerin değişim derecesini hesaplar. Yeni güncelleme,

formul_stochastic2
eğitim setindeki xiyiile eşleştirilmesi.

Genellikle, SGD’deki her parametre güncellemesi, tek bir örneğe kıyasla birkaç eğitim örneği veya bir minibatch olarak hesaplanır. Bunun nedeni iki yönlüdür: önce parametre güncellemesindeki değişimi azaltılır ve daha istikrarlı yakınsama getirilir, ikincisi, hesaplamanın maliyetinin ve derecenin iyi vektörize edilmiş bir hesaplamada kullanılması gereken yüksek düzeyde optimize edilmiş matris işlemlerinden yararlanmasını sağlar.  Minibatch’in en uygun boyutu farklı uygulamalar ve mimariler için değişiklik gösterse de tipik bir minibatch boyutu 256’dır.

SGD’de, öğrenme hızı α genellikle karşılık gelen dereceli azalmayla ilgili öğrenme oranından çok daha küçüktür, çünkü güncellemede çok daha fazla varyans vardır. Doğru öğrenme oranını ve zamanlamasını seçme (örneğin, öğrenme ilerledikçe öğrenme oranının değerini değiştirme) oldukça zor olabilir. Uygulamada iyi çalışan bir standart yöntem, ilk döngüde(initial epoch) (eğitim seti üzerinden tam geçiş) veya iki eğitimde sabit yakınsaklık sağlayan küçük bir sabit öğrenme oranını kullanmak ve yakınsaklık yavaşlarken öğrenme oranının değerini yarıya indirmektir. Daha iyi bir yaklaşım, her döngüden sonra saklanan bir kümeyi değerlendirmek ve döngüler arasındaki hedef değişikliği küçük bir eşiğin altında olduğunda öğrenme hızını ayarlamaktır. Bu, yerel bir optimuma iyi yakınsama eğilimi gösterir. Yaygın olarak kullanılan diğer bir zamanlama, her yinelemede t öğrenme hızını a / (b + t) olarak hesaplamaktır; burada a ve b ilk öğrenme hızını belirtir ve döngü sırasıyla başlatılır. Daha sofistike yöntemler, en iyi güncellemeyi bulmak için bir geri çekilme hattı aramasını kullanmayı içerir.

SGD ile ilgili son ama önemli nokta, veriyi algoritmaya sunmamızın sırasındadır. Veriler anlamlı bir sırayla verilirse, bu dereceyi bozabilir ve zayıf yakınsama yol açabilir. Genellikle bunu önlemek için iyi bir yöntem olan, verilerin her bir eğitim aşamasından önce rastgele karıştırılmasını sağlamaktır.formul_stochastic3

Referans:

http://scikit-learn.org/stable/modules/sgd.html