Sinir ağında parti büyüklüğü nedir?


174

Python Keras packageSinir ağı için kullanıyorum . Bu bağlantı . Is batch_sizetesti numune sayısına eşittir? Wikipedia'dan şu bilgilere sahibiz :

Bununla birlikte, diğer durumlarda, toplam gradyanı değerlendirmek, tüm summand işlevlerinden gradyanların pahalı değerlendirmelerini gerektirebilir. Eğitim seti muazzam olduğunda ve basit formüller olmadığında, gradyanların toplamını değerlendirmek çok pahalı olur çünkü gradyanı değerlendirmek tüm summand fonksiyonlarının gradyanlarını değerlendirmeyi gerektirir. Her yinelemede hesaplama maliyetini düşürmek için, stokastik gradyan inişi her adımda bir summand işlevi alt kümesini örnekler. Bu, büyük ölçekli makine öğrenmesi problemleri durumunda çok etkilidir.

Yukarıdaki bilgiler test verilerini açıklıyor mu? Bu batch_size, keras ile aynı mı (gradyan güncellemesi başına örnek sayısı)?


3
Class.coursera.org/ml-005/lecture/preview kursunu görmek güzel , özellikle sizin için 4-6 + 10. hafta. Vikipedi sinir ağlarını öğrenmek için çok değerli bir kaynak olmayabilir.
404pio

Yanıtlar:


228

Parti boyutu şebeke boyunca çoğaltılan edilecek numune sayısını tanımlar.

Örneğin, 1050 eğitim örneğiniz olduğunu ve batch_size100'e eşit olmasını istediğinizi varsayalım. Algoritma, ilk 100 örneği (1'den 100'e kadar) eğitim veri setinden alır ve ağı eğitir. Daha sonra, ikinci 100 örneği alır (101'den 200'e kadar) ve ağı tekrar eğitir. Tüm numuneleri ağ üzerinden iletinceye kadar bu işlemi yapmaya devam edebiliriz. Son örnek kümesinde sorun olabilir. Örneğimizde, geri kalan 100 olmadan 100 tarafından bölünmeyen 1050'yi kullandık. En basit çözüm sadece son 50 numuneyi almak ve ağı eğitmektir.

Parti büyüklüğü kullanmanın avantajları <tüm örneklerin sayısı:

  • Daha az hafıza gerektirir. Ağı daha az örnek kullanarak eğittiğiniz için, genel eğitim prosedürü daha az hafıza gerektirir. Bu özellikle tüm veri setini makinenizin hafızasına sığdıramazsanız önemlidir.

  • Genellikle ağlar mini partilerle daha hızlı çalışır. Çünkü her yayılımdan sonra ağırlıkları yeniliyoruz. Örneğimizde 11 parti ürettik (10'unda 100 örnek ve 1'inde 50 örnek vardı) ve her birinin ardından ağımızın parametrelerini güncelledik. Yayılma sırasında tüm örnekleri kullanırsak ağ parametresi için sadece 1 güncelleme yaparız.

Parti büyüklüğü kullanmanın dezavantajları <tüm örneklerin sayısı:

  • Parti ne kadar küçük olursa, degradenin tahmini o kadar az doğru olur. Aşağıdaki şekilde, mini parti gradyanının (yeşil renk) yönünün, tam parti gradyanının (mavi renk) yönüne kıyasla çok daha fazla dalgalandığını görebilirsiniz.

Farklı toplu kurulumlar için degrade yönleri

Stokastik, batch_size1'e eşit sadece bir mini partidir . Bu durumda, gradyan, bir mini parti gradyanından daha sık yönünü değiştirir.


Cevabın için teşekkür ederim. çalışıyor Kerasmusun Yine de bu pakette test verilerini ayarlamak için?
user2991243

3
Hayır yapmadım. Bu sinir ağlarında popüler bir tekniktir ve farklı kütüphanelerde, kitaplarda ve makalelerde görebileceğiniz bu terminolojidir. Her çağda test verisi hatasını kontrol etmek mi istiyorsunuz yoksa sadece eğitimden sonra modeli doğrulamak mı istiyorsunuz?
itdxer

Evet. Bu doğru. İçimizdeki benzer yapı MATLABancak burada sadece tren ve doğrulama veri setlerini buldum. Bence bu pakette validasyon veri seti test verileriyle aynı ama erken durma olmadığından gerçek validasyon verilerimiz yok.
user2991243

1
Ağ, ayrıca güncelleme sayısı oldukça fazla olduğundan daha hızlı bir şekilde birleşiyor. Küçük parti boyutunu ayarlamak çok küçük bir sanattır ve öğrenmenizi çok stokastik, daha hızlı hale getirme riski taşırsınız, ancak güvenilmez modellere, çok büyük ve belleğe sığmayacak ve hala yaş almayacak.
Ramalho

1
Genellikle insanlar çevrimiçi öğrenme derken kastettiler batch_size=1. Çevrimiçi öğrenmenin arkasındaki fikir, modelinizi görür görmez modelinizi güncellemenizdir. Daha büyük parti büyüklüğü ile, güncelleme yapmadan önce birden fazla numuneye baktığınız anlamına gelir. RNN'de partinin büyüklüğü farklı anlamlara gelebilir. Genellikle, eğitim sırasını sabit büyüklükte bir pencereye bölmek yaygındır (10 kelime gibi). Bu durumda antrenman sırasında bu pencerelerin 100'ünü de içerdiğiniz anlamına gelir batch_size=100.
itdxer

151

Yapay sinir ağ terminolojisinde:

  • bir dönem = bir ileri geçiş ve tüm eğitim örneklerinin bir geri geçişi
  • parti büyüklüğü = bir ileri / geri geçişindeki antrenman örneklerinin sayısı. Parti boyutu ne kadar yüksek olursa, ihtiyacınız olan hafıza alanı o kadar fazla olur.
  • sayısı iterasyon geçiş sayısını = örnekler [parti boyutu] sayısını kullanarak her pas. Açık olmak gerekirse, bir geçiş = bir ileri geçiş + bir geriye geçiş (ileri geçişi ve geri geçişi iki farklı geçiş olarak saymayız).

Örnek: 1000 eğitim örneğiniz varsa ve parti büyüklüğünüz 500 ise, 1 dönemi tamamlamak için 2 yineleme gerekir.

Bilginize: Tradeoff parti büyüklüğü vs. bir sinir ağı yetiştirmek için yineleme sayısı


Ancak, [parti büyüklüğü] örnek numaralarını kullanmak ve ağı her örnek üzerinde eğitmek ve sonraki [parti büyüklüğü] sayı örnekleriyle devam etmek arasındaki fark nedir? Ağ üzerinden bir örnek ilettiğinizden ve SGD'yi uyguladığınızdan ve bir sonraki örneği aldığınızdan ve böylece parti büyüklüğü 10 veya 1000 veya 100000 ise hiçbir fark yaratmayacaktır. sonraki parti takip edecek. Bu yalnızca, örneğin [parti büyüklüğü] sayıları ağın [yineleme sayısı] katından sonra tekrar eder ve ardından sonraki [parti büyüklüğü] örnekleriyle devam eder.
Erhard Dinhobl

Önemli bir ayrım, öğrenme adımının (bir adım) her parti için bir kez uygulanması, bir aşama yapmak için tüm gruplar arasında geçiş yapmanız gerektiğidir. Bu yüzden fark, sadece bellekte de algoritmik değildir: daha büyük gruplar, daha fazla örnek üzerinde gradyanı ortalaması aldığınız anlamına gelir.
meduz

Çağ ile yineleme arasındaki fark nedir?
Goldname,

1
@Goldname 1 dönemi tüm eğitim örneklerini içerirken 1 yineleme yalnızca [toplu iş boyutu] sayıdaki eğitim örneklerini içerir.
Franck Dernoncourt

3

Bir CPU ile bir Optimizasyon Problemi çözerken, bazı Girdi Verileri üzerine yinelemeli bir Algoritma uygularsınız. Bu yinelemelerin her birinde, genellikle Verilerde Bazı Hesaplamalar yaparken, sorunun bir Metrik değerini güncellersiniz. Artık verilerinizin boyutu büyük olduğunda, her yinelemeyi tamamlamak için önemli miktarda zamana ihtiyaç duyabilir ve çok fazla kaynak tüketebilir. Bu yüzden bazen zaman ve hesaplama kaynaklarını korumak için bu yinelemeli hesaplamaları Verilerin Bir Kısmına uygulamayı seçersiniz. Bu kısım, batch_size'dir ve işlem (Neural Network Lingo'da) toplu veri işleme olarak adlandırılır. Hesaplamalarınızı tüm verilerinize uyguladığınızda, çevrimiçi veri işlemeyi yaparsınız. Sanırım terminoloji 60'lardan ve hatta daha önce geliyor. Kimse hatırlıyor mu? yarasa DOS dosyaları? Fakat elbette, bu kavram, kullanılacak verilerin bir ipliği veya kısmı anlamına geliyordu.


2

Belgeleri Kerasilgili toplu boyutu altında bulunabilir fitişlev Modelleri (fonksiyonel API) sayfa

batch_size: Tamsayılı veya Yok. Degrade güncellemesi başına örnek sayısı. Belirtilmezse, batch_size varsayılan olarak 32 olur.

Küçük bir veri kümeniz varsa, parti boyutunu eğitim verilerinin boyutuna eşit yapmak en iyisidir. Önce küçük bir grupla deneyin, sonra zaman kazanın. İtdxer'in dediği gibi , doğruluk ve hız arasında bir sapma var.

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.