5

यह स्टैक ओवरफ्लो के लिए मेरी पहली पोस्ट है, इसलिए यदि यह सही क्षेत्र नहीं है तो मैं क्षमा चाहता हूं। मैं एल 1-नियमित प्रणाली को कम करने पर काम कर रहा हूं।एल 1-नियमित प्रणाली का न्यूनतमकरण, न्यूनतम स्थान पर कनवर्ट करना?

यह सप्ताहांत ऑप्टिमाइज़ेशन में मेरा पहला गोता है, मेरे पास मूल रैखिक प्रणाली वाई = एक्स * बी है, एक्स एक एन-बाय-पी मैट्रिक्स है, बी मॉडल गुणांक का पी-बाय -1 वेक्टर है और वाई है एक एन-बाय -1 आउटपुट वेक्टर।

मैं मॉडल गुणांक खोजने की कोशिश कर रहा हूं, मैंने दोनों ग्रेडियेंट वंश को लागू किया है और एल 1 नियमित प्रणाली को कम करने के लिए मूल एल्गोरिदम समन्वयित किया है। मेरे चरण आकार को खोजने के लिए मैं बैकट्रैकिंग एल्गोरिदम का उपयोग कर रहा हूं, मैं ग्रेडियेंट के मानक -2 को देखकर एल्गोरिदम को समाप्त कर देता हूं और शून्य को 'पर्याप्त बंद' कर देता हूं (अब के लिए मैं 0.001 का उपयोग कर रहा हूं)।

जो फ़ंक्शन मैं कम करने की कोशिश कर रहा हूं वह निम्नलिखित है (0.5) * (मानक ((वाई - एक्स * बी), 2)^2) + लैम्ब्डा * मानक (बी, 1)। (नोट: मानदंड (वाई, 2) का मतलब है कि वेक्टर वाई के मानक-2 मान हैं) मेरा एक्स मैट्रिक्स 150-बाय -5 है और यह स्पैस नहीं है।

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

यदि मैं लैम्ब्डा को बढ़ाने के लिए शुरू करता हूं तो मेरे मॉडल गुणांक शून्य की तरफ बढ़ते हैं, यह वही है जो मैं उम्मीद करता हूं, मेरे एल्गोरिदम कभी समाप्त नहीं होते हैं क्योंकि ढाल के मानक -2 हमेशा सकारात्मक संख्या होते हैं। उदाहरण के लिए, 1000 का एक लैम्ब्डा मुझे 10^(- 1 9) रेंज में गुणांक प्रदान करेगा लेकिन मेरे ढाल के मानक 2 ~ 1.5 है, यह कई हजार पुनरावृत्तियों के बाद है, जबकि मेरे ढाल मूल्य सभी 0 से 1 में एकत्रित होते हैं रेंज, मेरा कदम आकार बेहद छोटा हो जाता है (10^(- 37) रेंज)। अगर मैंने एल्गोरिदम को लंबे समय तक चलने दिया है तो स्थिति में सुधार नहीं होता है, ऐसा लगता है कि यह किसी भी तरह से अटक गया है।

मेरे ढाल और समन्वय दोनों मूल एल्गोरिदम एक ही बिंदु पर अभिसरण करते हैं और समाप्ति की स्थिति के लिए समान मानदंड (ढाल) संख्या देते हैं। वे 0 के लैम्ब्डा के साथ भी बहुत अच्छी तरह से काम करते हैं। अगर मैं बहुत छोटा लैम्ब्डा (0.001 कहता हूं) का उपयोग करता हूं तो मुझे अभिसरण मिलता है, 0.1 की लम्बाडा दिखती है जैसे कि मैं इसे एक या दो घंटे तक चलाता हूं, एक भेड़ का बच्चा बड़ा होता है और अभिसरण दर इतनी छोटी है कि यह बेकार है।

मेरे पास कुछ प्रश्न थे जो मुझे लगता है कि समस्या से संबंधित हो सकता है?

ढाल की गणना में मैं 10^(- 5) के एच के साथ एक सीमित अंतर विधि (एफ (एक्स + एच) - एफ (एक्स-एच))/(2 एच)) का उपयोग कर रहा हूं। एच के इस मूल्य पर कोई विचार?

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

मेरा आखिरी विचार यह था कि शायद अभिसरण की दर को देखकर, मुझे अभिसरण की दर को देखकर, अलग-अलग समाप्ति विधि का उपयोग करना चाहिए, अगर अभिसरण दर बेहद धीमी हो जाती है तो समाप्त हो जाती है। क्या यह एक आम समाप्ति विधि है?

+3

मैं सुझाव नहीं दे रहा हूं कि यह स्टैक ओवरफ्लो के लिए ऑफटॉप है, लेकिन यह http://scicomp.stackexchange.com/ – NPE

+0

@tmyklebu के लिए भी बेहतर फिट हो सकता है: शायद प्रोग्रामर.स्टैकएक्सchange.com के लिए बेहतर फिट है। –

उत्तर

7

1-मानदंड अलग-अलग नहीं है। यह कई चीजों के साथ मौलिक समस्याओं का कारण बनता है, विशेष रूप से आपके द्वारा चुने गए समाप्ति परीक्षण; ढाल आपके न्यूनतम के आसपास भारी रूप से बदल जाएगा और माप शून्य के एक सेट पर मौजूद होने में विफल रहता है।

आपके द्वारा वास्तव में इच्छित समाप्ति परीक्षण "subgradient में बहुत छोटा वेक्टर है" के आधार पर होगा।

|| एक्स-बी || _2^2 + लैम्ब्डा || x || _1 के उपगमन में सबसे कम वेक्टर ढूंढना काफी आसान है।चुनें, बुद्धिमानी, एक सहिष्णुता eps और निम्न चरणों कार्य करें:

  1. कंप्यूट v = grad(||Ax-b||_2^2).

  2. तो x[i] < -eps, तो v[i] से लैम्ब्डा घटाना। यदि x[i] > eps, तो v[i] पर लैम्ब्डा जोड़ें। यदि -eps <= x[i] <= eps, तो [-lambda, lambda] में v[i] पर संख्या जोड़ें जो v[i] को कम करता है।

आप ग्रेडिंग के रूप में v का इलाज करते हुए यहां अपना समापन परीक्षण कर सकते हैं। जब आप अपना अगला पुनरावर्तक कहां होना चाहिए, तो मैं ढाल के लिए v का उपयोग करने की भी सिफारिश करता हूं।

संबंधित मुद्दे