Yanıtlar:
Sinir ağı terminolojisinde:
Örnek: 1000 eğitim örneğiniz varsa ve toplu iş boyutunuz 500 ise, 1 dönemi tamamlamak için 2 yineleme gerekir.
Bilginize: Sinirsel bir ağı eğitmek için kullanılan yığın boyutu ve yineleme sayısı
"Parti" terimi belirsizdir: bazı insanlar tüm eğitim setini belirtmek için kullanır ve bazı insanlar bunu bir ileri / geri geçişteki eğitim örneklerinin sayısını ifade etmek için kullanır (bu cevapta yaptığım gibi). Bu belirsizliği önlemek ve partinin bir ileri / geri geçişteki eğitim örneklerinin sayısına karşılık geldiğini açıklığa kavuşturmak için, mini parti terimini kullanabilirsiniz .
Dönem ve yineleme farklı şeyleri tanımlar.
Bir çağ , algoritmanın tüm veri kümesini kaç kez gördüğünü açıklar . Dolayısıyla, algoritma veri kümesindeki tüm örnekleri her gördüğünde, bir dönem tamamlanmıştır.
Bir yineleme sayısı bir tarif toplu algoritması geçirildi veri. Sinir ağlarında bu, ileri geçiş ve geri geçiş anlamına gelir . Böylece, bir grup veriyi NN üzerinden her ilettiğinizde, bir yinelemeyi tamamladınız .
Bir örnek daha net olabilir.
Diyelim ki 10 örnek (veya örnek) veri kümeniz var. Toplu iş boyutunuz 2'dir ve algoritmanın 3 dönem çalışmasını istediğinizi belirttiniz.
Bu nedenle, her çağda 5 partiniz var (10/2 = 5). Her parti algoritmadan geçirilir, bu nedenle dönem başına 5 yineleme vardır. 3 dönem belirttiğiniz için, eğitim için toplam 15 tekrarınız (5 * 3 = 15) vardır.
Birçok sinir ağı eğitim algoritması, sinir ağına tüm veri kümesinin birden fazla sunumunu içerir. Genellikle, tüm veri kümesinin tek bir sunumuna "çağ" denir. Aksine, bazı algoritmalar sinir ağına her seferinde tek bir durum için veri sunar.
"Yineleme" çok daha genel bir terimdir, ancak "epoch" ile birlikte sorduğunuzdan, kaynağınızın tek bir vakanın sinir ağına sunumuna atıfta bulunduğunu varsayıyorum.
Bunlar arasındaki farkı anlamak için Gradient Descent Algorithm ve Varyantlarını anlamalısınız .
Asıl cevapla başlamadan önce, biraz arka plan oluşturmak istiyorum.
Bir toplu iş , tam veri kümesidir. Büyüklüğü, mevcut veri kümesindeki toplam eğitim örneği sayısıdır.
Mini parti boyutu , öğrenme algoritmasının tek bir geçişte (ileri ve geri) işlediği örnek sayısıdır.
Bir Mini toplu verilen bir veri kümesi küçük bir parçası olan mini seri boyutu .
Yinelemeler , algoritmanın gördüğü veri kümelerinin sayısıdır (veya algoritmanın veri kümesinde yaptığı geçişlerin sayısıdır).
Dönemler , bir öğrenme algoritmasının veri kümesinin tamamını görme sayısıdır. Şimdi, bu yineleme sayısına eşit olmayabilir , çünkü veri kümesi mini partiler halinde de işlenebilir, özünde, tek bir geçiş veri kümesinin yalnızca bir bölümünü işleyebilir. Bu gibi durumlarda, yineleme sayısı dönem sayısına eşit değildir .
Parti gradyanı inişi durumunda, tüm grup her bir eğitim geçişinde işlenir. Bu nedenle, gradyan iniş optimizatörü Mini-toplu gradyan inişinden daha yumuşak yakınsama ile sonuçlanır, ancak daha fazla zaman alır. Parti gradyanı inişi varsa bir optimum bulması garanti edilir.
Stokastik gradyan inişi, mini seri boyutunun 1 olduğu özel bir mini-parti degrade iniş durumudur .
Mini gruplar halinde karıştırıp ondan aldığınız bir eğitim verisine sahipsiniz. Bir mini parti kullanarak ağırlıklarınızı ve önyargılarınızı ayarladığınızda, bir yinelemeyi tamamladınız. Mini partileriniz bittiğinde bir dönemi tamamladınız. Daha sonra egzersiz verilerinizi tekrar karıştırın, mini partilerinizi tekrar seçin ve tekrar tekrar tekrarlayın. Bu senin ikinci çağın olurdu.
Genellikle, test setinizi ağın öğrenmesi için küçük gruplara böler ve eğitimin katman sayınız boyunca adım adım ilerlemesini sağlar ve degrade iniş uygular. Tüm bu küçük adımlara yineleme denilebilir .
Bir çağ , tüm ağ boyunca bir kez geçen tüm eğitim setine karşılık gelir. Bunu sınırlamak yararlı olabilir, örneğin aşırı sığdırma ile mücadele etmek.
Bir dönem birkaç yineleme içerir. Aslında bu 'çağ' budur. Sinir ağını eğitmek için 'çağı' veri kümesi üzerindeki yineleme sayısı olarak tanımlayalım.
Yinelemenin toplu SGD'deki tek bir toplu ileri + backprop ile eşdeğer olduğuna inanıyorum. Epoch, tüm veri kümesini bir kez geçiyor (başka birinin belirttiği gibi).
Sinir ağı terminolojisi bağlamında sanırım:
Yinelemeyi tanımlamak için (aka adımlar ), önce toplu iş boyutu hakkında bilmeniz gerekir :
Parti büyüklüğü: Verimsiz olduğu ve çok fazla belleğe ihtiyaç duyduğu için muhtemelen tüm eğitim örneklerini bir ileri geçişte işlemek istemezsiniz. Bu yüzden yaygın olarak yapılan, eğitim örneklerini alt kümelere (yani gruplar) ayırmak, seçilen alt kümeden (yani toplu iş) bir geçiş yapmak ve ardından ağı geri yayılım yoluyla optimize etmektir. Bir alt kümedeki (örn. Toplu iş) eğitim örneği sayısına batch_size adı verilir .
Yineleme: (eğitim adımları olarak da bilinir) Ağınızın bir geçişi tamamlamak için tüm eğitim örneklerini tek geçişte geçirmesi gerektiğini bilirsiniz. Fakat bekle! eğitim örneklerinizi toplu olarak böldüğünüzde, bu , bir ileri geçişte yalnızca bir toplu işi (eğitim örneklerinin bir alt kümesi) işleyebileceğiniz anlamına gelir , peki ya diğer partiler? Yineleme terimi burada devreye girer:
Örneğin, 1000 eğitim örneğiniz varsa ve 10 büyüklüğünde bir gruplama yapmak istediğinizde ; bir dönemi tamamlamak için 10000/10 = 1000 yineleme yapmanız gerekir .
Umarım bu soruya cevap verebilir!
epoch, örneğin nötr ağdaki gradyan iniş algoritması gibi eğitim için örneklerin alt kümesinin tekrarlanmasıdır. İyi bir referans: http://neuralnetworksanddeeplearning.com/chap1.html
Sayfanın, epoch kullanan degrade iniş algoritması için bir kodu olduğunu unutmayın
def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=None):
"""Train the neural network using mini-batch stochastic
gradient descent. The "training_data" is a list of tuples
"(x, y)" representing the training inputs and the desired
outputs. The other non-optional parameters are
self-explanatory. If "test_data" is provided then the
network will be evaluated against the test data after each
epoch, and partial progress printed out. This is useful for
tracking progress, but slows things down substantially."""
if test_data: n_test = len(test_data)
n = len(training_data)
for j in xrange(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in xrange(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print "Epoch {0}: {1} / {2}".format(
j, self.evaluate(test_data), n_test)
else:
print "Epoch {0} complete".format(j)
Koda bak. Her çağ için, gradyan iniş algoritması için girişlerin rastgele bir alt kümesini oluştururuz. Çağın neden etkili olduğu sayfada da açıklanmaktadır. Lütfen bir bak.
Her veri örneğinin bir kez görüleceği şekilde tüm veri kümesinin üzerinden tam bir eğitim geçmesi. Böylece, bir dönem N / parti büyüklüğü eğitim tekrarlarını temsil eder , burada N toplam örnek sayısıdır.
Eğitim sırasında bir modelin ağırlıklarının tek bir güncellemesi. Bir yineleme tek kayıp ile ilgili parametrelerin gradyanlar işlem oluşur toplu veri.
bonus olarak:
Model eğitiminin bir yinelemesinde (yani, bir gradyan güncellemesinde) kullanılan örnekler kümesi .
Ayrıca seri boyutuna bakın .
kaynak: https://developers.google.com/machine-learning/glossary/
1.Epoch, Sinir ağının tüm verilerini gördüğü 1 tam döngüdür.
2. Modeli eğitmek için 100.000 görüntü söylenebilir, ancak bellek alanı tüm görüntüleri aynı anda işlemek için yeterli olmayabilir; örn., toplu iş boyutu 100'dür.
3. Birden fazla toplu iş kullanarak tüm görüntüleri kapsamamız gerekir. Bu yüzden 100.000 görüntünün tamamını kapsayacak şekilde 1000 yinelemeye ihtiyacımız olacak. (100 toplu iş boyutu * 1000 yineleme)
4. Sinir Ağı tüm verilere baktığında buna 1 Epoch (Nokta 1) denir. Modeli eğitmek için birden fazla döneme ihtiyaç duyulabilir. (10 dönem diyelim).