घातीय क्षय के साथ एडम अनुकूलक


53

अधिकांश टेनसफ़्लो कोड में मैंने देखा है कि एडम ऑप्टिमाइज़र का उपयोग 1e-4(यानी 0.0001) के निरंतर सीखने की दर के साथ किया जाता है । कोड आमतौर पर निम्नलिखित दिखता है:

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

मैं सोच रहा हूँ, क्या यह एडाम ऑप्टिमाइज़र का उपयोग करते समय घातीय क्षय का उपयोग करने के लिए उपयोगी है, अर्थात निम्नलिखित कोड का उपयोग करें:

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

आमतौर पर, लोग कुछ प्रकार के सीखने की दर में गिरावट का उपयोग करते हैं, एडम के लिए यह असामान्य लगता है। क्या इसका कोई सैद्धांतिक कारण है? क्या एडम ऑप्टिमाइज़र को क्षय के साथ जोड़ना उपयोगी हो सकता है?


आपको प्रत्येक पुनरावृत्ति के साथ अद्यतन करने के लिए चरण चर कैसे मिलता है?
पेरोहुंटर

@perrohunter: के global_stepपैरामीटर का उपयोग करें minimize। संपादित देखें।
चार्ल्स स्टैट्स

9
नोट: 1e-4= 0.0001, नहीं 0.0004
एबी एबी

मैं आपको "global_step = step" असाइन करता हूं, लेकिन मैं नहीं देखता कि "चरण" चर को कैसे अपडेट किया जा रहा है ... क्या आप कृपया स्पष्ट कर सकते हैं?
डिएगो

@Diego: देर से जवाब लेकिन: यह Global_step पैरामीटर के रूप में छोटा करने के लिए चरण चर को पार कर रहा है, जिससे न्यूनतम फ़ंक्शन Global_step पैरामीटर को बढ़ाता है जिसे हर बार न्यूनतम कहा जाता है। न्यूनतम के लिए प्रलेखन देखें। ध्यान दें कि इसका मतलब यह है कि मिनी-बैच करते समय, प्रत्येक मिनी-बैच के लिए चरण चर को अपडेट किया जाता है, न कि केवल प्रत्येक युग के लिए।
डिंमोल

जवाबों:


37

अनुभवजन्य रूप से बोलना: निश्चित रूप से इसे आज़माएं, आपको कुछ बहुत उपयोगी प्रशिक्षण उत्तराधिकार मिल सकते हैं, जिस स्थिति में, कृपया शेयर करें!

आमतौर पर लोग कुछ प्रकार के क्षय का उपयोग करते हैं, एडम के लिए यह असामान्य लगता है। क्या इसका कोई सैद्धांतिक कारण है? क्या एडम ऑप्टिमाइज़र को क्षय के साथ जोड़ना उपयोगी हो सकता है?

मैंने पर्याप्त लोगों के कोड को ADAM ऑप्टिमाइज़र का उपयोग करके यह कहने के लिए नहीं देखा है कि यह सच है या नहीं। यदि यह सच है, तो शायद इसलिए क्योंकि ADAM अपेक्षाकृत नया है और सीखने की दर में गिरावट "सर्वोत्तम प्रथाओं" को अभी तक स्थापित नहीं किया गया है।

मैं इस बात पर ध्यान देना चाहता हूं कि सीखने की दर में गिरावट वास्तव में ADAM के लिए सैद्धांतिक गारंटी का हिस्सा है। विशेष रूप से उनके आईसीएलआर लेख के प्रमेय 4.1 में , उनकी परिकल्पना में से एक यह है कि सीखने की दर में एक वर्गमूल है,αटी=α/टी

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


12

अधिकांश लोग आदम के साथ सीखने की दर क्षय का उपयोग नहीं करते हैं, यही कारण है कि एल्गोरिथ्म स्वयं सीखने की दर को निम्न प्रकार से करता है:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

जहां t0शुरुआती टाइमस्टेप है, और lr_tनई सीखने की दर का उपयोग किया जाता है।


4
मुझे यकीन नहीं है कि यह मामला है। कारक का sqrt(1 - beta2^t) / (1 - beta1^t)क्षय नहीं होता है। यह पहले और दूसरे पल के अनुमानों के आरंभ के लिए क्षतिपूर्ति करता है।
थाइज

25
यह उत्तर गलत है। यह कारक 1.0 तक पहुंचता है क्योंकि t अनंत तक जाता है। साइड नोट: learn_rate यहाँ निश्चित है । यह समय टी -1 पर सीखने की दर नहीं है।
13:11 बजे rd11

8

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

धारा 4 में अंतिम पंक्ति: दीप लर्निंग एक्सपेरिमेंट्स कहते हैं

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

अंतिम लेकिन कम से कम, कागज से पता चलता है कि हम SGD का उपयोग करते हैं।


2

मैं @ एअर इंडिया की राय से सहमत हूं, यहां मैं कुछ अन्य जानकारी प्रदान करता हूं:

से CS231n :

... इन विधियों में से कई को अभी भी अन्य हाइपरपैरेट सेटिंग्स की आवश्यकता हो सकती है, लेकिन तर्क यह है कि वे कच्चे सीखने की दर की तुलना में हाइपरपरमीटर मानों की व्यापक श्रेणी के लिए अच्छी तरह से व्यवहार करते हैं। ...

और इसके अलावा कंप्यूटर विजन धारा 8 के लिए इंसेप्शन आर्किटेक्चर को पुनर्जीवित करने वाले पेपर से :

... जबकि हमारे सबसे अच्छे मॉडल 0.9 और ε = 1.0 के de- cay के साथ RMSProp [21] का उपयोग करके हासिल किए गए थे। हमने 0.045 की सीखने की दर का उपयोग किया, 0.94 की घातीय दर का उपयोग करके प्रत्येक दो युगों का क्षय किया। ...


2

मैंने एक डेटासेट को वास्तविक आसान डेटा के साथ प्रशिक्षित किया, अगर किसी व्यक्ति को वसा या नहीं माना जाता है, तो ऊंचाई और वजन - डेटा की गणना करने वाला बीएमआई, और यदि 27 से अधिक व्यक्ति वसा है। बहुत आसान बुनियादी डेटा। जब आदम को ऑप्टिमाइज़र के रूप में उपयोग किया जाता है, और 0.001 पर सीखने की दर होती है, तो सटीकता मुझे केवल 5% के लिए 85% के आसपास मिलेगी, अधिकतम 100% परीक्षण के साथ अधिकतम 90% पर।

लेकिन जब शायद 85% पर फिर से लोड हो रहा है, और 0.0001 सीखने की दर कर रहा है, तो सटीकता 3 एपिसोड से अधिक 95% हो जाएगी, और 10 और एपिसोड यह लगभग 98-99% है। यह सुनिश्चित नहीं है कि यदि सीखने की दर 4 अंक 0.0001 से नीचे जा सकती है, लेकिन मॉडल को फिर से लोड करने और 0.00001 का उपयोग करते समय, उपचारात्मक 99.20 के आसपास मंडराना होगा - 100% और अभ्यस्त नीचे। फिर, निश्चित नहीं है कि क्या सीखने की दर 0 मानी जाएगी, लेकिन वैसे भी, यही मुझे मिला है ...

यह सब gradorical_crossentropy का उपयोग करता है, लेकिन mean_square इसे 99-100% तक प्राप्त करता है और यह विधि भी करता है। AdaDelta, AdaGrad, Nesterov 65% से अधिक सटीकता नहीं पा सके, सिर्फ एक नोट के लिए।


0

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

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