Toplamlar yerine partilerin ortalama kaybını en aza indirmek yaygın bir uygulama mıdır?


17

Tensorflow, CIFAR-10'u sınıflandırma hakkında örnek bir öğreticiye sahiptir . Eğitimde, toplu işteki ortalama çapraz entropi kaybı en aza indirilmiştir.

def loss(logits, labels):
  """Add L2Loss to all the trainable variables.
  Add summary for for "Loss" and "Loss/avg".
  Args:
    logits: Logits from inference().
    labels: Labels from distorted_inputs or inputs(). 1-D tensor
            of shape [batch_size]
  Returns:
    Loss tensor of type float.
  """
  # Calculate the average cross entropy loss across the batch.
  labels = tf.cast(labels, tf.int64)
  cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
      logits, labels, name='cross_entropy_per_example')
  cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')
  tf.add_to_collection('losses', cross_entropy_mean)

  # The total loss is defined as the cross entropy loss plus all of the weight
  # decay terms (L2 loss).
  return tf.add_n(tf.get_collection('losses'), name='total_loss')

Bkz. Cifar10.py , satır 267.

Bunun yerine toplu işteki toplamı en aza indirmiyor? Bir fark yaratır mı? Bunun backprop hesaplamasını nasıl etkileyeceğini anlamıyorum.


Tam olarak toplam / ort ile ilgili değil, ancak kayıp seçimi bir uygulama tasarımı seçimidir. Örneğin, ortalama olarak doğru olma konusunda iyiyseniz, ortalamayı optimize edin. Uygulamanız en kötü durum senaryosuna (örneğin, otomotiv çökmesine) duyarlıysa, maksimum değeri optimize etmelisiniz.
Alex Kreimer

Yanıtlar:


17

Pkubik tarafından belirtildiği gibi, genellikle girdiye bağlı olmayan parametreler için bir düzenleme terimi vardır, örneğin tensorflow'da

# Loss function using L2 Regularization
regularizer = tf.nn.l2_loss(weights)
loss = tf.reduce_mean(loss + beta * regularizer)

Bu durumda, mini parti üzerindeki ortalamanın alınması , parti boyutu değişirken kayıp ile cross_entropykayıp arasında sabit bir oranın korunmasına yardımcı olur regularizer.

Dahası, öğrenme oranı da kaybın büyüklüğüne (gradyan) duyarlıdır, bu nedenle farklı parti boyutlarının sonucunu normalleştirmek için ortalamayı almak daha iyi bir seçenek gibi görünmektedir.


Güncelleme

Facebook'un bu makalesi (Doğru, Büyük Minibatch SGD: ImageNet'i 1 Saatte Eğitim), öğrenme oranını toplu iş boyutuna göre ölçeklendirmenin oldukça iyi çalıştığını gösteriyor:

Doğrusal Ölçekleme Kuralı: Minibatch boyutu k ile çarpıldığında, öğrenme oranını k ile çarpın.

ki bu da eğimi k ile çarpmak ve öğrenme hızını değiştirmemekle aynıdır, bu yüzden ortalama almak gerekli değildir.


8

Bu kısma odaklanacağım:

Bunun backprop hesaplamasını nasıl etkileyeceğini anlamıyorum.

Her şeyden önce, muhtemelen, ortaya çıkan kayıp değerleri arasındaki tek farkın, ortalama kaybın, toplam ile ilgili olarak faktörü , yani ; burada , toplu iş boyutudur. Aynı ilişkinin herhangi bir değişken wrt türevi için doğru olduğunu kolayca kanıtlayabiliriz. kayıp fonksiyonları ( ) türevi tanımına bakarak: Şimdi, işlevin değerini çarpmak ve bunun türevi nasıl etkilediğini görmek istiyoruz: 1BLSUM=BLAVGBdLSUMdx=BdLAVGdx

dLdx=limΔ0L(x+Δ)L(x)Δ
d(cL)dx=limΔ0cL(x+Δ)cL(x)Δ
Sabit değeri etkisiz hale getirip sınırdan önce hareket ettirdiğimizde orijinal türev tanımının bir sabit ile çarpıldığını görmeliyiz. tam olarak kanıtlamak istediğimiz şey:
d(cL)dx=climΔ0L(x+Δ)L(x)Δ=cdLdx

SGD'de gradient'lerini öğrenme oranı ile çarpılarak ağırlıkları güncelleyeceğiz ve bu parametreyi, son ağırlık güncellemeleri eşit olacak şekilde seçebileceğimizi açıkça görebiliriz. İlk güncelleme kuralı: ve ikinci güncelleme kuralı ( ): λ

W:=W+λ1dLSUMdW
λ1=λ2B
W:=W+λ1dLAVGdW=W+λ2BdLSUMdW


Dontloo'nun mükemmel bulgusu , toplamı kullanmanın biraz daha uygun bir yaklaşım olabileceğini düşündürebilir. Daha popüler gibi görünen ortalamayı haklı çıkarmak için, toplamı kullanmanın muhtemelen kilo düzenlenmesi ile ilgili bazı sorunlara neden olabileceğini ekliyorum. Düzenleyicilerin ölçeklendirme faktörünün farklı parti boyutları için ayarlanması, öğrenme oranını ayarlamak kadar sinir bozucu olabilir.

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.