Relu बनाम सिग्मॉइड बनाम सॉफ्टमैक्स को छिपे हुए परत न्यूरॉन्स के रूप में


22

मैं केवल एक छिपी हुई परत के साथ एक सामान्य तंत्रिका नेटवर्क के साथ खेल रहा था, टेंसोफ़्लो द्वारा, और फिर मैंने छिपी हुई छिपकली के लिए अलग सक्रियता की कोशिश की:

  • Relu
  • अवग्रह
  • सॉफ्टमैक्स (अच्छी तरह से, आमतौर पर सॉफ्टमैक्स का उपयोग अंतिम परत में किया जाता है ..)

रेलू बेहतरीन ट्रेन सटीकता और सत्यापन सटीकता देता है। मुझे यकीन नहीं है कि यह कैसे समझा जाए।

हम जानते हैं कि रेलू में अच्छे गुण हैं, जैसे कि स्पार्सिटी, जैसे कि नो-ग्रेडिएंट-वैनिशिंग, आदि, लेकिन

प्रश्न: सामान्य तौर पर सिग्मॉइड / सॉफ्टमैक्स न्यूरॉन्स की तुलना में रिलु न्यूरॉन बेहतर है? क्या हमें एनएन (या यहां तक ​​कि सीएनएन) में लगभग हमेशा रिले न्यूरॉन्स का उपयोग करना चाहिए? मुझे लगा कि अगर हम ओवरफिटिंग के बारे में चिंता करते हैं तो एक अधिक जटिल न्यूरॉन कम से कम ट्रेन सटीकता को बेहतर परिणाम देगा।

धन्यवाद PS: मूल रूप से कोड "Udacity-Machine Learning -assignment2" से है, जो कि साधारण 1-हिडन-लेयर-NN का उपयोग करते हुए notMNIST की मान्यता है।

batch_size = 128
graph = tf.Graph()
with graph.as_default():
  # Input data. 
  tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))
  tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
  tf_valid_dataset = tf.constant(valid_dataset)
  tf_test_dataset = tf.constant(test_dataset)

  # hidden layer
  hidden_nodes = 1024
  hidden_weights = tf.Variable( tf.truncated_normal([image_size * image_size, hidden_nodes]) )
  hidden_biases = tf.Variable( tf.zeros([hidden_nodes]))
  hidden_layer = **tf.nn.relu**( tf.matmul( tf_train_dataset, hidden_weights) + hidden_biases)

  # Variables.
  weights = tf.Variable( tf.truncated_normal([hidden_nodes, num_labels])) 
  biases = tf.Variable(tf.zeros([num_labels]))

  # Training computation.
  logits = tf.matmul(hidden_layer, weights) + biases
  loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels) )

  # Optimizer.
  optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

  # Predictions for the training, validation, and test data.
  train_prediction = tf.nn.softmax(logits)
  valid_relu = **tf.nn.relu**(  tf.matmul(tf_valid_dataset, hidden_weights) + hidden_biases)
  valid_prediction = tf.nn.softmax( tf.matmul(valid_relu, weights) + biases) 

  test_relu = **tf.nn.relu**( tf.matmul( tf_test_dataset, hidden_weights) + hidden_biases)
  test_prediction = tf.nn.softmax(tf.matmul(test_relu, weights) + biases)

जवाबों:


12

इसके अलावा @ भाग्येश_विकानी:

  • रेलू एक रैखिक इकाई के करीब व्यवहार करता है
  • Relu रैखिकता के लिए एक स्विच की तरह है। यदि आपको इसकी आवश्यकता नहीं है, तो आप इसे बंद कर देते हैं। यदि आपको इसकी आवश्यकता है, तो आप इसे "स्विच" करते हैं। इस प्रकार, हम रैखिकता लाभ प्राप्त करते हैं, लेकिन अपने आप को इसका उपयोग नहीं करने का विकल्प आरक्षित करते हैं।
  • सक्रिय होने पर व्युत्पन्न 1 है। फ़ंक्शन का दूसरा व्युत्पन्न लगभग हर जगह 0 है। इस प्रकार, यह एक बहुत ही सरल कार्य है। यह अनुकूलन को बहुत आसान बनाता है।
  • जब भी आप चाहते हैं कि यह ढाल बड़ा है और कभी संतृप्त न हो

रेक्टिफाइड लीनियर यूनिट्स के सामान्यीकरण भी हैं। रेक्टिफाइड लीनियर इकाइयां और इसके सामान्यीकरण इस सिद्धांत पर आधारित हैं कि लीनियर मॉडल को अनुकूलित करना आसान है।

दोनों सिग्मॉइड / सॉफ्टमैक्स वेनिला फीडफोर्वर्ड कार्यान्वयन के लिए हतोत्साहित (अध्याय 6: इयान गुडफेलो ) हैं। वे आवर्तक नेटवर्क, संभाव्य मॉडल के लिए अधिक उपयोगी हैं, और कुछ ऑटोएन्कोडर्स के पास अतिरिक्त आवश्यकताएं हैं जो कि टुकड़े-टुकड़े रैखिक सक्रियण कार्यों के उपयोग को नियंत्रित करते हैं।

यदि आपके पास एक सरल एनएन (यही सवाल है), तो रेलू आपकी पहली प्राथमिकता है


5

Relu के अपने पेशेवरों और विपक्ष हैं:

पेशेवरों:
1. संतृप्त नहीं करता है (+ ve क्षेत्र में)
2. कम्प्यूटेशनल रूप से, यह बहुत ही कुशल है
3. आम तौर पर रिले न्यूरॉन्स के साथ मॉडल अन्य सक्रियण कार्यों के साथ न्यूरॉन्स की तुलना में बहुत तेजी से परिवर्तित होते हैं, जैसा कि यहां वर्णित है

विपक्ष:
1. उनके साथ काम करने का एक मुद्दा वह है जहां वे मर जाते हैं, अर्थात मृत रेलस। क्योंकि यदि किसी भी रिले न्यूरॉन्स की सक्रियता शून्य हो जाती है, तो इसके ग्रेडिएंट्स को वापस प्रचार में शून्य कर दिया जाएगा। इससे बचा जा सकता है अगर हम वेट इनिशियलाइज़ेशन और ट्यूनिंग लर्निंग रेट से बहुत सावधान हैं।

अधिक जानकारी के लिए: CS231n के इस व्याख्यान -5 की जाँच करें


यह ध्यान देने योग्य है कि ELU इकाइयां अमरता के लिए कम्प्यूटेशनल दक्षता - मरने के लिए प्रतिरक्षा। arxiv.org/abs/1511.07289
साइकोरैक्स का कहना है कि मोनिका

उसको शामिल करने के लिए धन्यवाद। हां, ELU का उपयोग किया जा सकता है लेकिन RUU अभी भी लोकप्रिय है और इसका उपयोग ELU के कारण किया जाता है क्योंकि ELU का उपयोग करते समय, एक नया हाइपर-पैरामीटर पेश किया जाता है।
भाग्येश विकानी

1
अनिवार्य रूप से कोई कारण नहीं है कि आपको उस विशेष पैरामीटर पर ट्यून करना पड़े
साइकोरैक्स का कहना है कि मोनिका

4

http://cs231n.github.io/neural-networks-1/

Sigmoids

सिग्मोइड संतृप्त और हत्यारों को मारते हैं। सिग्मॉइड आउटपुट शून्य केंद्रित नहीं हैं।

tanh

सिग्मॉइड न्यूरॉन की तरह, इसकी सक्रियता संतृप्त होती है, लेकिन सिग्मॉइड न्यूरॉन के विपरीत इसका उत्पादन शून्य-केंद्रित है। इसलिए, व्यावहारिक रूप से तानह गैर-रैखिकता को हमेशा सिग्मोइड नॉनलाइनियरिटी के लिए पसंद किया जाता है।

Relu

ReLU गैर-रैखिकता का उपयोग करें, अपनी सीखने की दरों से सावधान रहें और संभवतः एक नेटवर्क में "मृत" इकाइयों के अंश की निगरानी करें। यदि यह आपको चिंतित करता है, तो लीकी रेएलयू या मैक्सआउट को आज़माएं। कभी भी सिग्मॉइड का उपयोग न करें। तन की कोशिश करें, लेकिन यह अपेक्षा करें कि यह ReLU / Maxout से भी बदतर हो।


2
मुझे समझ नहीं आता कि सिग्मॉइड और टैन काफी अलग हैं, जब पूर्वाग्रह नोड्स दूसरे की तरह दिखने के लिए एक ऊपर या नीचे शिफ्ट कर सकते हैं।
एंडोलिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.