मैं एक संवादी परत के डेल्टा शब्द की गणना कैसे करूँ, पिछले संवादी परत के डेल्टा शब्द और भार को देखते हुए?


10

मैं दो संकेंद्रित परतों (c1, c2) और दो छिपी परतों (c1, c2) के साथ एक कृत्रिम तंत्रिका नेटवर्क को प्रशिक्षित करने की कोशिश कर रहा हूं। मैं मानक backpropagation दृष्टिकोण का उपयोग कर रहा हूं। बैकवर्ड पास में, मैं पिछली परत की त्रुटि के आधार पर एक परत (डेल्टा) की त्रुटि अवधि की गणना करता हूं, पिछली परत के वजन और वर्तमान परत के सक्रियण समारोह के संबंध में सक्रियण की ढाल। विशेष रूप से परत l का डेल्टा इस तरह दिखता है:

delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

मैं सी 2 के ढाल की गणना करने में सक्षम हूं, जो एक नियमित परत में जोड़ता है। मैं अभी एच 1 के वजन को डेल्टा के साथ गुणा करता हूं। फिर मैं उस मैट्रिक्स को c2 के आउटपुट के रूप में फिर से खोलता हूं, इसे सक्रियण फ़ंक्शन के ग्रेडिएंट के साथ गुणा करें और किया जाए।

अब मेरे पास c2 का डेल्टा शब्द है - जो आकार का 4D मैट्रिक्स है (featureMapSize, featureMapSize, filterNum, patternNum)। इसके अलावा मेरे पास c2 का वजन है, जो आकार के 3 डी मैट्रिक्स हैं (फ़िल्टर करें, फ़िल्टर करें, फ़िल्टर करें)।

इन दो शब्दों के साथ और c1 की सक्रियता के ढाल मैं c1 के डेल्टा की गणना करना चाहता हूं।

कहानी संक्षिप्त में:

पिछली संकेंद्रित परत के डेल्टा शब्द और उस परत के भार को देखते हुए, मैं एक संकेंद्रित परत के डेल्टा शब्द की गणना कैसे करूँ?

जवाबों:


6

मैं पहले एक आयामी सरणी (इनपुट) के लिए सरलता के लिए नीचे दी गई एक दृढ़ परत के लिए त्रुटि प्राप्त कर रहा हूं जिसे आसानी से एक बहुआयामी में स्थानांतरित किया जा सकता है:

हम यहाँ मानते हैं कि yएल-1 लंबाई की एन के इनपुट हैं एल-1-थे काँटा। परत,म वजन का कर्नेल-आकार है w प्रत्येक वजन को दर्शाते हुए wमैं और आउटपुट है एक्सएल।
इसलिए हम लिख सकते हैं (शून्य से योग पर ध्यान दें):

एक्समैंएल=Σए=0म-1wएyए+मैंएल-1
कहाँ पे yमैंएल=च(एक्समैंएल) तथा चसक्रियण समारोह (जैसे सिग्मोइडल)। इसके साथ ही अब हम कुछ एरर फंक्शन पर विचार कर सकते हैंइ और दी गई गलती की परत (आपकी पिछली परत में से एक) पर त्रुटि फ़ंक्शन ∂इ/∂yमैंएल। अब हम पिछली परत (परतों) में एक वजन में त्रुटि की निर्भरता का पता लगाना चाहते हैं:
∂इ∂wए=Σए=0एन-म∂इ∂एक्समैंएल∂एक्समैंएल∂wए=Σए=0एन-म∂इ∂wएyमैं+एएल-1

जहां हम सभी अभिव्यक्ति पर योग है जिसमें wए होता है, जो हैं एन-म। ध्यान दें कि हम जानते हैं कि अंतिम शब्द इस तथ्य से उत्पन्न होता है कि∂एक्समैंएल∂wए=yमैं+एएल-1जिसे आप पहले समीकरण से देख सकते हैं।
ग्रेडिएंट की गणना करने के लिए हमें पहले शब्द को जानना होगा, जिसकी गणना निम्न द्वारा की जा सकती है:
∂इ∂एक्समैंएल=∂इ∂yमैंएल∂yमैंएल∂एक्समैंएल=∂इ∂yमैंएल∂∂एक्समैंएलच(एक्समैंएल)
जहां पहले शब्द में पिछली परत में त्रुटि है और च nonlinear सक्रियण समारोह।

सभी आवश्यक इकाइयाँ होने के बाद अब हम त्रुटि की गणना करने में सक्षम हैं और इसे बहुमूल्य परत तक कुशलतापूर्वक वापस प्रचारित करते हैं:

δएएल-1=∂इ∂yमैंएल-1=Σए=0म-1∂इ∂एक्समैं-एएल∂एक्समैं-एएल∂yमैंएल-1=Σए=0म-1∂इ∂एक्समैं-एएलwएचएलमैंपीपीइघ
ध्यान दें कि अंतिम चरण को नीचे लिखते समय आसान समझा जा सकता है एक्समैंएल-s wrt yमैंएल-1-s। चएलमैंपीपीइघ संदर्भित ट्रांसपोज़्ड वेट मैक्सिमिक्स (टी)।

इसलिए आप केवल अगली परत में त्रुटि की गणना कर सकते हैं (अब वेक्टर संकेतन में):

δएल=(wएल)टीδएल+1च'(एक्सएल)

जो एक दृढ़ और subsampling परत के लिए बन जाता है:

δएल=यूपीरोंएमपीएलइ((wएल)टीδएल+1)च'(एक्सएल)
जहां यूपीरोंएमपीएलइ ऑपरेशन अधिकतम पूलिंग परत के माध्यम से त्रुटि का प्रचार करता है।

कृपया मुझे जोड़ने या सुधारने के लिए स्वतंत्र महसूस करें!

संदर्भ के लिए देखें:

http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/ http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

और C ++ कार्यान्वयन के लिए (स्थापित करने की आवश्यकता के बिना): https://github.com/nyanp/tiny-cnn#supported-networks

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