2012-02-22 11 views
10

मैं अपने तंत्रिका नेटवर्क को प्रशिक्षित करने के लिए आर में नेट नेट फ़ंक्शन का उपयोग कर रहा हूं। मुझे नेट में डीके पैरामीटर नहीं मिल रहा है? क्या इस चरण का आकार ग्रेडियेंट वंश मेसोड या नियमितकरण पैरामीटर में उपयोग किया जा रहा है ताकि ओवरफिटिंग को दूर किया जा सके?आर में नेट फ़ंक्शन में क्षय पैरामीटर का उद्देश्य?

उत्तर

7

यह ओवर-फिटिंग से बचने के लिए नियमितकरण है।

the documentation (pdf) से

: वजन क्षय के लिए

decay: पैरामीटर। डिफ़ॉल्ट 0.

अधिक जानकारी लेखकों की पुस्तक में उपलब्ध है, Modern Applied Statistics with S. Fourth Edition, पेज 245:

एक तरीका यह सुनिश्चित करना है कि च चिकनी है, उदाहरण के लिए, अनुमान के वर्ग प्रतिबंधित करने के लिए है द्वारा सीमित संख्या में स्पलीन नॉट्स का उपयोग करना। एक और तरीका है नियमितीकरण जिसमें फिट कसौटी च की 'खुरदरापन' पर एक दंड सी के साथ

E + λC(f)

करने के लिए परिवर्तित किया जाता है। वजन क्षय, तंत्रिका नेटवर्क के लिए विशिष्टता, वजन के वर्गों के योग के दंड के रूप में उपयोग करता है। ... वज़न क्षय का उपयोग अनुकूलन प्रक्रिया में मदद करने के लिए और से अधिक से बचने के लिए लगता है। (जोर जोड़ा)

+1

यदि यह सत्य था, तो क्षय = 0 सेटिंग को एक ओवरफिट मॉडल (सर्वोत्तम संभव प्रशिक्षण सेट सटीकता के साथ) के परिणामस्वरूप होना चाहिए। इसके बजाय मेरे मामले में, मुझे एक बहुत ही खराब प्रशिक्षण सेट सटीकता (लगभग 10%) मिली। क्षय देना = 1e-4 -> .8294, क्षय = 2e-4 -> .8832, 5e-3 -> .9924, 1e-2 -> .9954, 1e-1 -> .9966, 1 -> .9644 ।तो मैं ऑप्टिमाइज़ेशन फ़ंक्शन –

+0

की सीखने की दर को कम करने के लिए एक पैरामीटर होना चाहिए यदि आप वास्तव में सुनिश्चित करना चाहते हैं, तो आप [स्रोत पर] देख सकते हैं (http://cran.r-project.org/src/contrib /nnet_7.3-1.tar.gz)। पूरी बात 700 लाइनों से कम है, और समझदारी की ओर एक स्पष्ट आंख के साथ। मैं हाल ही में न्यूरल जाल में आसानी से इसका पालन करने के लिए पर्याप्त नहीं रहा हूं, लेकिन शायद आपको यह आसान लगेगा। – blahdiblah

+0

http://stats.stackexchange.com/questions/29130/difference-between-neural-net-weight-decay-and-learning-rate – Fernando

2

स्रोत कोड को देखकर blahdiblah के जवाब पूरक मुझे लगता है कि पैरामीटर weightsबैक-प्रसार की शिक्षा दर से मेल खाती है (मैनुअल पढ़कर मैं नहीं समझ सकता है कि यह क्या था)। , फ़ाइल nnet.c, लाइन को देखो समारोह अंदर fpass: यहाँ,

TotalError += wx * E(Outputs[i], goal[i - FirstOutput]); 

एक बहुत ही सहज ज्ञान युक्त नामकरण में, Eबीपी त्रुटि से मेल खाती है और wx एक पैरामीटर पारित कर दिया है फ़ंक्शन के लिए, जो अंततः पहचानकर्ता Weights[i] से मेल खाता है।

इसके अलावा, आप यह सुनिश्चित करें कि पैरामीटर decay वास्तव में क्या यह लाइनों 317 ~ 319 एक ही फ़ाइल के पर जाकर होने का दावा करता VR_dfunc है, समारोह अंदर हो सकता है:

for (i = 0; i < Nweights; i++) 
    sum1 += Decay[i] * p[i] * p[i]; 
*fp = TotalError + sum1; 

जहां p कनेक्शन 'वजन के अनुरूप है, जो वजन-क्षय नियमितकरण की सटीक परिभाषा है।

+0

आपके सहायक उत्तर के लिए धन्यवाद। मैं नेट के व्यवहार की नकल करने के लिए केरास में अनुक्रमिक मॉडल स्थापित करने की कोशिश कर रहा हूं लेकिन वे मेल नहीं खाते हैं। एनएनईटी में "क्षय" तर्क केरास में एल 2 नियमितकरण पैरामीटर के बराबर लगता है, लेकिन nnet.c में से कुछ कोड भ्रमित है। पहला सवाल: "क्षय" क्यों अनुक्रमित है? क्या यह सिर्फ एक निश्चित मूल्य नहीं है जो वर्ग के वजन के योग को गुणा करने के लिए उपयोग किया जाता है? दूसरा प्रश्न: "ढलान" वस्तु क्या है और इसे "क्षय" से गुणा क्यों किया जाता है? तीसरा सवाल: क्या क्षय सभी वजन या इनपुट और छिपी हुई परत के बीच कनेक्शन पर लागू होता है? – Josh

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

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