सही अनुकूलन एल्गोरिदम कैसे चुनें?


16

मुझे एक फ़ंक्शन का न्यूनतम पता लगाने की आवश्यकता है। Http://docs.scipy.org/doc/scipy/reference/optimize.html पर डॉक्स पढ़ने से मुझे लगता है कि कई एल्गोरिदम हैं जो एक ही काम करते हैं, यानी न्यूनतम पाते हैं। मुझे कैसे पता चलेगा कि मुझे कौन सा चुनना चाहिए?

कुछ एल्गोरिथ्म सूचीबद्ध हैं

  • डाउनहिल सिम्प्लेक्स एल्गोरिथ्म का उपयोग करके एक फ़ंक्शन को छोटा करें।
  • बीएफजीएस एल्गोरिथ्म का उपयोग करके एक फ़ंक्शन को छोटा करें।
  • गैर-संयुग्म ढाल ढाल के साथ एक फ़ंक्शन को छोटा करें।
  • न्यूटन-सीजी विधि का उपयोग करके फ़ंक्शन को छोटा करें।
  • संशोधित पावेल की विधि का उपयोग करके एक फ़ंक्शन को छोटा करें।

मेरा कार्य रैखिक है। आयामीता 232750 के आसपास है (यह है कि मुझे हर बार गणना करने के लिए कितने अलग-अलग ग्रेडिएंट हैं), ग्रेडिएंट और लागत को एक बार गणना करने में लगभग 2 मिनट लगते हैं, इसलिए सस्ता नहीं है। मुझे नहीं लगता कि मेरे पास कोई अड़चन है। यह नियतात्मक और निरंतर है।


वैसे आपको अपनी समस्या की प्रकृति की जांच करनी होगी: यह रैखिक है या नहीं? इसकी आयामीता क्या है? मूल्यांकन करने के लिए आपकी लागत कार्य सस्ता है? क्या आप अपने व्युत्पन्न (ओं) का विश्लेषण विश्लेषणात्मक और / या सस्ते में कर सकते हैं? क्या आपको अड़चनें हैं? यदि आपके पास अड़चनें हैं तो क्या आप अपनी समस्या को आसानी से अप्रतिबंधित होकर लिख सकते हैं? कृपया इन मामलों पर अधिक जानकारी दें।
us --r11852

@ user11852 यह रैखिक है। आयामीता 50 विशेषताओं के आसपास है, यह ढाल और लागत को एक बार गणना करने के लिए लगभग 2 मिनट लगती है, इसलिए सस्ता नहीं है। मुझे नहीं लगता कि मेरे पास कोई अड़चन है।
सियामी

मुझे यकीन नहीं है कि आप "रैखिक" से यहां क्या मतलब है। यदि आपकी समस्या रैखिक है, तो ढाल स्थिर और गणना करने के लिए सस्ता है। यदि आपका उद्देश्य फ़ंक्शन रैखिक है और इसमें अड़चन नहीं है, तो न्यूनतम -infinity (या शायद 0) है।
पाऊल

@ तिराहे: अनुकूलन में रैखिकता आमतौर पर बाधाओं को संदर्भित करती है, न कि कार्य को। मैंने (गलती से दी गई) फ़ंक्शन की चिकनाई के संबंध में "रैखिकता" का उल्लेख किया है और मुझे लगता है कि ओपी ने जो उल्लेख किया है। मेरे जवाब में मैं ज्यादातर इस तथ्य पर आधारित था कि उसने वैसे भी "निरंतर" कहा।
us --r11852

जवाबों:


14

आपने जो कहा, उसके आधार पर: मुझे लगता है कि आपको 50 चर के लिए अनुकूलन करना होगा; मैं यह भी मानता हूं कि आप एक ऐसी स्थिति बना रहे हैं कि यह विश्लेषणात्मक व्युत्पन्न खोजने के लिए बहुत महंगा है (चलो अकेले अंक प्राप्त करें) और यह कि आपका अनुकूलन अप्रतिबंधित है।

मुझे तनाव करने दें, आप 25-30 और 100 चरों के बीच थोड़ा सा अशुभ कारण हैं जब यह बड़े या छोटे पैमाने के अनुकूलन दिनचर्या के बीच चयन करने की बात आती है। हालांकि, कहा कि कुछ भी नहीं खोया है।

यह देखते हुए कि पहला ऑर्डर व्युत्पन्न भी महंगा है कि न्यूटन के तरीके के विचार को मार दिया जाए। यदि आप अपने हेसियन के साथ शुरू करने के लिए की तरह थोड़ा विकर्ण है, तो आप अर्ध-न्यूटन (BFGS) के साथ कुछ भाग्य हो सकता है। सीजी आमतौर पर बीएफजीएस की तुलना में थोड़ा धीमा है, इसलिए संभवत: चीजों में बहुत सुधार नहीं होगा; यदि स्मृति भी एक समस्या है (या बस उस स्थिति में L-BFGS के लिए जाएं) का उपयोग करें। इसके अतिरिक्त यह देखते हुए कि आपके कार्य का मूल्यांकन करना कितना धीमा है, एक साधारण से सरलतम वंश / रेखा खोज एल्गोरिथ्म यातनात्मक रूप से धीमा होगा; यही बातें सिमित एनालाइजिंग और अन्य रैंडम सर्च वेरिएंट के साथ जाती हैं (मेरा मानना ​​है कि आपके पास एचएमसी और उस सभी जैज तक पहुंच नहीं है)।

इसलिए, जब आपको अपने हिरन के लिए सबसे अच्छे बैंग की आवश्यकता होती है, जब यह एकल फ़ंक्शन मूल्यांकन की बात आती है: पॉवेल की विधि के साथ जाएं और COBYIA का भी परीक्षण करें; एक विवश अनुकूलन एल्गोरिथ्म होने के बावजूद क्योंकि यह चीजों को गति देने के लिए आपके फ़ंक्शन के ढाल को आंतरिक रूप से रैखिक करेगा, यह आपके फ़ंक्शन की रैखिकता का लाभ उठाने में सक्षम होगा। इसके अलावा निश्चित रूप से अजगर के लिए NLopt का प्रयास करें । उनके पास बहुत सारे ग्रेडिएंट-फ्री ऑप्टिमाइज़र हैं; UOBYQA का प्रयास करें; यह पावेल के दिमाग की उपज है (द्विघात दृष्टिकोण से असंबंधित अनुकूलन)।

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

मैंने सिम्पलेक्स अल्गोरिथम को उद्देश्य पर छोड़ दिया क्योंकि यह बिल्कुल अलग जानवर है; ग्रेडिएंट्स के साथ ऐसा करने के लिए कुछ भी नहीं। यह कोशिश करो, लेकिन मैं वास्तव में इस पर टिप्पणी नहीं कर सकता; यह वास्तव में आपकी समस्या की प्रकृति पर निर्भर है।

संख्यात्मक अनुकूलन पर पहले अच्छे संदर्भ के लिए अनुकूलन के लिए CTKelly की पुस्तक Iterative Methods आपको काफी दूर, काफी अच्छी तरह से मिल जाएगी।


भविष्य के संदर्भ के लिए: इसी तरह के सवालों के लिए स्टैकएक्सचेंज पर कम्प्यूटेशनल साइंस बीटा की जांच करने में आपकी रुचि हो सकती है।
us --r11852

जवाब के लिए धन्यवाद। दरअसल, मेरी डायमेंशन 232,750 है। यह मेरे द्वारा हर बार गणना करने वाले ग्रेडिएंट की संख्या है। मैं GPU पर फ़ंक्शन मूल्यांकन और ग्रेडिएंट कम्प्यूटेशन करता हूं। कि NLopt के साथ संगत होगा?
सियामी

मैंने GPU पर NLopt का उपयोग नहीं किया है, लेकिन मुझे कोई स्पष्ट कारण नहीं दिखता है कि यह संगतता के बारे में समस्या क्यों होनी चाहिए। मैं अक्सर I / O ऑपरेशन से और GPU तक के मुद्दे पर विचार कर सकता हूं।
us --r11852

@ us @r11852, लीनियर रेगुलेशन कॉस्ट फंक्शन को कम करने के लिए ढाल डिसेंट और क्यूआर अपघटन विधियों की तुलना पर भी चर्चा कर सकते हैं? क्या मुझे एक अलग प्रश्न पूछने की आवश्यकता है?
डॉ। निशा अरोड़ा

@DrNishaArora: हाँ। यह एक अलग प्रश्न के लिए उपयुक्त होगा। कृपया थ्रेड देखें रेखीय प्रतिगमन के लिए ढाल वंश का उपयोग क्यों करें, जब एक बंद-फॉर्म गणित समाधान उपलब्ध हो? सुनिश्चित करने के लिए कि आप दोहराव से बचें!
us --r11852 का कहना है कि

1

शायद आपको अपने आप को संख्यात्मक अनुकूलन के बारे में एक परिचयात्मक पुस्तक मिलनी चाहिए। एल्गोरिथ्म के लिए निर्णय लेने के लिए आपको अपने फ़ंक्शन को ध्यान में रखना होगा।

आपके द्वारा उल्लिखित एल्गोरिदम में, महत्वपूर्ण अंतर यह है कि जैकबियन या हेसियन की आवश्यकता है या केवल फ़ंक्शन ही।

यह देखते हुए कि यह एक आंकड़े क्यू एंड ए साइट है और इस प्रकार यादृच्छिक चर के साथ काम करता है: सुनिश्चित करें कि आपका फ़ंक्शन निर्धारक है इसका मूल्यांकन इस तरह से किया जा सकता है कि खोज स्थान पर निरंतर परिणाम प्राप्त होता है।


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