रिवर्स-मोड स्वचालित भेदभाव के चरण-दर-चरण उदाहरण


27

यकीन नहीं होता कि यह सवाल यहाँ है, लेकिन यह अनुकूलन में ढाल के तरीकों से निकटता से संबंधित है, जो यहाँ विषय पर लगता है। वैसे भी, अगर आपको लगता है कि कुछ अन्य समुदाय के विषय में बेहतर विशेषज्ञता है तो आप बेझिझक पलायन कर सकते हैं।

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

प्रश्नों की एक जोड़ी है कि मैं सबसे अधिक कठिनाइयों के साथ है:

  • बीज - हमें उनकी आवश्यकता क्यों है?
  • रिवर्स भेदभाव नियम - मुझे पता है कि आगे भेदभाव कैसे करना है, लेकिन हम कैसे पिछड़ जाते हैं? से उदाहरण में उदाहरण के लिए इस खंड , हम कैसे है कि जानते हो w2¯=w3¯w1 ?
  • क्या हम केवल प्रतीकों के साथ काम करते हैं या वास्तविक मूल्यों से गुजरते हैं ? में उदाहरण के लिए एक ही उदाहरण हैं, wi और प्रतीकों या मूल्यों?wi¯

"हैंड्स-ऑन मशीन लर्निंग विद स्किकिट-लर्न एंड टेन्सरफ्लो" परिशिष्ट डी मेरी राय में बहुत अच्छी व्याख्या देता है। मेरा यही सुझाव है।
अगस्टिन बाराचाइना

जवाबों:


37

मान लीजिए कि हमारे पास एक्सप्रेशन z=x1x2+sin(x1) और आप डेरिवेटिव d z खोजना चाहते हैंdzdx1 औरdzdx2 । रिवर्स-मोड AD इस कार्य को 2 भागों में विभाजित करता है, अर्थात्, आगे और रिवर्स पास।

अग्रवर्ती पारण

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

w1=x1
w2=x2
w3=w1w2
w4=sin(w1)
w5=w3+w4
z=w5

इस प्रतिनिधित्व का लाभ यह है कि प्रत्येक अलग अभिव्यक्ति के लिए भेदभाव नियम पहले से ही ज्ञात हैं। उदाहरण के लिए, हम जानते हैं कि व्युत्पन्न sin है cos , और इसलिए w4w1=क्योंकि(w1)। हम नीचे दिए गए पास में इस तथ्य का उपयोग करेंगे।

अनिवार्य रूप से, फॉरवर्ड पास में इनमें से प्रत्येक भाव का मूल्यांकन करना और परिणामों को सहेजना शामिल है। कहें, हमारे इनपुट हैं: एक्स1=2 और एक्स2=3 । तो हमारे पास हैं:

w1=एक्स1=2
w2=एक्स2=3
w3=w1w2=6
w4=पाप(w1) =0.9
w5=w3+w4=6.9
z=w5=6.9

रिवर्स पास

यह जादू की शुरुआत है, और यह श्रृंखला के नियम से शुरू होता है । अपने मूल रूप में, चेन नियम कहता है कि यदि आपके पास वेरिएबल टी(यू(v)) जो यू पर निर्भर करता है , जो अपनी बारी में, v पर निर्भर करता है , तो:

टीv=टीयूयूv

या, यदि टी पर निर्भर करता है v कई रास्ते / चर के माध्यम से यूमैं , जैसे:

यू1=(v)
यू2=जी(v)
टी=(यू1,यू2)

तब ( यहां प्रमाण देखें ):

टीv=Σमैंटीयूमैंयूमैंv

अभिव्यक्ति ग्राफ के संदर्भ में, हम एक अंतिम नोड अगर z और इनपुट नोड्स wमैं से, और पथ z करने के लिए wमैं मध्यवर्ती नोड्स के माध्यम से चला जाता है wपी (यानी z=g(wp) जहां wp=f(wi) ), हम व्युत्पन्न d z पा सकते हैंdzdwi as

dzdwi=pparents(i)dzdwpdwpdwi

दूसरे शब्दों में, उत्पादन चर के व्युत्पन्न गणना करने के लिए z किसी भी मध्यवर्ती या इनपुट चर wrt wi , हम केवल अपने माता-पिता के डेरिवेटिव और सूत्र आदिम अभिव्यक्ति के व्युत्पन्न गणना करने के लिए पता करने की जरूरत wp=f(wi)

अंत में रिवर्स पास शुरू होता है (यानी dzdz ) और सभी निर्भरताओं के लिए पिछड़ों का प्रचार करता है। यहां हमारे पास ("बीज" के लिए अभिव्यक्ति):

dzdz=1

यही कारण है कि "में परिवर्तन के रूप में पढ़ा जा सकता है z वास्तव में एक ही परिवर्तन में परिणाम z " है, जो काफी स्पष्ट है।

तब हम जानते हैं कि z=w5 और इसी तरह:

dzdw5=1

w5 रैखिक पर निर्भर करता हैw3 औरw4 , इसलिएdw5dw3=1औरdw5dw4=1। श्रृंखला नियम का उपयोग करके हम पाते हैं:

dzdw3=dzdw5dw5dw3=1×1=1
dzw4=zw5w5w4=1×1=1

परिभाषा w3=w1w2 और आंशिक व्युत्पन्न के नियमों से, हम पाते हैं कि w3w2=w1। इस प्रकार:

zw2=zw3w3w2=1×w1=w1

जो, जैसा कि हम पहले से ही आगे पास से जानते हैं, वह है:

zw2=w1=2

अंत में, w1 में योगदान z के माध्यम से w3 और w4 । एक बार फिर, आंशिक डेरिवेटिव के नियमों से हम जानते हैं कि w3w1=w2औरw4w1=क्योंकि(w1)। इस प्रकार:

zw1=zw3w3w1+zw4w4w1=w2+क्योंकि(w1)

और फिर, ज्ञात इनपुट्स देकर, हम इसकी गणना कर सकते हैं:

zw1=w2+क्योंकि(w1)=3+क्योंकि(2) =2.58

के बाद से w1 और w2 के लिए सिर्फ उपनाम हैं एक्स1 और एक्स2 , हम अपने जवाब मिल:

zएक्स1=2.58
zएक्स2=2

और बस!


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

  1. डेरिवेटिव्स में इनपुट्स या आउटपुट की तुलना में बहुत अधिक आयामीता हो सकती है, उदाहरण के लिए, वेक्टर wrt वेक्टर का व्युत्पन्न एक मैट्रिक्स है और मैट्रिक्स wrt मैट्रिक्स का व्युत्पन्न एक 4-आयामी सरणी (कभी-कभी टेंसर के रूप में संदर्भित) है। कई मामलों में इस तरह के डेरिवेटिव बहुत कम हैं।
  2. आउटपुट ऐरे में प्रत्येक घटक इनपुट ऐर (एस) के 1 या अधिक घटकों का एक स्वतंत्र कार्य है। उदाहरण के लिए यदि y=(एक्स) और दोनों एक्स और y वैक्टर, कर रहे हैं yमैंyjएक्सकश्मीरyमैंएक्सjyमैंएक्सj

zw1=w2+क्योंकि(w1)=एक्स2+क्योंकि(एक्स1)


1
बहुत उपयोगी सवाल / जवाब। धन्यवाद। बस एक मुकम्मल आलोचना: आप बिना समझाए एक पेड़ की संरचना पर चले जाते हैं (यह तब है जब आप माता-पिता आदि के बारे में बात करना शुरू करते हैं)
MadHatter

1
यह भी स्पष्ट नहीं होगा कि हमें बीज की आवश्यकता क्यों है।
मदहोश

zz=1

धन्यवाद! मैंने देखा कि जब आपको एक से अधिक "बीज" सेट करने होते हैं, तो आम तौर पर एक 1 चुनता है और 0. मैं जानना चाहता हूं कि क्यों। मेरा मतलब है, एक खुद को एक अंतर लेखन के "भागफल" लेता है, इसलिए "1" कम से कम सहज ज्ञान युक्त न्यायसंगत है .. लेकिन 0 से क्या? और क्या होगा अगर किसी को 2 से अधिक बीज लेने हैं?
मध्याह्न

1
जहाँ तक मैं समझता हूँ, एक से अधिक बीजों का उपयोग केवल फॉरवर्ड-मोड AD में किया जाता है। इस मामले में आप बीज को 1 के लिए एक इनपुट चर के लिए सेट करते हैं जिसे आप सम्मान के साथ अलग करना चाहते हैं और बीज को अन्य सभी इनपुट चर के लिए 0 पर सेट करें ताकि वे आउटपुट मूल्य में योगदान न करें। रिवर्स-मोड में आप बीज को आउटपुट चर में सेट करते हैं , और आपके पास सामान्य रूप से केवल एक आउटपुट चर होता है। मुझे लगता है, आप कई आउटपुट चर के साथ रिवर्स-मोड एडी पाइपलाइन का निर्माण कर सकते हैं और उनमें से सभी को सेट कर सकते हैं, लेकिन आगे के मोड के समान प्रभाव प्राप्त करने के लिए 0 से 0, लेकिन मैंने कभी इस विकल्प की जांच नहीं की है।
ffriend
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.