क्या एक तंत्रिका नेटवर्क एक कार्यात्मक और इसके कार्यात्मक व्युत्पन्न सीख सकता है?


11

मैं समझता हूं कि तंत्रिका नेटवर्क (एनएन) को कुछ अनुमानों (नेटवर्क और फ़ंक्शन दोनों पर अनुमानित) के तहत दोनों कार्यों और उनके डेरिवेटिव के लिए सार्वभौमिक सन्निकटन माना जा सकता है। वास्तव में, मैंने सरल, अभी तक गैर-तुच्छ कार्यों (जैसे, बहुपद) पर कई परीक्षण किए हैं, और ऐसा लगता है कि मैं वास्तव में उन्हें और उनके पहले डेरिवेटिव को अच्छी तरह से अनुमानित कर सकता हूं (उदाहरण नीचे दिखाया गया है)।

हालांकि, जो मेरे लिए स्पष्ट नहीं है, वह यह है कि क्या प्रमेय जो ऊपर के विस्तार (या शायद विस्तारित किए जा सकते हैं) को कार्यात्मक और उनके कार्यात्मक व्युत्पन्न तक ले जाते हैं। उदाहरण के लिए, कार्यात्मक: कार्यात्मक व्युत्पन्न: साथ विचार करें। जहां पूरी तरह से निर्भर करता है, और गैर तुच्छ, पर निर्भर करता है । क्या कोई NN उपरोक्त मैपिंग और इसके कार्यात्मक व्युत्पन्न को सीख सकता है? विशेष रूप से, एक discretizes डोमेन यदि से अधिक और प्रदान करता है (discretized बिंदुओं पर) इनपुट और के रूप में

एफ[(एक्स)]=एक्स (एक्स)जी(एक्स)
δएफ[(एक्स)]δ(एक्स)=जी(एक्स)
(एक्स)जी(एक्स)एक्स[,](एक्स)एफ[(एक्स)]आउटपुट के रूप में, क्या कोई NN इस मैपिंग को सही तरीके से (कम से कम सैद्धांतिक रूप से) सीख सकता है? यदि हां, तो क्या यह मैपिंग के कार्यात्मक व्युत्पन्न भी सीख सकता है?

मैंने कई परीक्षण किए हैं, और ऐसा लगता है कि एनएन वास्तव में मैपिंग , कुछ हद तक सीख सकता है । हालांकि, जबकि इस मानचित्रण की सटीकता ठीक है, यह महान नहीं है; और परेशान यह है कि गणना की गई कार्यात्मक व्युत्पन्न पूरी कचरा है (हालांकि ये दोनों प्रशिक्षण, आदि के साथ मुद्दों से संबंधित हो सकते हैं)। एक उदाहरण नीचे दिया गया है।एफ[(एक्स)]

यदि एक NN एक कार्यात्मक और उसके कार्यात्मक व्युत्पन्न सीखने के लिए उपयुक्त नहीं है, तो क्या कोई अन्य मशीन सीखने की विधि है?

उदाहरण:

(1) निम्नलिखित एक फ़ंक्शन और इसके व्युत्पन्न को अनुमानित करने का एक उदाहरण है: A NN को फ़ंक्शन को रेंज [-3,2] पर सीखने के लिए प्रशिक्षित किया गया था : जिसमें से एक उचित लिए सन्निकटन प्राप्त किया जाता है: ध्यान दें कि, जैसा कि अपेक्षित है, प्रशिक्षण बिंदुओं की संख्या के साथ NN सन्निकटन से और इसके पहले व्युत्पन्न सुधार, NN आर्किटेक्चर, जैसा कि बेहतर minima प्रशिक्षण के दौरान पाया जाता है, आदि।(एक्स)=एक्स3+एक्स+0.5d f ( x ) / d x f ( x )समारोह(एक्स)/एक्सकार्य व्युत्पन्न(एक्स)

(2) निम्नलिखित एक कार्यात्मक और इसके कार्यात्मक व्युत्पन्न का अनुमान लगाने का एक उदाहरण है: A NN को कार्यात्मक सीखने के लिए प्रशिक्षित किया गया था । प्रशिक्षण डेटा फॉर्म कार्यों का उपयोग करके प्राप्त किया गया था , जहां और को अनियमित रूप से उत्पन्न किया गया था। निम्नलिखित कथानक बताता है कि NN वास्तव में को लगभग अच्छी तरह से सक्षम करने में सक्षम है : परिकलित कार्यात्मक व्युत्पन्न, हालांकि, पूर्ण कचरा हैं; एक उदाहरण (एक विशिष्ट ) नीचे दिखाया गया है: एक दिलचस्प नोट के रूप में, NN कोएफ[(एक्स)]=12एक्स (एक्स)2(एक्स)=एक्सएफ[(एक्स)]( एक्स ) एफ [ ( एक्स ) ]कार्यात्मक(एक्स)कार्यात्मक व्युत्पन्नएफ[(एक्स)] प्रशिक्षण बिंदुओं की संख्या, आदि में सुधार होता है (उदाहरण के लिए (1)), फिर भी कार्यात्मक व्युत्पन्न नहीं होता है।


दिलचस्प सवाल। आप कार्यात्मक एफ के इनपुट एफ का प्रतिनिधित्व कैसे कर रहे हैं? मुझे लगता है कि एफ को कुछ मानों के सदिश की मात्रा निर्धारित की जा रही है (जैसे कि 1000 नमूनों की एक सदिश राशि)। यदि हां, तो आपके तीसरे प्लॉट के x- अक्ष का क्या अर्थ है? यह आपके 4 वें भूखंड के एक्स-अक्ष से अलग प्रतीत होता है। क्या नेटवर्क को F [f] और dF / df सीखने के लिए प्रशिक्षित किया जा रहा है, या नेटवर्क के प्रशिक्षित होने के बाद आप dF / df की गणना कर रहे हैं?
क्रिश्चियन ब्यूनो

जवाबों:


3

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

आइए इस उदाहरण पर विचार करें:

यहां छवि विवरण दर्ज करें

इस उदाहरण में, मेरा मानना ​​है कि मल्टी-लेयर न्यूरल नेटवर्क के माध्यम से, यह f-x (f) और f [f (x)] को बैक-प्रोपगेशन के माध्यम से सीखने में सक्षम होना चाहिए। हालांकि, चाहे यह अधिक जटिल कार्यों पर लागू होता है, या ब्रह्मांड में सभी कार्यों के लिए, इसे और अधिक प्रमाणों की आवश्यकता होती है। हालाँकि, जब हम Imagenet प्रतियोगिता के उदाहरण पर विचार करते हैं --- 1000 वस्तुओं को वर्गीकृत करने के लिए, बहुत गहरे तंत्रिका नेटवर्क का उपयोग अक्सर किया जाता है; सबसे अच्छा मॉडल ~ 5% तक एक अविश्वसनीय त्रुटि दर प्राप्त कर सकता है। इस तरह के गहरे एनएन में 10 से अधिक गैर-रैखिक परतें होती हैं और यह एक प्रायोगिक प्रमाण है कि जटिल संबंध को गहरे नेटवर्क के माध्यम से दर्शाया जा सकता है [इस तथ्य के आधार पर कि हम एक एनएन को 1 छिपी हुई परत के साथ डेटा को गैर-रैखिक रूप से अलग कर सकते हैं]।

लेकिन क्या सभी व्युत्पन्न को अधिक शोध की आवश्यकता हो सकती है।

मुझे यकीन नहीं है कि अगर कोई मशीन सीखने के तरीके हैं जो फ़ंक्शन और इसके व्युत्पन्न को पूरी तरह से सीख सकते हैं। उसके लिए माफ़ करना।


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

कूल, आपके तंत्रिका नेटवर्क के लिए सेटिंग क्या है? जैसे कि परतों की संख्या, छिपी हुई इकाइयाँ, सक्रियण कार्य, आदि
RockTheStar

मैंने विभिन्न सेटिंग्स की कोशिश की है: 1-3 छिपी हुई परतें, 5 से 100 छिपी हुई इकाइयाँ (प्रति परत), इनपुट की विभिन्न संख्याएँ (जबकि कार्यात्मक को इस सीमा के रूप में परिभाषित किया गया है कि यह अनंत तक जाती है, मैंने चार बिंदुओं की तरह ही कोशिश की है) , सिग्मॉइड और टैन्ह (सामान्य, साथ ही साथ LeCun द्वारा अनुशंसित) सक्रियण कार्य, और विभिन्न प्रशिक्षण विधियां (बैकप्रॉपैजेशन, QRPROP, कण झुंड अनुकूलन, और अन्य)। मैंने इन-हाउस और कुछ जाने-माने सॉफ्टवेयर दोनों को आजमाया है। जबकि मैं चीजों को बदलने के साथ कार्यात्मक को सुधारने में सुधार कर सकता हूं, मैं कार्यात्मक व्युत्पन्न में नहीं कर सकता।
माइकल

ठंडा। आपने किस सॉफ्टवेयर का उपयोग किया? क्या आपने अपने नेटवर्क सेटिंग को ऑप्टिमाइज़ करने के लिए क्रॉस-वैलिडेशन किया है? यहाँ मेरे कुछ विचार हैं: (1) मुझे उम्मीद है कि 3 या अधिक छिपी हुई परतों की आवश्यकता होगी क्योंकि समस्या अत्यधिक गैर-रैखिक है, (2) छिपी इकाइयों के लिए अधूरा सेटिंग का उपयोग करने का प्रयास करें, अर्थात, इनपुट -100-50-20 -आउटपुट, इनपुट -20-20-100-आउटपुट के बजाय, (3) सिग्मॉइड या टैन्ह के बजाय ReLU का उपयोग करें; 2010 में कुछ शोधों ने कुछ शोधपत्र प्रकाशित किए और साबित किया कि ReLU बेहतर परिणाम दे सकता है, (4) पैरामीटर जैसे कि वजन कम करना, सीखने की दर महत्वपूर्ण है, सुनिश्चित करें कि आप उन्हें उचित रूप से ट्यून करते हैं, (5) एक उपकरण के रूप में
कैफ

इन-हाउस सॉफ़्टवेयर के अलावा, मैंने आँकड़ों का उपयोग किया है ++, एनकॉग और न्यूरोएसोल्यूशंस (बाद वाला केवल एक नि: शुल्क परीक्षण था, और मैं अब इसका उपयोग नहीं करता हूं)। मैंने अभी तक चीजों को अनुकूलित करने के लिए क्रॉस सत्यापन की कोशिश नहीं की है, लेकिन मैं करूंगा; मैं आपके अन्य सुझावों की भी कोशिश करूंगा। आपके विचारों के लिए धन्यवाद।
माइकल


0

एफ[(एक्स)]=(एक्स)जी(एक्स)एक्स
जी(एक्स)मैं(एक्स), मैं=0,...,एफ[मैं(एक्स)]
एफ[(एक्स)]=Δएक्स[0जी02+1जी1++एन-1जीएन-1+एनजीएन2]
एफ[(एक्स)]Δएक्स=y=0जी02+1जी1++एन-1जीएन-1+एनजीएन2
0=, 1=(एक्स1), , एन-1=(एक्सएन-1), एन=,
<एक्स1<<एक्सएन-1<,  Δएक्स=एक्सजे+1-एक्सजे

मैं(एक्स), मैं=1,...,मैं

एफ[मैं(एक्स)]Δएक्स=yमैं=मैं0जी02+मैं1जी1++मैं,एन-1जीएन-1+मैंएनजीएन2

जी0,...,जीएन

एक्स=[00/201...0,एन-10एन/210/21 1...1,एन-11एन/2...............0/21...,एन-1एन/2]
y=[y0,...,y]

जी(एक्स)

import numpy as np 

def Gaussian(x, mu, sigma):
    return np.exp(-0.5*((x - mu)/sigma)**2)

एक्स[,]

x = np.arange(-1.0, 1.01, 0.01)
dx = x[1] - x[0]
g = Gaussian(x, 0.25, 0.25)

चलो हमारे प्रशिक्षण कार्यों के रूप में विभिन्न आवृत्तियों के साथ साइन और कोजाइन लेते हैं। लक्ष्य वेक्टर की गणना:

from math import cos, sin, exp
from scipy.integrate import quad

freq = np.arange(0.25, 15.25, 0.25)

y = []
for k in freq:
    y.append(quad(lambda x: cos(k*x)*exp(-0.5*((x-0.25)/0.25)**2), -1, 1)[0])
    y.append(quad(lambda x: sin(k*x)*exp(-0.5*((x-0.25)/0.25)**2), -1, 1)[0])
y = np.array(y)/dx

अब, प्रतिगामी मैट्रिक्स:

X = np.zeros((y.shape[0], x.shape[0]), dtype=float)
print('X',X.shape)
for i in range(len(freq)):
    X[2*i,:] = np.cos(freq[i]*x)
    X[2*i+1,:] = np.sin(freq[i]*x)

X[:,0] = X[:,0]/2
X[:,-1] = X[:,-1]/2

रेखीय प्रतिगमन:

from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(X, y)
ghat = reg.coef_

import matplotlib.pyplot as plt 

plt.scatter(x, g, s=1, marker="s", label='original g(x)')
plt.scatter(x, ghat, s=1, marker="s", label='learned $\hat{g}$(x)')
plt.legend()
plt.grid()
plt.show()

यहां छवि विवरण दर्ज करेंजी(एक्स)

from scipy.signal import savgol_filter
ghat_sg = savgol_filter(ghat, 31, 3) # window size, polynomial order

plt.scatter(x, g, s=1, marker="s", label='original g(x)')
plt.scatter(x, ghat, s=1, marker="s", label='learned $\hat{g}$(x)')
plt.plot(x, ghat_sg, color="red", label='Savitzky-Golay $\hat{g}$(x)')
plt.legend()
plt.grid()
plt.show()

यहां छवि विवरण दर्ज करें

एफ[(एक्स)](एक्स)

एफ[(एक्स)]=एल((एक्स))एक्स
0,1...,एनएक्स
एफ[(एक्स)]=एल((एक्स),'(एक्स))एक्स
'0,1...,एनएल0,1...,एनएक गैर-रैखिक विधि, जैसे तंत्रिका नेटवर्क या एसवीएम के साथ इसे सीखने का प्रयास कर सकता है, हालांकि यह रैखिक मामले में शायद इतना आसान नहीं होगा।

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