Stokastik gradyan inişinin, her bir tekrarlamayı eğitim veri setinin farklı bir örneğiyle güncelleyerek geri yayılım kullanarak bir sinir ağını optimize etmek için kullanılabileceğini biliyorum. Parti büyüklüğü ne kadar büyük olmalıdır?
Stokastik gradyan inişinin, her bir tekrarlamayı eğitim veri setinin farklı bir örneğiyle güncelleyerek geri yayılım kullanarak bir sinir ağını optimize etmek için kullanılabileceğini biliyorum. Parti büyüklüğü ne kadar büyük olmalıdır?
Yanıtlar:
"Örnek size" olarak adlandırılır bahsediyoruz seri boyutu , . Toplu iş boyutu parametresi, mini toplu Stochastic Gradient Descent (SGD) içeren bir sinir ağını eğittiğinizde ayarlayacağınız hiper parametrelerden yalnızca biridir ve verilere bağlıdır. Hiper-parametre aramanın en temel yöntemi, ağı birleştiren bir çift bulmak için öğrenme oranı ve parti büyüklüğü üzerinde bir ızgara araması yapmaktır.
Parti boyutunun ne olması gerektiğini anlamak için parti gradyanı inişi, çevrimiçi SGD ve mini parti SGD arasındaki ilişkiyi görmek önemlidir. Burada, her üç tipin de genelleştirilmesi olan mini-seri SGD'deki ağırlık güncelleme basamağının genel formülü bulunmaktadır. [ 2 ]
1 ile kayıp fonksiyonunun artık rastgele bir değişken olmadığını ve stokastik bir yaklaşım olmadığını unutmayın.
SGD, normal "toplu" gradyan inişinden daha hızlı bir şekilde birleşir, çünkü egzersiz setinin rastgele seçilen bir alt kümesine baktıktan sonra ağırlıkları günceller. Let bizim eğitim seti olmak ve izin m ⊂ x . B parti büyüklüğü sadece m : B = | m | .
Toplu gradyan iniş ağırlıkları güncelleştirir tüm veri kümesi arasında gradyanları kullanılarak x ; SGD, mini parti m için ortalama gradyanlar kullanarak ağırlıkları günceller . (Ortalamanın bir toplamın aksine kullanılması, algoritmanın veri kümesi çok büyükse çok büyük adımlar atmasını engeller. Aksi takdirde, öğrenme oranınızı veri kümesinin boyutuna göre ayarlamanız gerekir.) Bunun beklenen değeri SGD'de kullanılan gradyanın stokastik yaklaşımı, parti gradyanı inişinde kullanılan deterministik gradyana eşittir. E [ ∇ L S G D ( θ , m ) ] = ∇ .
Bir örnek alıp ağırlıklarımızı her güncellediğimizde mini-batch olarak adlandırılır . Veri setinin tamamını taradığımız her seferde buna çağ denir .
En bazı veri vektör olduğunu varsayalım , bizim sinir ağı parameterizes bir ilk ağırlık vektörü θ 0 : R, S ve kayıp fonksiyonu L ( θ , x ) : R, S → R D → R S biz küçültmeye çalışıyorlar. Eğer T eğitim örneklerine ve toplu B boyutuna sahipsek, bu eğitim örneklerini C mini gruplarına bölebiliriz:
Basit olması için, T'nin B tarafından eşit bir şekilde bölünebilir olduğunu varsayabiliriz, ancak, bu olmadığında, genellikle olmadığı gibi, her mini partiye boyutunun bir işlevi olarak uygun ağırlık atanmalıdır.
Not: Gerçek hayatta, bu eğitim örneği verilerini bellekten okuyoruz ve önbellek önbelleğe alma ve bilgisayarınız tarafından yapılan diğer bellek püf noktaları nedeniyle, bellek erişimi birleştiğinde , yani belleği okuduğunuzda algoritmanız daha hızlı çalışacaktır. sırayla ve rastgele atlamak yok. Bu nedenle, çoğu SGD uygulaması veri kümesini karıştırır ve ardından örnekleri okunacakları sırayla belleğe yükler.
Yukarıda tarif edilen vanilya (momentum yok) SGD için ana parametreler:
Epsilonu, dönem sayısından öğrenme oranına kadar bir işlev olarak düşünmeyi seviyorum. Bu fonksiyona öğrenme oranı programı denir .
Öğrenme oranını sabit tutmak istiyorsanız epsilon'u sabit bir fonksiyon olarak tanımlayın.
Parti büyüklüğü, ağırlık güncellemesi yapmadan önce kaç örneğe bakacağınızı belirler. Ne kadar düşük olursa, eğitim sinyali o kadar gürültülü olur, ne kadar yüksek olursa, her adım için degradeyi hesaplamak o kadar uzun sürer.
Alıntılar ve Ek Okumalar:
For simplicity we can assume that D is evenly divisible by B
. T'nin B tarafından eşit bir şekilde bölünmesi gerektiği anlamına gelmiyor mu?
B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(Bengio'nun 2012 raporundan) ekleyebilirsin