GradientDescentOptimizer और AdamOptimizer (TensorFlow) के बीच अंतर?


45

मैंने TensorFlow में एक साधारण MLP लिखा है जो XOR-Gate मॉडलिंग कर रहा है ।

के लिए:

input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]

यह निम्नलिखित उत्पादन करना चाहिए:

output_data = [[0.], [1.], [1.], [0.]]

नेटवर्क में एक इनपुट परत, एक छिपी हुई परत और 2, 5 और 1 न्यूरॉन्स के साथ एक आउटपुट परत है।

वर्तमान में मेरे पास निम्नलिखित क्रॉस एंट्रोपी है:

cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))

मैंने इस सरल विकल्प को भी आज़माया है:

cross_entropy = tf.square(n_output - output)

कुछ अन्य प्रयासों के साथ।


हालांकि, कोई बात नहीं क्या मेरी सेटअप था, एक साथ त्रुटि GradientDescentOptimizerको कम किया गया था बहुत धीमी एक से AdamOptimizer

वास्तव में tf.train.AdamOptimizer(0.01)400-800 सीखने चरणों के बाद वास्तव में अच्छा परिणाम का उत्पादन (सीखने दर, जहां की निर्भरता में 0.01, जबकि सबसे अच्छा परिणाम था) tf.train.GradientDescentOptimizerहमेशा 2000 सीखने से अधिक की जरूरत है कोई बात नहीं क्या पार एन्ट्रापी गणना या सीखने दर इस्तेमाल किया गया था कदम दूर है।

ऐसा क्यों है? ऐसा लगता है AdamOptimizerकि हमेशा एक बेहतर विकल्प है ?!


2
एडम ऑप्टिमाइज़र ढाल वंश की तुलना में अधिक परिष्कृत है (यह इस पेपर पर आधारित है )।
मार्क क्लेसेन

जवाबों:


77

tf.train.AdamOptimizerका उपयोग करता है किंगमा और बा के एडम एल्गोरिथ्म सीखने की दर को नियंत्रित करने के लिए। एडम सरल पर कई फायदे प्रदान करता है tf.train.GradientDescentOptimizer। सबसे महत्वपूर्ण यह है कि यह चलती गति (गति) का औसत उपयोग करता है ; बेंगियो इस पेपर के सेक्शन 3.1.1 में क्यों फायदेमंद है, इसके कारणों पर चर्चा करता है । सीधे शब्दों में कहें, यह एडम को एक बड़े प्रभावी कदम आकार का उपयोग करने में सक्षम बनाता है, और एल्गोरिथ्म ठीक ट्यूनिंग के बिना इस चरण के आकार में परिवर्तित होगा।

एल्गोरिथ्म का मुख्य पक्ष यह है कि एडम को प्रत्येक प्रशिक्षण चरण में प्रत्येक पैरामीटर के लिए प्रदर्शन करने के लिए अधिक गणना की आवश्यकता होती है (चलती औसत और विचरण बनाए रखने के लिए, और स्केल ढाल की गणना करें); और प्रत्येक पैरामीटर के लिए बनाए रखने के लिए अधिक राज्य (लगभग प्रत्येक पैरामीटर के लिए औसत और विचरण को संग्रहीत करने के लिए मॉडल का आकार तीन गुना)। एक tf.train.GradientDescentOptimizerसमान रूप से आपके एमएलपी में समान रूप से इस्तेमाल किया जा सकता है, लेकिन इससे पहले कि यह जल्दी से अधिक रूपांतरित हो जाएगा, और अधिक हाइपरपैरेट ट्यूनिंग की आवश्यकता होगी।


5
इस उत्तर के लिए धन्यवाद! क्या आप जोड़ सकते हैं जब आप " हाइपरपैरेट ट्यूनिंग " के बारे में बात करते हैं ?
daniel451

12
शब्दजाल के लिए क्षमा करें! लगभग बोलते हुए, मेरा मतलब था " जब तक यह तेजी से परिवर्तित हो जाता है तब तक learning_rateतर्क को अलग-अलग करना tf.train.GradientDescentOptimizer।" :)
१३
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.