एक तंत्रिका नेटवर्क में सॉफ्टमैक्स परत


43

मैं backpropagation के साथ प्रशिक्षित तंत्रिका नेटवर्क में सॉफ्टमैक्स परत जोड़ने की कोशिश कर रहा हूं, इसलिए मैं इसके ढाल की गणना करने की कोशिश कर रहा हूं।

सॉफ्टमैक्स आउटपुट hj=ezj∑ezi जहांjआउटपुट न्यूरॉन संख्या है।

अगर मैं इसे प्राप्त करता हूं तो मुझे मिलता है

∂hj∂zj=hj(1−hj)

लॉजिस्टिक रिग्रेशन के समान। हालाँकि यह गलत है क्योंकि मेरी संख्यात्मक ढाल की जांच विफल हो जाती है।

मैं क्या गलत कर रहा हूं? मैं एक विचार है कि मैं पार डेरिवेटिव की गणना करने के रूप में अच्छी तरह की जरूरत थी (यानी ∂hj∂zk ) लेकिन मुझे यकीन नहीं है कि यह कैसे करना है और ग्रेडिएंट के आयाम को वही रखना है ताकि यह पीछे के प्रसार प्रक्रिया के लिए फिट हो।


3
आपको अपने प्रश्न के शीर्षक में सुधार करना चाहिए क्योंकि एनएनएन में एक सामान्य सॉफ्टमैक्स परत को जोड़ने की बात नहीं की जाती है, क्योंकि आप सवाल विशिष्ट है कि ग्रेडिएंट चेक कैसे विफल हो जाता है। मैं दृढ़ता से शीर्षक को बदलने का सुझाव देता हूं "जब मैं अपने नीयर नेटवर्क में सॉफ्टमैक्स परत जोड़ता हूं तो बैकप्रोपेगेशन सही ढंग से काम करना क्यों बंद कर देता है"।
— चार्ली पार्कर

जवाबों:


43

मैं इसके लिए अपना जवाब प्रदान करने के बारे में थोड़ा बुरा महसूस करता हूं क्योंकि यह अमीबा और जुम्पा द्वारा बहुत अच्छी तरह से कब्जा कर लिया गया है, सिवाय शायद अंतिम अंतर्ज्ञान के बारे में कि कैसे जैकबियन को एक वेक्टर में वापस कम किया जा सकता है।

आपने जेकोबियन मैट्रिक्स के विकर्ण के ढाल को सही ढंग से व्युत्पन्न किया है, जो यह कहना है

∂hi∂zj=hi(1−hj):i=j

और जैसा कि अमीबा ने कहा है, आपको जैकबियन की विकर्ण प्रविष्टियों को भी प्राप्त करना होगा, जो उपज देती है

∂hi∂zj=−hihj:i≠j

इन दो अवधारणाओं की परिभाषाओं को आसानी से क्रोनकर डेल्टा नामक एक निर्माण का उपयोग करके जोड़ा जा सकता है , इसलिए ढाल की परिभाषा बन जाती है

∂hi∂zj=hi(δij−hj)

तो Jacobian एक वर्ग मैट्रिक्स है [J]ij=hi(δij−hj)

इस बिंदु तक की सभी जानकारी पहले से ही अमीबा और जुम्पा द्वारा कवर की गई है। समस्या बेशक है, कि हमें पहले से गणना की गई आउटपुट त्रुटियों से इनपुट त्रुटियों को प्राप्त करने की आवश्यकता है । के बाद से उत्पादन त्रुटि की ढाल आदानों के सभी पर निर्भर करता है, तो इनपुट की ढाल x मैं है∇hixi

[∇x]k=∑i=1∇hi,k

ऊपर दिए गए याकूबियन मैट्रिक्स को देखते हुए, यह मैट्रिक्स के उत्पाद और आउटपुट त्रुटि वेक्टर के रूप में तुच्छ रूप से लागू किया जाता है:

σl→=Jσl+1→

अगर सॉफ्टमैक्स लेयर आपकी आउटपुट लेयर है, तो इसे क्रॉस-एन्ट्रापी कॉस्ट मॉडल के साथ संयोजित करने से कंपटीशन को सरल बनाने में आसानी होती है

σl→=h→−t→

जहाँ लेबल का वेक्टर है, और → h सॉफ्टमैक्स फ़ंक्शन से आउटपुट है। न केवल सरलीकृत रूप सुविधाजनक है, यह एक संख्यात्मक स्थिरता के दृष्टिकोण से भी बहुत उपयोगी है।t→h→


साथ , है σ एल , जे = ∂ सीσl→=(σl,1,σl,2,...,σl,k) ? (बस इस मामले में 'ढाल' क्या है, यह जानने की कोशिश कर रहा है)σl,j=∂C∂zj
— अलेक्जेंड्रे होल्डन Daly

हां यह सही है।
— मृण्ज

क्या कोई यह बता सकता है कि क्रोनकर डेल्टा में लोअरकेस डेल्टा की शर्तें क्या हैं और उनकी गणना कैसे की जाए?
— डेनियार

मैं इस समस्या पर कुछ समय के लिए अड़ा हुआ हूं। स्पष्ट करना। आपके पास एक वेक्टर (प्री सॉफ्टमैक्स) है और फिर आप सॉफ्टमैक्स की गणना करते हैं। चूंकि सॉफ्टमैक्स के मूल्य सभी इनपुट मूल्यों पर निर्भर करते हैं, इसलिए वास्तविक जकोबियन मैट्रिक्स की आवश्यकता होती है। फिर आप जेकोबियन मैट्रिक्स लेते हैं और एकल पंक्ति वेक्टर पाने के लिए पंक्तियों को कम करते हैं, जिसे आप हमेशा की तरह ढाल वंश के लिए उपयोग करते हैं। क्या यह सब 100% सही है?
— harveyslash

14

व्युत्पन्न गलत है। यह होना चाहिए,

∂hj∂zk=hjδkj−hjhk

C

−∑n∑k=1Ctknln⁡yk(xn)

tkntkn

ध्यान दें, कि टी स्थिर हैं। इसलिए इस क्रिया को कम करना न्यूनतम करने के बराबर है,

−∑n∑k=1Ctknln⁡yk(xn)+∑n∑k=1Ctknln⁡tkn=−∑n∑k=1Ctknln⁡yk(xn)tkn

जिसका फायदा यह है कि जैकबियन बहुत सुविधाजनक रूप लेता है, अर्थात्

∂E∂zj=hj−tj

मैं आपको पैटर्न रिकॉग्निशन के लिए बिशप न्यूरल नेटवर्क्स की एक प्रति प्राप्त करने की सलाह दूंगा । IMHO अभी भी तंत्रिका नेटवर्क पर सबसे अच्छी किताब है।


14

∂jhj=∂hj∂zj=hj(1−hj)∂khj=−hjhkj≠k

jj

C=−∑jtjlog⁡hj,
tj∂C∂zj

1
मैं इस ट्यूटोरियल ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm के उदाहरण के अनुसार, अपनी समस्या का बेहतर वर्णन करने का प्रयास करूंगा , मुझे व्युत्पन्न (चरण संख्या 3) के साथ वज़न और डेल्टा को गुणा करने की आवश्यकता है। इसलिए अगर मेरे पास पूर्ण जकोबियन मैट्रिक्स है, तो आयाम फिट नहीं होते हैं। धन्यवाद।
— दौड़ा

क्या आप जानते हैं कि अगर यह सॉफ्टमैक्स नहीं है, लेकिन सामान्य छिपी हुई परत कैसे आगे बढ़ सकती है? कल्पना करें कि इस परत पर प्रत्येक इकाई को पिछली परत (यानी यह परत "पूरी तरह से जुड़ा हुआ है") की सभी इकाइयों से इनपुट मिलता है, जो कि सामान्य रूप से होता है। फिर आपको इस परत के माध्यम से त्रुटियों को वापस फैलाने की भी आवश्यकता है, और डेरिवेटिव भी एक याकूबियन मैट्रिक्स बनाते हैं। यदि आप इसे कैसे करें के बारे में भ्रमित हैं, तो आपका भ्रम सॉफ्टमैक्स से असंबंधित है।
— अमीबा का कहना है कि मोनिका

1
मैंने इसे रैखिक और सिग्मॉइड परतों के लिए सफलतापूर्वक लागू किया है क्योंकि व्युत्पन्न एक वेक्टर है इसलिए मुझे आयामों के साथ कोई समस्या नहीं थी।
— रैन

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