Toplu gradyan inişine karşı stokastik gradyan inişine karşı


101

Bazı eğitim seti olduğunu varsayalım için . Ayrıca eğitim setinde bir tür denetimli öğrenme algoritması çalıştırdığımızı varsayalım. Hipotezler, . ve arasındaki "mesafeyi" en aza indiren parametrelerini bulmamız gerekir . Let(x(i),y(i))i=1,,mhθ(x(i))=θ0+θ1x(i)1++θnx(i)nθy(i)hθ(x(i))

J(θ)=12i=1m(y(i)hθ(x(i))2

Sonra en aza indiren bulmak istiyoruz . Degrade inişinde her parametreyi başlatır ve aşağıdaki güncelleştirmeyi gerçekleştiririz:θJ(θ)

θj:=θjαθjJ(θ)

Toplu gradyan iniş ve stokastik gradyan iniş arasındaki anahtar fark nedir?

Her ikisi de yukarıdaki güncelleme kuralını kullanır. Ama biri diğerinden daha iyi mi?

Yanıtlar:


121

Toplu veya stokastik gradyan inişinin uygulanabilirliği gerçekten beklenen hata manifolduna bağlıdır.

Toplu degrade iniş tüm veri kümesini kullanarak degradeyi hesaplar. Bu dışbükey veya göreceli olarak düz hata manifoldları için mükemmeldir. Bu durumda, yerel ya da global olarak bir miktar doğrudan en uygun çözüme doğru ilerliyoruz. Ek olarak, tavlanmış bir eğim oranı, tavlanmış bir öğrenme oranı verildiğinde, en sonunda cazibe havzasında bulunan minimumları bulacaktır.

Stokastik gradyan inişi (SGD), tek bir numune kullanarak gradyanı hesaplar. SGD'nin çoğu uygulaması, daha sonra açıklanacak sebeplerden dolayı, birkaç örnekten oluşan bir minibatch kullanır. SGD iyi çalışır (Çok iyi değil, çok fazla yerel maksima / minima içeren hata manifoldları için sanırım, ancak parti gradyanı inişinden daha iyi). Bu durumda, azaltılmış örnek sayıları kullanılarak hesaplanan biraz gürültülü eğim, modeli yerel minimadan umarım daha uygun bir bölgeye sarsma eğilimindedir. Tekli numuneler gerçekten gürültülüdür, minibatch'ler ise bir miktar ses çıkarıyor. Böylece minibatch'ler kullanıldığında sarsıntı miktarı azalır. Minibatch büyüklüğü, bazı fakir yerel minimalardan kaçınmak için yeterince küçük fakat yapamayacağı kadar büyük olduğunda iyi bir denge oluşuyor. • küresel minimumdan veya daha iyi performans gösteren yerel minimumdan kaçının. (Bu, en iyi minimumun daha büyük ve daha derin bir çekim alanına sahip olduğunu ve bu yüzden içine düşmenin daha kolay olduğunu varsayar.)

SGD'nin bir avantajı, hesaplama açısından çok daha hızlı olmasıdır. Büyük veri kümeleri genellikle RAM'de tutulamaz, bu da vektörleşmeyi çok daha az verimli hale getirir. Aksine, her numune veya numune grubu yüklenmeli, çalışılmalı, saklanan sonuçlar vb. Olmalıdır. Öte yandan, minibatch SGD genellikle bilerek hesaplanabilecek şekilde küktür.

Genellikle, bu hesaplama avantajı, SGD'nin daha fazla yinelemesi gerçekleştirilerek, geleneksel parti gradyanı inişinden çok daha fazla adım atılarak artırılır. Bu genellikle toplu gradyan inişiyle bulunabilecek olana çok yakın veya daha iyi bir modelle sonuçlanır.

SGD'nin nasıl çalıştığını düşünmekten hoşlanmam, girdi dağılımımı temsil eden bir noktaya sahip olduğumu hayal etmektir. Benim modelim bu girdi dağılımını öğrenmeye çalışıyor. Giriş dağılımını çevreleyen, örnekleyebileceğim tüm olası minibatch'lerin giriş dağılımlarını temsil eden gölgeli bir alandır. Minibatch giriş dağılımlarının gerçek giriş dağılımına yakın olduğu genellikle adil bir varsayımdır. Toplu degrade iniş, tüm adımlarda, gerçek giriş dağılımına ulaşmak için en dik rotayı izler. Öte yandan SGD, gölgeli alan içerisinde rastgele bir nokta seçer ve bu noktaya doğru en dik yolu seçer. Her yinelemede, yeni bir nokta seçer. Tüm bu adımların ortalaması, genellikle oldukça iyi olan gerçek girdi dağılımına yaklaşacaktır.


13
Uygulamada hiç kimse Batch Gradient Descent kullanmaz. Çok fazla bir kazanç elde etmek için hesaplamak pahalı değil. (Kazanç aslında "gerçek" gradyanını düşürmenizdir.) Dışbükey olmayan bir kayıp fonksiyonunuz olduğunda, çoğunlukla doğru yöne gitmeniz gerekir ve sonunda yerel bir minimumda birleşirsiniz. Böylece, minibatch SGD.
sabalaba

@Jason_L_Bens'te bu algoritmalar hakkında daha fazla bilgi alabileceğim herhangi bir referansım (bildiri veya çevrimiçi metin) var mı?
user110320

1
@ user110320 Başımın üstünden değil, hayır, çok yaygın algoritmalar olmasına rağmen, bu yüzden biraz arama ile konuyla ilgili bir ton kaynak bulunmalıdır. Genel bir yaklaşım arıyorsanız, Yoshua Bengio'nun AI için Öğrenme Derin Mimarileri bölümünü okumanızı tavsiye ederim. Başladığım yer orası.
Jason_L_Bens 10:18

6

Diğer yanıtların da belirttiği gibi, SGD'yi kullanmanın asıl nedeni, gradyanın hesaplama maliyetini düşürürken, birçok küçük parti veya numunenin ortalaması alındığında gradyan yönünü büyük ölçüde koruyarak - kesinlikle yerel asgari seviyeye getirmenize yardımcı olmaktır.

  1. Minibatch neden çalışır ?

Bunun arkasındaki matematik, maliyet fonksiyonunun "gerçek" gradyanının (genelleme hatası veya sonsuz büyük numuneler için olan gradyan) gradyanın gerçek veri üreten dağıtım üzerindeki beklenti olmasıdır . bir örnek grubu üzerinden hesaplanan gerçek gradyan, her zaman ampirik veri dağılımıyla ile gerçek gradyana bir yaklaşımdır . pdatap^data

g=Epdata(J(θ)θ)
Toplu degrade iniş tüm veri örnekleri verilen olası "optimal" degrade getirebilir, ancak "gerçek" degrade değildir. Daha küçük bir parti (minibatch) muhtemelen tam parti kadar optimal değildir, fakat her ikisi de yaklaşık değerlerdir - yani tek örnekli minibatch (SGD). Standart hatalar arasındaki fark, minibatch'in boyutları ile ters orantılıdır. Yani,
SE(g^(n))SE(g^(m))=mn
Yani, standart hatanın azaltılması, numune büyüklüğünün artmasının kareköküdür. Yukarıdaki denklem, minibatch gradyan inişinin bir basamağında hesaplanan gradyanlar içindir. Minibatch gradyan güncellemelerinin adımlarını yinelediğinizde ve tüm eğitim örneklerini nihayet bir çağda kullandığınızda, verilen tüm örneklere dayanarak degradelerin ortalamasını neredeyse hesaplarsınız. Yani, minibatch boyutu , Yukarıdaki denklemlerden, tek bir dönemle, farklı minibatch boyutlarına sahip ortalama gradyanlarınızım
Ep^data(g^(m))=Ep^data(J(θ)θ)
m (bir partiden tam partiye) aynı standart hataya sahiptir ve daha da önemlisi, hepsi "doğru" gradyanına sadık yaklaşımlardır, yani "doğru" gradyanının doğru yönüne hareket ederler.
  1. Minibatch neden daha iyi çalışabilir ?

İlk olarak, minibatch, daha küçük parti büyüklüğüne sahip olan düşük hesaplama talebi nedeniyle teknik olarak çözülemeyen bazı öğrenme problemlerini çözülebilir hale getirir.

İkincisi, azaltılmış parti büyüklüğü mutlaka azaltılmış gradyan doğruluğu anlamına gelmez. Eğitim örneklerinin çoğunda çok fazla gürültü veya aykırı veya önyargı var. Rastgele örneklenmiş bir mini seri, orijinal veri grubundan daha iyi (veya daha kötüsü değil) gerçek veri üretme dağılımını yansıtabilir. Minibatch gradyan güncellemelerinin bazı yinelemeleri size daha iyi bir tahmin verirse, genel olarak bir dönemin ortalama sonucu, tam bir partiden hesaplanan gradyandan daha iyi olabilir.

Üçüncüsü, minibatch sadece nahoş veri örnekleriyle başa çıkmaya yardımcı olmakla kalmaz, aynı zamanda birçok yerel minimuma sahip olan nahoş maliyet işleviyle de ilgilenir. Jason_L_Bens'ın belirttiği gibi, bazen hata manifoldları normal bir gradyanı yerel bir minimaya yakalamak daha kolay olabilirken, minibatch ile hesaplanan geçici olarak rastgele gradyanı yakalamak daha zor olabilir.

Son olarak, gradyan inişiyle tek adımda küresel minimaya ulaşmıyorsunuz, ancak erro manifoldunu tekrarlıyorsunuz. Gradyan büyük ölçüde size yalnızca yinelenecek yönü verir. Minibatch ile çok daha hızlı yineleyebilirsiniz. Çoğu durumda, daha fazla yineleme, ulaşabileceğiniz daha iyi noktaya. Gerçekten de tüm hava koşullarında küresel ve hatta yerel olarak en uygun nokta umrunda değil. Sadece size kabul edilebilir genelleme hatası veren makul bir modele ulaşmak istiyorsunuz. Minibatch bunu kolaylaştırıyor.

Ian Goodfellow'un "Deep learning" kitabını ve ark.nın dikkatlice okuduysanız, bu konuda oldukça iyi tartışmalar yaptığını görebilirsiniz.


Dışbükey optimizasyon problemleri için söyledikleriniz iyi. Ancak dışbükey olmayan işlevlerde gradyan yöntemlerini kullanmak için, SGD'nin toplu GD'den daha iyi olmasının çok önemli bir nedenini kaçırdınız. Yanıtımı
horaceT

@horaceT Yorumunuz için teşekkür ederiz. Bahsettiğiniz nokta Jason_L_Bens tarafından yukarıda ayrıntılarla açıklandığı için, tekrar etmek için uğraşmadım, ancak son üçüncü paragraftaki cevabını gerekli saygıda bulundurarak yanıtını vermedim. Gradyan iniş optimizasyon problemi için, dışbükey olmayan tel, eyer noktası da dahil olmak üzere yerel minima tarafından yansıtılır (son üçüncü paragrafa bakınız); ve açıklama uğruna, cevabım SGD'yi minibatch olarak, ancak parti büyüklüğü 1 olarak tanımladı (üçüncü paragrafa bakın).
Xiao-Feng Li,

3

Bana göre, toplu gradyan, yağsız gradyana benzer. Yalın gradyanda parti büyüklüğü seçilir, böylece güncellenecek olan her parametre parti içinde bağımsız, ancak mutlaka dikey olmayan şekilde değişebilir. Örneğin, parti 10 deneme, 10 satır içeriyorsa, bağımsız sütun oluşturmak mümkündür. 10 satır, bağımsız, ancak dik olmayan 512 parametrelerinin güncellenmesini sağlar.2101=512

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.