एक तंत्रिका नेटवर्क के साथ क्रमबद्ध करें


15

पिछली तंत्रिका शुद्ध गोल्फिंग चुनौतियां ( यह और वह ) मुझे एक नई चुनौती देने के लिए प्रेरित करती हैं:

चुनौती

सबसे छोटा फीडफॉर्वर्ड न्यूरल नेटवर्क खोजें, जिसमें किसी भी 4-आयामी इनपुट वेक्टर (a,b,c,d) को पूर्णांक प्रविष्टियों के साथ [10,10] , नेटवर्क आउटपुट sort(a,b,c,d) साथ एक समन्वय-वार त्रुटि 0.5 से छोटी है ।

स्वीकार्यता

इस चुनौती के लिए, एक फीडफॉरवर्ड न्यूरल नेटवर्क को परतों की संरचना के रूप में परिभाषित किया गया है । एक परत एक समारोह है L:RnRm कि एक मैट्रिक्स द्वारा निर्दिष्ट किया जाता ARm×n के वजन , एक वेक्टर bRm के पूर्वाग्रहों , और एक सक्रियण समारोह f:RR coordinate- लागू किया जाता है कि बुद्धिमान:

L(x):=f(Ax+b),xRn.

चूंकि सक्रियण कार्यों को किसी भी कार्य के लिए ट्यून किया जा सकता है, इसलिए हमें इस चुनौती को दिलचस्प बनाए रखने के लिए सक्रियण कार्यों के वर्ग को प्रतिबंधित करना होगा। निम्नलिखित सक्रियण कार्यों की अनुमति है:

  • पहचान। f(t)=t

  • Relu। f(t)=max(t,0)

  • Softplus। f(t)=ln(et+1)

  • अतिशयोक्तिपूर्ण स्पर्शज्या। f(t)=tanh(t)

  • अवग्रह। f(t)=etet+1

कुल मिलाकर, एक स्वीकार्य तंत्रिका शुद्ध रूप ले लेता है LkLk1L2L1 कुछ के लिए k , जहां प्रत्येक परत Li वजन द्वारा निर्दिष्ट किया जाता Ai , पूर्वाग्रहों bi , और एक सक्रियण समारोह fi उपरोक्त सूची से उदाहरण के लिए, निम्न तंत्रिका जाल स्वीकार्य है (जबकि यह इस चुनौती के प्रदर्शन लक्ष्य को पूरा नहीं करता है, यह एक उपयोगी गैजेट हो सकता है):

[min(a,b)max(a,b)]=[111212111212]ReLU[121212121111][ab]

यह उदाहरण दो परतों को प्रदर्शित करता है। दोनों परतों में शून्य पूर्वाग्रह हैं। पहली परत ReLU सक्रियण का उपयोग करती है, जबकि दूसरी पहचान सक्रियण का उपयोग करती है।

स्कोरिंग

आपका स्कोर नोनज़रो वेट और बायसेस की कुल संख्या है ।

(उदाहरण के लिए, ऊपर दिए गए उदाहरण में 16 का स्कोर है क्योंकि पूर्वाग्रह वैक्टर शून्य हैं।)


2
@ क्लोज-वोटर: क्या बिल्कुल अस्पष्ट है? मुझे नहीं लगता कि पिछली NN चुनौतियों में से कोई भी इतनी अच्छी तरह से निर्दिष्ट थी।
दोष

1
नहीं - स्किप कनेक्शन की अनुमति नहीं है।
डस्टिन जी। मिक्सॉन

1
@ DustinG.Mixon मुझे वास्तव में अधिकतम / मिनट के लिए एक दृष्टिकोण मिला जो केवल 16 के बजाय 15 वज़न का उपयोग करता है, लेकिन यह काफी कम सुरुचिपूर्ण है :)
दोष

3
यह एक अच्छी तरह से निर्दिष्ट चुनौती है जो मुझे लगता है कि भविष्य के तंत्रिका-नेटवर्क चुनौतियों के लिए एक मॉडल के रूप में काम कर सकता है।
23

1
मुझे व्यक्तिगत रूप से बिना लंघन कनेक्शन के अनुकूलन करना मुश्किल लगता है। ऐसा इसलिए है क्योंकि इनपुट के लिए पर्याप्त संख्या के आउटपुट नंबर के लिए एक छँटाई एनएन आवश्यक है। इसलिए परतों के पार इनपुट को 'याद रखना' / 'पुन: बनाना' आवश्यक लगता है। मैं यह नहीं देखता कि को शामिल करने के बाद आसानी से कैसे किया जा सकता है क्योंकि सक्रियण के रूप में उन कार्यों के कोई व्युत्क्रम की अनुमति नहीं है। इसलिए हम केवल उन रेएलयू के साथ रह गए हैं जिनके लिए आधारभूत (मामूली सुधार के साथ दोष के जवाब में दिखाया गया है) पहले से ही इष्टतम है। et
जोएल

जवाबों:


13

ऑक्टेव , 96 88 87 84 76 54 50 वज़न और पूर्वाग्रह

यह 6-लेयर न्यूरल नेट अनिवार्य रूप से एक 3-चरण सॉर्टिंग नेटवर्क है जो एक घटक के रूप में एक बहुत ही सरल min/ maxनेटवर्क से बनाया गया है । यह मूल रूप से विकिपीडिया से उदाहरण नेटवर्क है जैसा कि नीचे दिखाया गया है, एक छोटे से संशोधन के साथ: पहले दो तुलनाएं समानांतर में की जाती हैं। ReLU हालांकि नकारात्मक संख्याओं को बायपास करने के लिए, हम सिर्फ 100 पहले जोड़ते हैं, और फिर अंत में 100 फिर से घटाते हैं।

तो यह सिर्फ एक आधारभूत माना जाना चाहिए क्योंकि यह एक भोली कार्यान्वयन है। हालांकि यह सभी संभव संख्याओं को क्रमबद्ध करता है जिनमें पूरी तरह से बहुत बड़ा परिमाण नहीं होता है। (हम 100 को दूसरी संख्या से बदलकर सीमा को समायोजित कर सकते हैं।)

इसे ऑनलाइन आज़माएं!

अधिकतम / मिनट घटक

वहाँ एक बहुत कम सुंदर तरीका है ( अब और अधिक सुंदर तरीका है, धन्यवाद @xnor!) कम से कम और अधिकतम दो संख्याओं को खोजने के लिए दो मापदंडों का उपयोग करने का तरीका:

min=aReLU(ab)max=b+ReLयू(-)

इसका मतलब है कि हमें बहुत कम वजन और पक्षपात का उपयोग करना होगा।

@Joel को इंगित करने के लिए धन्यवाद कि यह पहले चरण में सभी नंबरों को सकारात्मक बनाने के लिए पर्याप्त है और इसे पिछले एक में उलट कर दिया गया है, जो -8 वजन बनाता है। धन्यवाद @xnor एक भी कम अधिकतम / मिनट विधि जो -22 वजन बनाता है इंगित करने के लिए! धन्यवाद @ DustinG.Mixon ने कुछ मैट्रीज़ के संयोजन के टिप के लिए, जिसके परिणामस्वरूप अन्य -4 वज़न हो गए!

function z = net(u)
a1 = [100;100;0;100;100;0];
A1 = [1 0 0 0;0 0 1 0;1 0 -1 0;0 1 0 0;0 0 0 1;0 1 0 -1];
B1 = [1 0 -1 0 0 0;0 0 0 1 0 -1;0 1 1 0 0 0;0 0 0 0 1 1];
A2 = [1 0 0 0;0 1 0 0;1 -1 0 0;0 0 1 0;0 0 0 1;0 0 1 -1];
A3 = [1 0 -1 0 0 0;0 1 1 0 0 0;0 0 0 1 0 -1;0 1 1 -1 0 1;0 0 0 0 1 1];
B3 = [1 0 0 0 0;0 1 0 -1 0;0 0 1 1 0;0 0 0 0 1];
b3 = -[100;100;100;100];
relu = @(x)x .* (x>0);
id = @(x)x;
v = relu(A1 * u + a1);
w = id(B1 * v) ;
x = relu(A2 * w);
y = relu(A3 * x);
z = id(B3 * y + b3);
% disp(nnz(a1)+nnz(A1)+nnz(B1)+nnz(A2)+nnz(A3)+nnz(B3)+nnz(b3)); %uncomment to count the total number of weights
end

इसे ऑनलाइन आज़माएं!


1
निरंतर ऑफसेट मूल रूप से इनपुट को गैर-नकारात्मक बनाने के लिए उपयोग किया जाता है। एक बार पहली परत में किए जाने के बाद, तुलना ब्लॉकों के सभी मध्यवर्ती आउटपुट गैर-नकारात्मक होते हैं और इसे केवल अंतिम परत में वापस बदलने के लिए पर्याप्त होता है।
जोएल

1
क्या आपको छोटा न्यूनतम-अधिकतम गैजेट मिल सकता है (a - relu(a-b), b + relu(a-b))?
xnor

@ ओज़ल ओह अब मैं देख रहा हूं, इससे बहुत समझदारी है :)
दोष

@xnor बहुत बहुत धन्यवाद जो एक बड़ा अंतर बनाता है !!!!
दोष

1
अपरंपरागत नाइटिक: पहले पूर्वाग्रह के लिए स्कोर nnz (A1 * a0) है, nnz (a0) नहीं। (या फिर हमें एक पहचान मैट्रिक्स की कीमत का भुगतान करना होगा।) इस मामले में ये संख्या समान हैं।
डस्टिन जी। मिक्सॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.