प्रारंभिक तथ्य
कार्यात्मक अर्थों में, सिग्मॉइड सॉफ्टमैक्स फ़ंक्शन का एक आंशिक मामला है , जब कक्षाओं की संख्या 2 बराबर होती है। दोनों ही एक ही ऑपरेशन करते हैं: लॉगबिलिटी (नीचे देखें) को संभावनाओं में बदलना।
सरल बाइनरी वर्गीकरण में, दोनों के बीच कोई बड़ा अंतर नहीं है, हालांकि बहुराष्ट्रीय वर्गीकरण के मामले में , सिग्मॉइड गैर-अनन्य लेबल (उर्फ मल्टी-लेबल ) से निपटने की अनुमति देता है , जबकि सॉफ्टमैक्स अनन्य वर्गों (नीचे देखें) के साथ काम करता है।
एक तर्क (जिसे स्कोर भी कहा जाता है) एक वर्ग के साथ जुड़ा हुआ एक कच्चा अनसुलझा मूल्य है , संभाव्यता की गणना करने से पहले। तंत्रिका नेटवर्क वास्तुकला के संदर्भ में, इसका मतलब है कि एक लॉगिट एक घने (पूरी तरह से जुड़ा हुआ) परत का आउटपुट है।
Tensorflow का नामकरण थोड़ा अजीब है: नीचे दिए गए सभी कार्य लॉग स्वीकार करते हैं, संभाव्यता नहीं , और स्वयं परिवर्तन लागू करें (जो कि बस अधिक कुशल है)।
सिग्मॉइड फ़ंक्शंस परिवार
जैसा कि पहले कहा गया है, sigmoid
हानि फ़ंक्शन बाइनरी वर्गीकरण के लिए है। लेकिन टेंसरफ्लो फ़ंक्शन अधिक सामान्य हैं और कक्षाएं स्वतंत्र होने पर मल्टी-लेबल वर्गीकरण करने की अनुमति देते हैं। दूसरे शब्दों में,
एक ही बार में द्विआधारी वर्गीकरण को tf.nn.sigmoid_cross_entropy_with_logits
हल करता N
है।
लेबल एक-गर्म एन्कोडेड होना चाहिए या इसमें सॉफ्ट क्लास संभावनाएं हो सकती हैं।
tf.losses.sigmoid_cross_entropy
इसके अलावा इन-बैच वेट सेट करने की अनुमति देता है , यानी कुछ उदाहरणों को दूसरों की तुलना में अधिक महत्वपूर्ण बनाते हैं।
वर्ग भारtf.nn.weighted_cross_entropy_with_logits
निर्धारित करने की अनुमति देता है
(याद रखें, वर्गीकरण द्विआधारी है), अर्थात सकारात्मक त्रुटियों को नकारात्मक त्रुटियों से बड़ा बनाते हैं। यह उपयोगी है जब प्रशिक्षण डेटा असंतुलित हो।
सॉफ्टमैक्स फ़ंक्शंस परिवार
इन नुकसान कार्यों का उपयोग बहुराष्ट्रीय पारस्परिक रूप से अनन्य वर्गीकरण के लिए किया जाना चाहिए, अर्थात N
कक्षाओं में से एक को चुनना । जब लागू हो N = 2
।
लेबल एक-गर्म एन्कोडेड होना चाहिए या इसमें सॉफ्ट क्लास संभावनाएं हो सकती हैं: एक विशेष उदाहरण 50% प्रायिकता के साथ वर्ग ए और 50% संभावना के साथ वर्ग बी हो सकता है। ध्यान दें कि कड़ाई से बोलने का यह मतलब नहीं है कि यह दोनों वर्गों का है, लेकिन कोई इस तरह से संभावनाओं की व्याख्या कर सकता है।
sigmoid
परिवार की तरह , इन-बैच वेटtf.losses.softmax_cross_entropy
सेट करने की अनुमति देता है , अर्थात कुछ उदाहरणों को दूसरों की तुलना में अधिक महत्वपूर्ण बनाते हैं। जहाँ तक मुझे पता है, टेंसरफ़्लो 1.3 के रूप में, क्लास वेट सेट करने का कोई अंतर्निहित तरीका नहीं है ।
[UPD] टेंसरफ़्लो १.५ में, v2
संस्करण पेश किया गया था और मूल softmax_cross_entropy_with_logits
नुकसान को घटाया गया था । उनके बीच एकमात्र अंतर यह है कि एक नए संस्करण में, बैकप्रोपैजेशन लॉगिट और लेबल दोनों में होता है ( यहां चर्चा है कि यह क्यों उपयोगी हो सकता है)।
विरल कार्य परिवार
softmax
ऊपर सामान्य की तरह , इन नुकसान कार्यों का उपयोग बहुराष्ट्रीय पारस्परिक रूप से अनन्य वर्गीकरण के लिए किया जाना चाहिए, अर्थात N
कक्षाओं में से एक को चुनना । अंतर एन्कोडिंग लेबल में है: कक्षाएं पूर्णांक (क्लास इंडेक्स) के रूप में निर्दिष्ट की जाती हैं, एक-गर्म वैक्टर नहीं। जाहिर है, यह नरम कक्षाओं की अनुमति नहीं देता है, लेकिन हजारों या लाखों वर्गों के होने पर यह कुछ मेमोरी को बचा सकता है। हालाँकि, ध्यान दें कि logits
तर्क में अभी भी प्रत्येक वर्ग के लॉगिट्स होने चाहिए, इस प्रकार यह कम से कम [batch_size, classes]
मेमोरी का उपभोग करता है ।
ऊपर की तरह, tf.losses
संस्करण में एक weights
तर्क है जो इन-बैच वजन सेट करने की अनुमति देता है।
सैंपल्ड सॉफ्टमैक्स फ़ंक्शंस परिवार
ये फ़ंक्शन बड़ी संख्या में कक्षाओं से निपटने के लिए एक और विकल्प प्रदान करते हैं। कंप्यूटिंग और एक सटीक संभावना वितरण की तुलना करने के बजाय, वे एक यादृच्छिक नमूने से नुकसान के अनुमान की गणना करते हैं।
तर्क weights
और biases
एक पूरी तरह से जुड़े परत को निर्दिष्ट करते हैं जो किसी चुने हुए नमूने के लिए लॉग की गणना के लिए उपयोग किया जाता है।
ऊपर की तरह, labels
एक-गर्म एन्कोडेड नहीं हैं, लेकिन आकार है [batch_size, num_true]
।
नमूना कार्य केवल प्रशिक्षण के लिए उपयुक्त हैं। परीक्षण समय में, softmax
वास्तविक वितरण प्राप्त करने के लिए एक मानक हानि (या तो विरल या एक-गर्म) का उपयोग करने की सिफारिश की जाती है ।
एक और वैकल्पिक नुकसान है tf.nn.nce_loss
, जो शोर-विपरीत अनुमान लगाता है (यदि आप रुचि रखते हैं, तो इसे बहुत विस्तृत चर्चा देखें )। मैंने इस फ़ंक्शन को सॉफ्टमैक्स परिवार में शामिल किया है, क्योंकि एनसीई सीमा में सॉफ्टमैक्स के लिए सन्निकटन की गारंटी देता है।
tf.losses.log_loss
वास्तव में केवल बाइनरी क्रॉसेंट्रोपी के लिए है। इसके अलावा github.com/tensorflow/tensorflow/issues/2462