क्या राशि के बजाय बैचों पर औसत नुकसान को कम करना आम बात है?


17

Tensorflow में CIFAR-10 को वर्गीकृत करने के बारे में एक उदाहरण ट्यूटोरियल है । ट्यूटोरियल में बैच भर में औसत क्रॉस एन्ट्रापी नुकसान को कम किया जाता है।

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')

Cifar10.py देखें , लाइन 267।

इसके बजाय यह पूरे बैच में योग को न्यूनतम क्यों नहीं करता है? क्या इससे कोई फर्क पड़ता है? मुझे समझ में नहीं आता है कि यह बैकप्रॉप गणना को कैसे प्रभावित करेगा।


कोई राशि / एवीजी संबंधित नहीं, लेकिन नुकसान का विकल्प एक आवेदन डिजाइन विकल्प है। उदाहरण के लिए, यदि आप औसतन सही होने के साथ अच्छे हैं, तो औसत का अनुकूलन करें। यदि आप r अनुप्रयोग खराब स्थिति (जैसे, मोटर वाहन दुर्घटना) के प्रति संवेदनशील हैं, तो आपको अधिकतम मूल्य का अनुकूलन करना चाहिए।
एलेक्स क्रेमर

जवाबों:


17

जैसा कि प्यूबिक द्वारा उल्लेख किया गया है, आमतौर पर उन मापदंडों के लिए एक नियमितीकरण शब्द होता है जो इनपुट पर निर्भर नहीं होते हैं, उदाहरण के लिए टेंसरफ़्लो इस प्रकार है:

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

इस मामले में मिनी-बैच पर औसत cross_entropyनुकसान और नुकसान के बीच एक निश्चित अनुपात रखने में मदद करता है regularizerजबकि बैच का आकार बदल जाता है।

इसके अलावा सीखने की दर भी नुकसान (ढाल) के परिमाण के प्रति संवेदनशील है, इसलिए विभिन्न बैच आकारों के परिणाम को सामान्य करने के लिए, औसत लेना एक बेहतर विकल्प लगता है।


अपडेट करें

फ़ेसबुक (सटीक, लार्ज मिनिबैच SGD: ट्रेनिंग इमेजनेट 1 घंटे में) का यह पेपर दिखाता है कि, वास्तव में बैच के आकार के अनुसार सीखने की दर को काफी बढ़ा दिया गया है:

रैखिक स्केलिंग नियम: जब मिनीबच का आकार k से गुणा किया जाता है, तो k द्वारा सीखने की दर को गुणा करें।

जो अनिवार्य रूप से k द्वारा ढाल को गुणा करने और सीखने की दर को अपरिवर्तित रखने के समान है, इसलिए मुझे लगता है कि औसत लेना आवश्यक नहीं है।


8

मैं इस भाग पर ध्यान केंद्रित करूंगा:

मुझे समझ में नहीं आता है कि यह बैकप्रॉप गणना को कैसे प्रभावित करेगा।

सबसे पहले आप शायद पहले से ही देख चुके हैं कि परिणामी नुकसान मूल्यों के बीच एकमात्र अंतर यह है कि औसत नुकसान के कारक द्वारा योग के संबंध में घटाया गया है1बीएलएसयू=बीएलवीजीबीएलएसयूएक्स=बीएलवीजीएक्स

एलएक्स=लिमΔ0एल(एक्स+Δ)-एल(एक्स)Δ
(सीएल)एक्स=लिमΔ0सीएल(एक्स+Δ)-सीएल(एक्स)Δ
(सीएल)एक्स=सीलिमΔ0एल(एक्स+Δ)-एल(एक्स)Δ=सीएलएक्स

λ

डब्ल्यू: =डब्ल्यू+λ1एलएसयूडब्ल्यू
λ1=λ2बी
डब्ल्यू: =डब्ल्यू+λ1एलवीजीडब्ल्यू=डब्ल्यू+λ2बीएलएसयूडब्ल्यू


डब्लू द्वारा उत्कृष्ट खोज यह सुझाव दे सकती है कि राशि का उपयोग करना थोड़ा अधिक उपयुक्त दृष्टिकोण हो सकता है। औसत का औचित्य सिद्ध करने के लिए जो मुझे अधिक लोकप्रिय लगता है मैं जोड़ देता हूँ कि राशि का उपयोग करने से संभवतः वजन नियमितीकरण के साथ कुछ समस्याएं हो सकती हैं। अलग-अलग बैच आकारों के लिए नियमित करने वालों के लिए स्केलिंग कारक ट्यूनिंग केवल सीखने की दर को ट्यूनिंग के रूप में कष्टप्रद हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.