Mini seri boyutu neden tüm eğitim verilerinde tek bir "seri" den daha iyidir?


40

Derin Öğrenme modelleri durumunda, olağan uygulamanın, birkaç eğitim dönemi boyunca mini partiler (genellikle küçük bir, 32/64) uygulamak olduğunu sık sık okurum. Bunun arkasındaki nedeni gerçekten anlayamıyorum.

Yanılmıyorsam, toplu iş boyutu, model tarafından bir eğitim yinelemesi sırasında görülebilen eğitim örneği sayısıdır; ve eğitim örnekleri, eğitim durumlarının her biriyle görüldüğünde, devir tam bir dönüş. Öyleyse, eğitim örneklerinin neredeyse önemsiz bir alt kümesinde yinelemenin avantajını, her bir turdaki tüm mevcut eğitim örneklerini modele maruz bırakarak (elbette, yeterli olduğu varsayımıyla) hafıza). Bu yaklaşımın avantajı nedir?


1
Ödemeye bu cevabı.
Icyblade



Yanıtlar:


46

Veri kümesinin aksine minibatch'i kullanmanın en önemli avantajı, stokastik gradyan inişinin 1 temel fikrine dayanıyor .

Toplu degrade inişinde, tüm veri kümesinin üzerindeki degradeyi hesaplarsınız; bunun sonucunda potansiyel olarak büyük miktarda bilgi elde edilir. Bunu yapmak için çok fazla hafıza gerekir. Ancak asıl engel, toplu gradyan yörüngesinin sizi kötü bir noktaya (eyer noktası) sokmasıdır.

Öte yandan, SGD'de, veri kümesinin tek bir örneğinde hesaplanan gradyanı ekleyerek (eksi işareti) parametrelerinizi güncellersiniz . Rastgele bir veri noktasına dayandığından, çok gürültülüdür ve parti gradyanından uzakta bir yöne gidebilir. Bununla birlikte, gürültü, dışbükey olmayan optimizasyonda tam olarak istediğiniz şeydir, çünkü eyer noktalarından veya yerel minimumlardan kaçmanıza yardımcı olur ([2] 'deki Teorem 6). Dezavantajı, verimsiz olması ve iyi bir çözüm bulmak için veri setinin tamamında dolaşmanız gerekir.

Minibatch metodolojisi, her degrade güncellemesine göreceli olarak hızlı bir yakınsama elde ederken, yeterli gürültü sağlayan bir uzlaşmadır.

1 Bottou, L. (2010). Stokastik gradyan inişi ile büyük ölçekli makine öğrenmesi. COMPSTAT'2010 Bildirilerinde (s. 177-186). Physica-Verlag HD.

[2] Ge, R., Huang, F., Jin, C. ve Yuan, Y. (2015, Haziran). Tensör Ayrışması için Saddle Points-Online Stokastik Gradyandan Kaçış. COLT'de (s. 797-842).

DÜZENLE :

Bu yorumu Yann LeCun'un facebook sitesinde gördüm, bu soruya yeni bir bakış açısı getiriyor (üzgünüm fb ile nasıl bağlantı kuracağımı bilmiyorum).

Büyük minibatch'ler ile egzersiz yapmak sağlığa zararlı. Daha da önemlisi, test hatanız için kötü. Arkadaşlar, arkadaşlarının 32'den daha küçük minibüs kullanmasına izin vermezler. Kabul edelim: 2012'den bu yana bir kişiden daha büyük minibatch boyutlarına geçiş yapan tek kişi GPU'ların 32'den küçük parti büyüklükleri için verimsiz olmasıdır. Bu sadece donanımımızın berbat olduğu anlamına geliyor.

Birkaç gün önce arXiv'de yayınlanan (Nisan 2018) bu makaleyi okumayı hak etti.

Dominic Masters, Carlo Luschi, Derin Sinir Ağları için Küçük Yığın Eğitimini Yeniden Ziyaret , arXiv: 1804.07612v1

Özetten,

Büyük mini partilerin kullanımının mevcut bilgisayarlı paralelliğini arttırmasına karşın, küçük partili eğitimin genelleştirme performansı arttırdığı ...

En iyi performans, m = 2 ile m = 32 arasındaki mini parti büyüklükleri için tutarlı bir şekilde elde edilmiştir; bu, binlerce parti içindeki mini parti boyutlarının kullanılmasını savunan son çalışmalarla çelişmektedir.


2
Neden mini toplu gradyan inişinin toplu yerel gradyan inişinden ziyade kötü yerel minimumlardan kaçınma olasılığı daha fazla olmalıdır? Bu iddiayı destekleyecek bir şeyin var mı?
Martin Thoma

@ MartinThoma Bkz. [2] 'deki Teorem 6, JMLR üzerine yeni bir makale.
horaceT

2
ϕ(w,X)

2
@MartinThoma Verdiğimiz veri kümesi için bir küresel minima olduğu göz önüne alındığında, bu küresel minimaya giden tam yol her GD yöntemi için farklı şeylere bağlıdır. Toplu iş için tek stokastik yön, başlangıçtaki ağırlıklardır. Eğer NN'yi, aynı başlangıç ​​ağırlıkları ve veri kümesiyle tekrar eğitirseniz, gradyan yolu aynı olacaktır. Mini parti ve SGD için, her adımda eğitim için veri noktalarının stokastik örneklemesinden itibaren her adım arasında yol için bazı stokastik yönleri olacaktır. Bu, mini parti ve SGD'nin yoldaysa yerel optimenden kaçmalarını sağlar.
Wesley,

8

Bellek olduğu değil nedeniyle, gerçekten bunu nedeni olabilir veri kümesi içinden size yineleme olarak geçişlerini sadece birikir ve sonunda bunları uygulamak, ama yine SGD içinde her adımda uygular.

SGD'nin bu kadar yaygın kullanılmasının nedenleri:

1) Verimlilik. Genellikle, özellikle eğitimin erken döneminde, verilerin farklı alt kümeleri için parametre gradyanları aynı yöne işaret etme eğiliminde olacaktır. Bu nedenle, verilerin 1 / 100'ünde değerlendirilen degradeler, kabaca tüm veri kümesinde olduğu gibi aynı genel yöne işaret edecek, ancak yalnızca 1/100 hesaplamaya ihtiyaç duyacak. Yüksek derecede doğrusal olmayan derin bir ağda yakınsama, gradyanlarınız ne kadar iyi olursa olsun, genellikle binlerce veya milyonlarca yinelemeye ihtiyaç duyduğundan, gradyanın ucuz tahminlerine dayanarak pek çok güncelleme yapmak, iyi olanlara dayanan birkaç güncellemeyi yapmak için mantıklı olur.

2) Optimizasyon: Gürültülü güncellemeler kötü yerel optimenden çıkmanıza izin verebilir (bunun pratikte önemli olduğunu gösteren bir kaynağım olmasa da).

3) Genelleme. Görünen o ki (bakınız Zhang et al: Derin Öğrenme Teorisi III: SGD'nin Genelleme Özellikleri ), SGD'nin, eğitim setinde de asgari olması muhtemel olan eğitim setinde "düz" bir minima bularak genellemeye yardımcı olduğu anlaşılıyor. Sezgisel olarak, SGD'yi bir çeşit Torbalama olarak düşünebiliriz - parametrelerimizi verilerin bir çok küçük veri tabanına dayanarak hesaplayarak, küçük karalamalar arasında genelleştiren kuralları yeniden uygularız ve uymayan kuralları iptal ederiz; Eğitim Seti.


3

Hatalı olmadığım sürece, toplu iş boyutu, modelin bir eğitim yinelemesi sırasında görmesine izin verilen egzersiz örneklerinin sayısıdır

Doğru (buna "ağırlık güncelleme adımı" diyeceğim)

ve eğitim örneklerinin her biri model tarafından görüldüğü zaman ve çağ tam bir dönüş

Doğru

Öyleyse, eğitim örneklerinin neredeyse önemsiz bir alt kümesinde yinelemenin avantajını, her bir turdaki tüm mevcut eğitim örneklerini modele maruz bırakarak (elbette, yeterli olduğu varsayımıyla) hafıza). Bu yaklaşımın avantajı nedir?

Peki, hemen hemen. Genelde yeterli hafızanız yoktur. Görüntü sınıflandırma hakkında konuştuğumuzu söyleyelim. ImageNet, son derece popüler bir veri kümesidir. Bir süredir VGG-16D en popüler modellerden biriydi. Bir 224x224 görüntü için hesaplanan 15 245 800 yüzer (özellik haritalarında). Bu, görüntü başına yaklaşık 61 MB demektir. Bu, her bir görüntü için egzersiz sırasında ne kadar hafızaya ihtiyacınız olduğuna bağlı olarak sadece kaba bir alt sınırdır. ImageNet birkaç bin (bence 1,2 milyon?) Görüntüler içeriyor. Bu kadar ana hafızaya sahip olsanız da, kesinlikle bu kadar GPU hafızanız yok. GPU’nun işleri 21x’e kadar hızlandırdığını gördüm. Bu yüzden kesinlikle GPU’yu kullanmak istiyorsunuz.

Ayrıca: Bir mini parti için süre çok daha düşüktür. Öyleyse soru şudur: GPU'da saat başına mini toplu işlemle n adımlarını güncellemeyi tercih etmiyor musunuz, m> GPU'su olmayan toplu işlemle adım adım güncellemeyi, burada n >> m.


Bu gerçekten sınırlı bir hafıza meselesi değil. Veri kümenizdeki gradyanı, sabit model parametrelerine sahip bir dizi kümesinde hesaplamak her zaman mümkündür (işlevi, gradyanı tek bir dev kümede hesaplamak için işlevsel olarak eşdeğerdir). Pratik olarak, SGD / MBGD'nin stokastikliği / gürültüsünden kaynaklanan genelleme özellikleri ve yakınsamaya ulaşmak için veri kümenizdeki daha az çağın gerekli olduğu gerçeği ile ilgili daha fazla. Model paraşütlerin tek bir çağda güncellenmesi, çağ içindeki daha fazla gradyan hesaplamasını daha bilgilendirici hale getiren daha iyi orta paramlara yol açar.
Madison,

1

Diğer cevapların yanı sıra, belirgin ancak çoğu kez eşleşmiş iki miktarın bulunduğunu belirtmeye değer olduğunu düşünüyorum:

  1. Her adımda parametrelerin gradyanını hesaplamak için kullanılan girişlerin sayısı.

Diğerlerinin de belirttiği gibi, minibatch'e göre gradyan, gerçek gradyanın yaklaşık bir değeridir. Minibatch ne kadar büyük olursa, yaklaşım o kadar iyidir.

  1. Bir diziye toplanan ve "aynı anda" hesaplanan girdilerin sayısı

Buradaki takas, tamamen performansla ilgilidir (bellek / döngü).

Bu miktarlar tipik olarak aynıdır, yani minibatch boyutu, ancak prensip olarak ayrılabilirler.

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.