सॉफ्टमैक्स फलन

सॉफ्टमैक्स फलन, जिसे सॉफ्टर्गमैक्स   या सामान्यीकृत घातांकीय फलन  के रूप में भी जाना जाता है, $K$ वास्तविक संख्याओं के वेक्टर को $K$ संभावित परिणामों के  प्रायिकता वितरण  में परिवर्तित करता है। तथा यह कई आयामों के लिए  तार्किक फलन  का सामान्यीकरण है, और  बहुराष्ट्रीय तार्किक प्रतिगमन  में उपयोग किया जाता है। सॉफ्टमैक्स फलन का उपयोग अधिकांश  कृत्रिम तंत्रिका नेटवर्क  के अंतिम सक्रियण फलन के रूप में किया जाता है, जो लूस की पसंद के स्वयंसिद्ध के आधार पर अनुमानित उत्पादित वर्गों पर प्रायिकता वितरण के लिए नेटवर्क के प्रक्षेपण को सामान्य करता है।

परिभाषा
सॉफ्टमैक्स फलन $K$ वास्तविक संख्याओं के एक वेक्टर z को इनपुट के रूप में लेता है, और इसे एक प्रायिकता वितरण में सामान्य करता है, जिसमें $K$ संभावनाएँ होती हैं जो इनपुट संख्याओं के घातांकों के समानुपाती होती हैं। अर्थात, सॉफ्टमैक्स को लागू करने से पहले, कुछ वेक्टर घटक ऋणात्मक या एक से अधिक हो सकते हैं। और 1 का योग नहीं हो सकता है, लेकिन सॉफ्टमैक्स लागू करने के बाद प्रत्येक घटक अंतराल  $$(0, 1)$$ में होगा, और घटक 1 तक जोड़ देंगे, जिससे कि उन्हें संभावनाओं के रूप में समझा जा सके। तथा इसके अतिरिक्त बड़े निवेशित घटक बड़ी संभावनाओं के अनुरूप होंगे।

मानक (यूनिट) सॉफ्टमैक्स फलन $$\sigma : \R^K \to (0, 1)^K$$ परिभाषित किया गया है, जब  $$K \ge 1$$  सूत्र द्वारा$$\sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} \ \ \text{ for } i = 1, \dotsc, K \text{ and } \mathbf{z} = (z_1, \dotsc, z_K) \in \R^K.$$सामान्य शब्दों में यह इनपुट वेक्टर  $$\mathbf z$$  के प्रत्येक तत्व  $$z_i$$ के लिए मानक चर घातांकीय फलन लागू करता है, और इन्हें सामान्य करता है। तथा इन सभी घातांकीयों के योग से विभाजित करके मानों का यह सामान्यीकरण सुनिश्चित करता है कि उत्पादित  वेक्टर के घटकों का योग $$\sigma(\mathbf z)$$ 1 है। $e$ के अतिरिक्त एक भिन्न आधार (घातांक)  $b > 0$  का उपयोग किया जा सकता है। यदि $0 < b < 1$ छोटे इनपुट घटकों के परिणामस्वरूप अधिक प्रक्षेपण की संभावनाएँ होंगी, तथा b के मान को कम करने से प्रायिकता वितरण बनेंगे जो सबसे छोटे इनपुट मानों की स्थिति के चारों ओर अधिक केंद्रित होते हैं। इसके विपरीत, यदि  $b > 1$, बड़े निवेशित घटकों के परिणामस्वरूप अधिक प्रक्षेपण संभावनाएं होंगी, और मूल्य में वृद्धि होगी तथा $b$ प्रायिकता वितरण बनाएगा, जो सबसे बड़े इनपुट मूल्यों की स्थिति के चारों ओर अधिक होते हैं। $$b = e^\beta$$ या  $$b = e^{-\beta}$$ लिखना वास्तव मे $β$ के लिए अभिव्यक्ति उत्पन्न करता है।$$\sigma(\mathbf{z})_i = \frac{e^{\beta z_i}}{\sum_{j=1}^K e^{\beta z_j}} \text{ or } \sigma(\mathbf{z})_i = \frac{e^{-\beta z_i}}{\sum_{j=1}^K e^{-\beta z_j}} \text{ for } i = 1, \dotsc, K .$$कुछ क्षेत्रों में आधार निश्चित होता है, एक निश्चित पैमाने के अनुरूप, जबकि अन्य में पैरामीटर $β$ भिन्न होता है।

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

औपचारिक रूप से, arg max को श्रेणीबद्ध आउटपुट वाले फलन के रूप में मानने के बजाय $$1, \dots, n$$ (सूचकांक के अनुरूप), आउटपुट के एक-गर्म  प्रतिनिधित्व के साथ अधिकतम अधिकतम फलन पर विचार करें (मान लीजिए कि एक अद्वितीय अधिकतम तर्क है):
 * $$\operatorname{arg\,max}(z_1,\, \dots,\, z_n) = (y_1,\, \dots,\, y_n) = (0,\, \dots,\, 0,\, 1,\, 0,\, \dots,\, 0),$$

जहां आउटपुट समन्वय करता है $$y_i = 1$$ अगर और केवल अगर $$i$$ का तर्क अधिकतम है $$(z_1, \dots, z_n)$$, अर्थ $$z_i$$ का अद्वितीय अधिकतम मूल्य है $$(z_1,\, \dots,\, z_n)$$. उदाहरण के लिए, इस एन्कोडिंग में $$\operatorname{arg\,max}(1, 5, 10) = (0, 0, 1),$$ चूंकि तीसरा तर्क अधिकतम है।

इसे एकाधिक तर्क अधिकतम मानों के लिए सामान्यीकृत किया जा सकता है (एकाधिक बराबर $$z_i$$ अधिकतम होना) सभी अधिकतम तर्कों के बीच 1 को विभाजित करके; औपचारिक रूप से $−β$ कहाँ पे $β$ अधिकतम मानने वाले तर्कों की संख्या है। उदाहरण के लिए, $$\operatorname{arg\,max}(1,\, 5,\, 5) = (0,\, 1/2,\, 1/2),$$ चूंकि दूसरा और तीसरा तर्क दोनों ही अधिकतम हैं। मामले में सभी तर्क समान हैं, यह सरल है $$\operatorname{arg\,max}(z, \dots, z) = (1/n, \dots, 1/n).$$ अंक $β$ एकाधिक आर्ग अधिकतम मानों के साथ एक बीजीय विविधता (या विलक्षणताएं, और एकवचन सेट बनाते हैं) के एकवचन बिंदु होते हैं - ये ऐसे बिंदु होते हैं जहां arg अधिकतम बंद होता है (जंप असंतुलन के साथ) - जबकि एकल arg अधिकतम वाले अंक गैर के रूप में जाने जाते हैं -एकवचन या नियमित अंक।

परिचय में दिए गए अंतिम अभिव्यक्ति के साथ, softargmax अब arg max का एक सहज अनुमान है: as $(1/n, \dots, 1/n)$, softargmax अधिकतम arg में परिवर्तित हो जाता है। एक समारोह के अभिसरण की विभिन्न धारणाएं हैं; softargmax arg अधिकतम बिंदुवार अभिसरण  में परिवर्तित होता है, जिसका अर्थ प्रत्येक निश्चित इनपुट के लिए होता है $1/k$ जैसा $β$, $$\sigma_\beta(\mathbf{z}) \to \operatorname{arg\,max}(\mathbf{z}).$$ हालाँकि, softargmax अधिकतम arg के लिए  एकसमान अभिसरण  नहीं करता है, जिसका अर्थ है कि अलग-अलग बिंदु अलग-अलग दरों पर अभिसरण करते हैं, और मनमाने ढंग से धीरे-धीरे परिवर्तित हो सकते हैं। वास्तव में, softargmax निरंतर है, लेकिन arg max एकवचन सेट पर निरंतर नहीं है जहां दो निर्देशांक समान हैं, जबकि निरंतर कार्यों की समान सीमा निरंतर है। कारण यह समान रूप से अभिसरण करने में विफल रहता है क्योंकि इनपुट के लिए जहां दो निर्देशांक लगभग बराबर होते हैं (और एक अधिकतम है), arg अधिकतम एक या दूसरे का सूचकांक है, इसलिए इनपुट में एक छोटा सा परिवर्तन आउटपुट में एक बड़ा बदलाव पैदा करता है। उदाहरण के लिए, $$\sigma_\beta(1,\, 1.0001) \to (0, 1),$$ लेकिन $$\sigma_\beta(1,\, 0.9999) \to (1,\, 0),$$ तथा $$\sigma_\beta(1,\, 1) = 1/2$$ सभी इनपुट के लिए: बिंदु एकवचन सेट के जितने करीब होते हैं $$(x, x)$$, जितनी धीमी गति से वे अभिसरित होते हैं। हालांकि, सॉफ़्टर्गमैक्स गैर-एकवचन सेट पर  कॉम्पैक्ट अभिसरण  करता है।

इसके विपरीत, जैसा $β$, softargmax उसी तरह arg min में परिवर्तित होता है, जहाँ यहाँ एकवचन सेट दो arg min मानों के साथ बिंदु है। उष्णकटिबंधीय विश्लेषण  की भाषा में, सॉफ्टमैक्स एक विकृति सिद्धांत या आर्ग मैक्स और आर्ग मिन का परिमाणीकरण है, जो  मिन-प्लस सेमी-रिंग  (क्रमशः न्यूनतम-प्लस सेमिरिंग) के बजाय  लॉग सेमीरिंग  का उपयोग करने के अनुरूप है, और आर्ग मैक्स या आर्ग को पुनर्प्राप्त करता है। सीमा लेकर मिनट को ट्रॉपिकलाइज़ेशन या डिक्वांटाइज़ेशन कहा जाता है।

यह भी मामला है कि, किसी निश्चित के लिए $k$, यदि एक इनपुट $z$ तापमान के सापेक्ष अन्य की तुलना में बहुत बड़ा है, $$T = 1/\beta$$, आउटपुट लगभग arg अधिकतम है। उदाहरण के लिए, 1 के तापमान के सापेक्ष 10 का अंतर बड़ा है: $$\sigma(0,\, 10) := \sigma_1(0,\, 10) = \left(1/\left(1 + e^{10}\right),\, e^{10}/\left(1 + e^{10}\right)\right) \approx (0.00005,\, 0.99995)$$ हालांकि, यदि अंतर तापमान के सापेक्ष छोटा है, तो मान अधिकतम आर्ग के करीब नहीं है। उदाहरण के लिए, 100 के तापमान के सापेक्ष 10 का अंतर छोटा है: $$\sigma_{1/100}(0,\, 10) = \left(1/\left(1 + e^{1/10}\right),\, e^{1/10}/\left(1 + e^{1/10}\right)\right) \approx (0.475,\, 0.525).$$ जैसा $\beta \to \infty$, तापमान शून्य हो जाता है, $$T = 1/\beta \to 0$$, इसलिए अंततः सभी अंतर बड़े हो जाते हैं (एक सिकुड़ते तापमान के सापेक्ष), जो सीमा व्यवहार के लिए एक और व्याख्या देता है।

प्रायिकता सिद्धांत
प्रायिकता सिद्धांत में, सॉफ्टर्गमैक्स फलन के आउटपुट का उपयोग एक स्पष्ट वितरण का प्रतिनिधित्व करने के लिए किया जा सकता है - अर्थात, एक प्रायिकता वितरण $\beta \to \infty$ विभिन्न संभावित परिणाम।

सांख्यिकीय यांत्रिकी
सांख्यिकीय यांत्रिकी में, सॉफ्टर्गमैक्स फलन को बोल्ट्ज़मान वितरण (या गिब्स वितरण ) के रूप में जाना जाता है:  सूचकांक सेट $${1,\, \dots,\, k}$$ सिस्टम के  माइक्रोस्टेट (सांख्यिकीय यांत्रिकी)  हैं; आदानों $$z_i$$ उस अवस्था की ऊर्जाएँ हैं; विभाजक को विभाजन फलन (सांख्यिकीय यांत्रिकी) के रूप में जाना जाता है, जिसे अक्सर निरूपित किया जाता है $\beta \to -\infty$; और कारक $β$  शीतलता  (या  थर्मोडायनामिक बीटा, या  उलटा तापमान ) कहा जाता है।

अनुप्रयोग
सॉफ्टमैक्स फलन का उपयोग विभिन्न मल्टीक्लास वर्गीकरण विधियों में किया जाता है, जैसे कि मल्टीनोमियल तार्किक रिग्रेशन (जिसे सॉफ्टमैक्स रिग्रेशन भी कहा जाता है), मल्टीक्लास  रैखिक विभेदक विश्लेषण ,  भोले बेयस क्लासिफायरियर  और आर्टिफिशियल न्यूरल नेटवर्क। विशेष रूप से, बहुराष्ट्रीय तार्किक प्रतिगमन और रैखिक विभेदक विश्लेषण में, फलन के इनपुट का परिणाम होता है $z_i$ विशिष्ट रैखिक कार्य, और के लिए अनुमानित संभावना $\beta \to \infty$वें वर्ग ने एक नमूना वेक्टर दिया $z$ और एक वेटिंग वेक्टर $x$ है:


 * $$P(y=j\mid \mathbf{x}) = \frac{e^{\mathbf{x}^\mathsf{T}\mathbf{w}_j}}{\sum_{k=1}^K e^{\mathbf{x}^\mathsf{T}\mathbf{w}_k}}$$

इसे की कार्य संरचना के रूप में देखा जा सकता है $K$ रैखिक कार्य $$\mathbf{x} \mapsto \mathbf{x}^\mathsf{T}\mathbf{w}_1, \ldots, \mathbf{x} \mapsto \mathbf{x}^\mathsf{T}\mathbf{w}_K$$ और सॉफ्टमैक्स फलन (जहाँ $$\mathbf{x}^\mathsf{T}\mathbf{w}$$ के आंतरिक उत्पाद को दर्शाता है $$\mathbf{x}$$ तथा $$\mathbf{w}$$). ऑपरेशन द्वारा परिभाषित एक रैखिक ऑपरेटर को लागू करने के बराबर है $$\mathbf{w}$$ वैक्टर को $$\mathbf{x}$$, इस प्रकार मूल, संभवतः अत्यधिक-आयामी, इनपुट को वैक्टर में बदलना $Z$-आयामी स्थान $$\mathbb{R}^K$$.

तंत्रिका नेटवर्क
मानक सॉफ्टमैक्स फलन का उपयोग अक्सर तंत्रिका नेटवर्क-आधारित क्लासिफायरियर की अंतिम परत में किया जाता है। इस तरह के नेटवर्क को आमतौर पर एक क्रॉस एन्ट्रापी  (या  क्रोस एंट्रोपी ) शासन के तहत प्रशिक्षित किया जाता है, जो बहुराष्ट्रीय रसद प्रतिगमन का एक गैर-रैखिक संस्करण देता है।

चूंकि फलन एक वेक्टर और एक विशिष्ट इंडेक्स को मैप करता है $$i$$ एक वास्तविक मूल्य के लिए, व्युत्पन्न को सूचकांक को ध्यान में रखना चाहिए:

$$\frac{\partial}{\partial q_k}\sigma(\textbf{q}, i) = \sigma(\textbf{q}, i)(\delta_{ik} - \sigma(\textbf{q}, k)).$$ यह व्यंजक अनुक्रमित में सममित है $$i, k$$ और इस प्रकार भी व्यक्त किया जा सकता है


 * $$ \frac{\partial}{\partial q_k}\sigma(\textbf{q}, i) = \sigma(\textbf{q}, k)(\delta_{ik} - \sigma(\textbf{q}, i)).$$

यहाँ, क्रोनकर डेल्टा  का उपयोग सादगी के लिए किया जाता है (cf. एक  सिग्मॉइड फलन का व्युत्पन्न, फलन के माध्यम से ही व्यक्त किया जा रहा है)।

व्युत्पन्न के स्थिर संख्यात्मक अभिकलन प्राप्त करने के लिए, एक अक्सर इनपुट वेक्टर से एक स्थिरांक घटाता है। सिद्धांत रूप में, यह आउटपुट को नहीं बदलता है, और न ही डेरिवेटिव। लेकिन यह अधिक स्थिर है क्योंकि यह स्पष्ट रूप से प्रत्येक घातांक में गणना किए गए सबसे बड़े मान को नियंत्रित कर सकता है।

यदि फलन पैरामीटर के साथ स्केल किया गया है $$\beta$$, तो इन अभिव्यक्तियों को गुणा किया जाना चाहिए $$\beta$$.

एक प्रायिकता मॉडल के लिए बहुराष्ट्रीय लॉगिट देखें जो सॉफ्टमैक्स सक्रियण फलन का उपयोग करता है।

सुदृढीकरण सीखना
सुदृढीकरण सीखने के क्षेत्र में, मूल्यों को क्रिया संभावनाओं में बदलने के लिए एक सॉफ्टमैक्स फलन का उपयोग किया जा सकता है। आमतौर पर इस्तेमाल किया जाने वाला फलन है: $$P_t(a) = \frac{\exp(q_t(a)/\tau)}{\sum_{i=1}^n\exp(q_t(i)/\tau)} \text{,}$$ जहां कार्रवाई मूल्य $$q_t(a)$$ निम्नलिखित कार्रवाई के अपेक्षित इनाम के अनुरूप है और $$\tau$$ एक तापमान पैरामीटर (सांख्यिकीय यांत्रिकी के संकेत में) कहा जाता है। उच्च तापमान के लिए ($$\tau \to \infty$$), सभी क्रियाओं की संभावना लगभग समान होती है और तापमान जितना कम होता है, उतने अधिक अपेक्षित पुरस्कार प्रायिकता को प्रभावित करते हैं। कम तापमान के लिए ($$\tau \to 0^+$$), उच्चतम अपेक्षित इनाम के साथ कार्रवाई की संभावना 1 हो जाती है।

कम्प्यूटेशनल जटिलता और उपचार
तंत्रिका नेटवर्क अनुप्रयोगों में, संख्या $β$ संभावित परिणामों की संख्या अक्सर बड़ी होती है, उदा। भाषा मॉडल  के मामले में जो एक शब्दावली से सबसे संभावित परिणाम की भविष्यवाणी करता है जिसमें लाखों संभावित शब्द हो सकते हैं। यह सॉफ्टमैक्स परत के लिए गणना कर सकता है (अर्थात मैट्रिक्स गुणन को निर्धारित करने के लिए $$z_i$$, इसके बाद सॉफ्टमैक्स फलन का अनुप्रयोग) कम्प्यूटेशनल रूप से महंगा है। क्या अधिक है, इस तरह के तंत्रिका नेटवर्क को प्रशिक्षित करने के लिए  ढतला हुआ वंश   पीछे प्रसार  विधि में प्रत्येक प्रशिक्षण उदाहरण के लिए सॉफ्टमैक्स की गणना करना शामिल है, और प्रशिक्षण उदाहरणों की संख्या भी बड़ी हो सकती है। सॉफ्टमैक्स के लिए कम्प्यूटेशनल प्रयास बड़े तंत्रिका भाषा मॉडल के विकास में एक प्रमुख सीमित कारक बन गया, जो प्रशिक्षण समय को कम करने के लिए विभिन्न उपायों को प्रेरित करता है।

अधिक कुशल गणना के लिए सॉफ्टमैक्स परत को पुनर्गठित करने वाले दृष्टिकोणों में पदानुक्रमित सॉफ्टमैक्स और विभेदित सॉफ्टमैक्स शामिल हैं। पदानुक्रमित सॉफ्टमैक्स (2005 में मोरिन और जोशुआ बेंगियो  द्वारा पेश किया गया) एक बाइनरी ट्री संरचना का उपयोग करता है जहां परिणाम (शब्दावली शब्द) पत्ते होते हैं और मध्यवर्ती नोड्स परिणामों के उपयुक्त रूप से चयनित वर्ग होते हैं, जो  अव्यक्त चर  बनाते हैं। एक पत्ती (परिणाम) की वांछित प्रायिकता (सॉफ्टमैक्स मान) की गणना तब रूट से उस पत्ते तक के सभी नोड्स की संभावनाओं के उत्पाद के रूप में की जा सकती है। आदर्श रूप से, जब पेड़ संतुलित होता है, तो इससे कम्प्यूटेशनल जटिलता कम हो जाएगी $$O(K)$$ प्रति $$O(\log_2 K)$$. व्यवहार में, परिणाम कक्षाओं में परिणामों को समूहबद्ध करने के लिए एक अच्छी रणनीति चुनने पर निर्भर करते हैं। स्केलेबिलिटी हासिल करने के लिए Google के  word2vec  मॉडल (2013 में पेश) में इसके लिए एक  हफमैन का पेड़  का इस्तेमाल किया गया था।

एक दूसरे प्रकार का उपाय संशोधित हानि कार्यों के साथ सॉफ्टमैक्स (प्रशिक्षण के दौरान) का अनुमान लगाने पर आधारित है जो पूर्ण सामान्यीकरण कारक की गणना से बचते हैं। इनमें ऐसे तरीके शामिल हैं जो सामान्यीकरण योग को परिणामों के नमूने तक सीमित रखते हैं (जैसे महत्व नमूनाकरण, लक्ष्य नमूनाकरण)।

गणितीय गुण
ज्यामितीय रूप से सॉफ्टमैक्स फलन सदिश स्थल  को मैप करता है $$\mathbb{R}^K$$ मानक सिम्प्लेक्स | मानक की  सीमा (टोपोलॉजी)  के लिए $$(K-1)$$-सिम्प्लेक्स, आयाम को एक से काटकर (श्रेणी a $$(K - 1)$$-आयामी सिंप्लेक्स in $$K$$-आयामी अंतरिक्ष),  रैखिक बाधा  के कारण कि सभी आउटपुट योग 1 का अर्थ है कि यह एक  hyperplane  पर स्थित है।

मुख्य विकर्ण के साथ $$(x,\, x,\, \dots,\, x),$$ सॉफ्टमैक्स आउटपुट पर सिर्फ एक समान वितरण है, $$(1/n, \dots, 1/n)$$: समान स्कोर से समान संभावनाएँ प्राप्त होती हैं।

अधिक सामान्यतः, सॉफ्टमैक्स अनुवाद के तहत प्रत्येक समन्वय में समान मान द्वारा अपरिवर्तनीय है: जोड़ना $$\mathbf{c} = (c,\, \dots,\, c)$$ इनपुट के लिए $$\mathbf{z}$$ पैदावार $$\sigma(\mathbf{z} + \mathbf{c}) = \sigma(\mathbf{z})$$, क्योंकि यह प्रत्येक घातांक को उसी कारक से गुणा करता है, $$e^c$$ (इसलिये $$e^{z_i + c} = e^{z_i} \cdot e^c$$), इसलिए अनुपात नहीं बदलते हैं:


 * $$\sigma(\mathbf{z} + \mathbf{c})_j = \frac{e^{z_j + c}}{\sum_{k=1}^K e^{z_k + c}} = \frac{e^{z_j} \cdot e^c}{\sum_{k=1}^K e^{z_k} \cdot e^c} = \sigma(\mathbf{z})_j.$$

ज्यामितीय रूप से, सॉफ्टमैक्स विकर्णों के साथ स्थिर होता है: यह वह आयाम है जिसे समाप्त कर दिया जाता है, और सॉफ्टमैक्स आउटपुट के इनपुट स्कोर में अनुवाद से स्वतंत्र होने के अनुरूप होता है (0 स्कोर का विकल्प)। कोई यह मानकर इनपुट स्कोर को सामान्य कर सकता है कि योग शून्य है (औसत घटाएं: $$\mathbf{c}$$ कहाँ पे $c = \frac{1}{n} \sum z_i$ ), और फिर सॉफ्टमैक्स उन बिंदुओं का हाइपरप्लेन लेता है जिनका योग शून्य होता है, $\sum z_i = 0$, सकारात्मक मानों के खुले सिंप्लेक्स के लिए जिसका योग 1 है$\sum \sigma(\mathbf{z})_i = 1$ , उसी प्रकार जैसे घातांक 0 से 1 लेता है, $$e^0 = 1$$ और सकारात्मक है।

इसके विपरीत, सॉफ्टमैक्स स्केलिंग के तहत अपरिवर्तनीय नहीं है। उदाहरण के लिए, $$\sigma\bigl((0,\, 1)\bigr) = \bigl(1/(1 + e),\, e/(1 + e)\bigr)$$ लेकिन $$\sigma\bigl((0, 2)\bigr) = \bigl(1/\left(1 + e^2\right),\, e^2/\left(1 + e^2\right)\bigr).$$ मानक तार्किक फलन 2-आयामी अंतरिक्ष में 1-आयामी अक्ष के लिए विशेष मामला है, एक्स-अक्ष में कहें $w$ विमान। एक चर 0 पर तय किया गया है (कहते हैं $$z_2 = 0$$), इसलिए $$e^0 = 1$$, और अन्य चर भिन्न हो सकते हैं, इसे निरूपित करें $$z_1 = x$$, इसलिए $e^{z_1}/\sum_{k=1}^2 e^{z_k} = e^x/\left(e^x + 1\right),$ मानक रसद समारोह, और $e^{z_2}/\sum_{k=1}^2 e^{z_k} = 1/\left(e^x + 1\right),$  इसका पूरक (जिसका अर्थ है कि वे 1 तक जोड़ते हैं)। 1-आयामी इनपुट को वैकल्पिक रूप से रेखा के रूप में व्यक्त किया जा सकता है $$(x/2,\, -x/2)$$, आउटपुट के साथ $$e^{x/2}/\left(e^{x/2} + e^{-x/2}\right) = e^x/\left(e^x + 1\right)$$ तथा $$e^{-x/2}/\left(e^{x/2} + e^{-x/2}\right) = 1/\left(e^x + 1\right).$$ सॉफ्टमैक्स फलन भी LogSumExp फलन का ग्रेडिएंट है, एक सहज अधिकतम:


 * $$\frac{\partial}{\partial z_i} \operatorname{LSE}(\mathbf{z}) = \frac{\exp z_i}{\sum_{j=1}^{K} \exp z_j} = \sigma(\mathbf{z})_i, \quad \text{ for } i = 1, \dotsc, K, \quad \mathbf{z} = (z_1,\, \dotsc,\, z_K) \in\R^K,$$

जहाँ LogSumExp फलन को इस रूप में परिभाषित किया गया है $$\operatorname{LSE}(z_1,\, \dots,\, z_n) = \log\left(\exp(z_1) + \cdots + \exp(z_n)\right)$$.

इतिहास
सॉफ्टमैक्स फलन का उपयोग सांख्यिकीय यांत्रिकी में बोल्ट्जमैन वितरण के रूप में आधारभूत पेपर में किया गया था, प्रभावशाली पाठ्यपुस्तक में औपचारिक और लोकप्रिय. निर्णय सिद्धांत में सॉफ्टमैक्स के उपयोग का श्रेय दिया जाता है,  जिन्होंने तर्कसंगत पसंद सिद्धांत में  अप्रासंगिक विकल्पों की स्वतंत्रता  के स्वयंसिद्ध का उपयोग सापेक्ष वरीयताओं के लिए लूस की पसंद के स्वयंसिद्ध में सॉफ्टमैक्स को निकालने के लिए किया।

मशीन लर्निंग में, सॉफ्टमैक्स शब्द का श्रेय 1989 के दो सम्मेलन पत्रों में जॉन एस. ब्रिडल को दिया जाता है, : तथा : "We are concerned with feed-forward non-linear networks (multi-layer perceptrons, or MLPs) with multiple outputs. We wish to treat the outputs of the network as probabilities of alternatives (e.g. pattern classes), conditioned on the inputs. We look for appropriate output non-linearities and for appropriate criteria for adaptation of the parameters of the network (e.g. weights). We explain two modifications: probability scoring, which is an alternative to squared error minimisation, and a normalised exponential (softmax) multi-input generalisation of the logistic non-linearity."

"For any input, the outputs must all be positive and they must sum to unity. ...

Given a set of unconstrained values, $K$, we can ensure both conditions by using a Normalised Exponential transformation:
 * $Q_j(x) = \left. e^{V_j(x)} \right/ \sum_k e^{V_k(x)} $

This transformation can be considered a multi-input generalisation of the logistic, operating on the whole output layer. It preserves the rank order of its input values, and is a differentiable generalisation of the 'winner-take-all' operation of picking the maximum value. For this reason we like to refer to it as softmax."

उदाहरण
अगर हम का इनपुट लेते हैं $(x, y)$, उसका सॉफ्टमैक्स है $[1, 2, 3, 4, 1, 2, 3]$. आउटपुट का अधिकांश वजन वहीं होता है जहां 4 मूल इनपुट में था। यह वह है जिसके लिए फलन का सामान्य रूप से उपयोग किया जाता है: सबसे बड़े मूल्यों को उजागर करने और उन मूल्यों को दबाने के लिए जो अधिकतम मूल्य से काफी नीचे हैं। लेकिन ध्यान दें: सॉफ्टमैक्स स्केल इनवेरिएंट नहीं है, इसलिए यदि इनपुट थे $[0.024, 0.064, 0.175, 0.475, 0.024, 0.064, 0.175]$ (जो 1.6 के बराबर है) सॉफ्टमैक्स होगा $[0.1, 0.2, 0.3, 0.4, 0.1, 0.2, 0.3]$. इससे पता चलता है कि 0 और 1 सॉफ्टमैक्स के बीच के मूल्यों के लिए, वास्तव में, अधिकतम मूल्य पर जोर दिया जाता है (ध्यान दें कि 0.169 न केवल 0.475 से कम है, यह प्रारंभिक अनुपात से भी कम है $[0.125, 0.138, 0.153, 0.169, 0.125, 0.138, 0.153]$).

पायथन (प्रोग्रामिंग भाषा) कोड का उपयोग करके इस उदाहरण की गणना:

<वाक्यविन्यास लैंग = पिकॉन> >>> numpy को एनपी के रूप में आयात करें >>> ए = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0] >>> np.exp (ए) / np.sum (np.exp (ए)) सरणी ([0.02364054, 0.06426166, 0.1746813, 0.474833, 0.02364054,      0.06426166, 0.1746813]) 

यहाँ जूलिया (प्रोग्रामिंग भाषा)  कोड का एक उदाहरण दिया गया है:

<वाक्यविन्यास लैंग = jlcon> जूलिया> ए = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]; # अर्धविराम इंटरैक्टिव आउटपुट को दबाने के लिए

जूलिया> ऍक्स्प.(ए) ./ योग(ऍक्स्प.(ए)) 7-एलिमेंट ऐरे{फ्लोट64,1}: 0.0236405 0.0642617 0.174681 0.474833 0.0236405 0.0642617 0.174681 

यहाँ R (प्रोग्रामिंग भाषा) कोड का एक उदाहरण दिया गया है:

<वाक्यविन्यास लैंग = रूट> > जेड <- सी (1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0) > सॉफ्टमैक्स <- ऍक्स्प (z)/योग (ऍक्स्प (z)) > सॉफ्टमैक्स [1] 0.02364054 0.06426166 0.17468130 0.47483300 0.02364054 0.06426166 0.17468130 

यहाँ अमृत (प्रोग्रामिंग भाषा) कोड का एक उदाहरण है: <वाक्यविन्यास हाइलाइट लैंग = आईईएक्स> iex> t = Nx.tensor(1, 2], [3, 4) iex> Nx.divide(Nx.exp(t), Nx.sum(Nx.exp(t)))

f64[2][2] [   [0.03205860328008499, 0.08714431874203257],    [0.23688281808991013, 0.6439142598879722]  ] > 
 * 1) Nx.टेन्सर<

राकू (प्रोग्रामिंग भाषा) कोड का एक उदाहरण यहां दिया गया है:

<वाक्यविन्यास हाइलाइट लैंग = राकू > > मेरा @z = [1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0]; > कहें @z.map: {exp($_)/sum(@z.map: {exp($_)})}

(0.023640543021591385 0.06426165851049616 0.17468129859572226 0.4748329997443803 0.023640543021591385 0.06426165851049616 0.17468129859572226) 

यह भी देखें

 * सॉफ्टप्लस
 * बहुराष्ट्रीय रसद प्रतिगमन
 * डिरिचलेट वितरण - श्रेणीबद्ध वितरण का नमूना लेने का एक वैकल्पिक तरीका
 * विभाजन समारोह (सांख्यिकीय यांत्रिकी)
 * घातीय झुकाव - अधिक सामान्य प्रायिकता वितरण के लिए सॉफ्टमैक्स का सामान्यीकरण।