নিউরাল নেটওয়ার্কের মাধ্যমে বহুভুজের বৃহত্তম রুট সন্ধান করুন


11

চ্যালেঞ্জ

পূর্ণসংখ্যার সহ কোনও ত্রি-মাত্রিক ইনপুট ভেক্টর দেওয়া, এমন ক্ষুদ্রতম ফিডফোরওয়ার্ড নিউরাল নেটওয়ার্কটি সন্ধান করুন , নেটওয়ার্কটি এর বৃহত্তম (যেমন, "সবচেয়ে ইতিবাচক") মূলকে আউটপুট করে বহুতল চেয়ে কঠোরভাবে ত্রুটিযুক্ত ।(a,b,c)[10,10]x3+ax2+bx+c0.1

গ্রাহ্যতা

আমার পূর্বের নিউরাল নেট গল্ফিং চ্যালেঞ্জের স্বীকৃতি পাওয়ার ধারণাটি কিছুটা সীমাবদ্ধ বলে মনে হয়েছিল, তাই এই চ্যালেঞ্জের জন্য আমরা ফিডফোরওয়ার্ড নিউরাল নেটওয়ার্কের আরও উদার সংজ্ঞা ব্যবহার করছি:

একটি স্নায়ুর একটি ফাংশন যে একটি ভেক্টর দ্বারা নির্দিষ্ট করা হয় এর ওজন , একটি পক্ষপাত , এবং একটি অ্যাক্টিভেশন ফাংশন following নিম্নলিখিত উপায়ে:ν:RnRwRn bR f:RR

ν(x):=f(wx+b),xRn.

ইনপুট নোড with with সহ একটি ফিডফর্ডার নিউরাল নেটওয়ার্ক হ'ল একটি ক্রিয়া যা ক্রম থেকে তৈরি করা যেতে পারে নিউরনের , যেখানে প্রতিটি থেকে ইনপুট নেয় এবং একটি স্কেলার আউটপুট দেয় x_k । সুনির্দিষ্ট কিছু সেট দেওয়া এস \ subseteq \ {1, \ ldots, n \} এর আউটপুট নোড , তারপর স্নায়ুর নেটওয়ার্ক আউটপুট ভেক্টর হয় (x_k): _ {ট \ s এ}{1,,n}(x1,,xn)Rn(νk)k=n+1Nνk:Rk1R(x1,,xk1)xkS{1,,N}(xk)kS

যে কোনও নির্দিষ্ট কাজের জন্য অ্যাক্টিভেশন ফাংশনগুলি টিউন করা যেতে পারে, তাই এই চ্যালেঞ্জটিকে আকর্ষণীয় রাখতে আমাদের অ্যাক্টিভেশন ফাংশনগুলির শ্রেণিকে সীমাবদ্ধ করতে হবে। নিম্নলিখিত সক্রিয়করণ ফাংশন অনুমোদিত:

  • পরিচয়। f(t)=t

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

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

  • সিগমা। f(t)=etet+1

  • Sinusoid। f(t)=sint

সামগ্রিকভাবে, একটি গ্রহণযোগ্য নিউরাল নেট ইনপুট নোড, নিউরনের ক্রম এবং আউটপুট নোড দ্বারা নির্দিষ্ট করা হয়, যখন প্রতিটি নিউরন উপরের তালিকা থেকে ওজন, একটি পক্ষপাত এবং একটি অ্যাক্টিভেশন ফাংশন দ্বারা নির্দিষ্ট করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত স্নায়বিক নেট গ্রহণযোগ্য, যদিও এটি এই চ্যালেঞ্জের কার্যকারিতা লক্ষ্য পূরণ করে না:

  • ইনপুট নোড: {1,2}

  • নিউরোন: জন্যνk(x1,,xk1):=xk2+xk1k{3,,10}

  • আউটপুট নোড: {5,9,10}

এই নেটওয়ার্কটিতে 8 টি নিউরন রয়েছে, প্রতিটি শূন্য পক্ষপাত এবং পরিচয় সক্রিয়করণ সহ। কথায় কথায়, এই নেটওয়ার্কটি এবং দ্বারা উত্পন্ন জেনারেলাইজড ফিবোনাচি সিক্যুয়েন্সটি গণনা করে এবং তারপরে এই ক্রম থেকে 5 তম, 9 ম এবং 10 তম সংখ্যাকে আউটপুট করে।x1x2

স্কোরিং

দশমিক প্রসারণের সমাপ্তি সহ একটি আসল সংখ্যা দেওয়া , জন্য সবচেয়ে ক্ষুদ্রতম সংকেত হতে হবে যার জন্য , এবং জন্য সবচেয়ে ক্ষুদ্রতম অবিরত পূর্ণসংখ্যা হয় কোন হল পূর্ণসংখ্যা। তারপর আমরা বলতে হয় স্পষ্টতা এর ।xp(x)p10p|x|<1q(x)q10qxp(x)+q(x)এক্সx

উদাহরণস্বরূপ, এর একটি গ্রুপ আছে যেহেতু, এর একটি গ্রুপ আছে ।x=1.0014x=00

আপনার স্কোর হল আপনার নিউরাল নেটওয়ার্কের ওজন এবং বায়াসগুলির যথার্থতার যোগফল।

(যেমন, উপরের উদাহরণটির স্কোর 16 টি)

প্রতিপাদন

যদিও ঘন সূত্রের শিকড়গুলি শিকড়গুলি প্রকাশ করা যায় , তবে বৃহত্তম রুটটি সম্ভবত সংখ্যাগত উপায়ে সহজেই অ্যাক্সেস করা যায়। @ এক্সনোরের পরামর্শ অনুসরণ করে, আমি inte এর প্রতিটি পছন্দগুলির পূর্ণসংখ্যার বৃহত্তম রুটটি গণনা করেছি এবং ফলাফলগুলি এখানে পাওয়া যাবে । এই পাঠ্য ফাইলের প্রতিটি লাইন ফর্মের । উদাহরণস্বরূপ, প্রথম লাইনটি জানিয়েছে যে এর বৃহত্তম প্রায় ।a,b,c[10,10]এক্স 3 - 10 এক্স 2 - 10 এক্স - 10 10.99247140445449a,b,c,rootx310x210x1010.99247140445449

সম্পাদনা: আমার পোস্ট করা মূল ফাইলটির ক্ষেত্রে ত্রুটি ছিল যেখানে বহুভুজ একাধিক মূল প্রদর্শন করে। বর্তমান সংস্করণটি ত্রুটিমুক্ত থাকতে হবে।


3
বহুবর্ষ ইনপুটটিতে কী ঘটে তার কোনও বাস্তব শিকড় থাকে না, যেমন a=0এবং চতুর্ভুজ দুটি জটিল শিকড় থাকে?
xnor

আমি মনে করি সবচেয়ে পরিষ্কার সমাধানটি এই বলে যে ইনপুটটি aননজারো বা এমনকি মাত্র 1 হবে, এছাড়াও, আমি কিছু পরীক্ষার ক্ষেত্রে প্রয়োগ করার পরামর্শ দেব, শিকড়গুলি উচ্চ নির্ভুলতায় প্রদান করব যাতে আমরা আমাদের পরীক্ষা করতে পারি 0.1 এর মধ্যে। সমস্ত সম্ভাব্য ইনপুটগুলির আউটপুটগুলি রাখা ভাল হবে, সম্ভবত কোনও লিঙ্কে যেহেতু পোস্টের জন্য এটি অনেক।
xnor

1
আমি নতুন অনুমোদনের নিয়ম পছন্দ করি। দেখে মনে হচ্ছে নতুন সাইনোসয়েড ফাংশনটি যদিও অত্যন্ত শোষণযোগ্য। আমার কাছে একটি স্কেচি প্রমাণ রয়েছে যে x -> a * sin(b * softplus(x) + c)ফর্মটির কোনও ক্রিয়াকলাপ xঅত্যন্ত বড় এবং সুনির্দিষ্ট ফ্রিকোয়েন্সিটি ব্যবহার করে স্বেচ্ছাসেবীর নির্ভুলতার সাথে পূর্ণসংখ্যার সাথে ডেটা পয়েন্টের যে কোনও সীমাবদ্ধ পরিমাণকে উপেক্ষা করতে পারে।
xnor

1
এটি কতটা কার্যকর হবে তা নিশ্চিত নয় (ভবিষ্যতের চ্যালেঞ্জের জন্য): সংখ্যার তত্ত্বে আমরা সংখ্যার জটিলতা পরিমাপ করতে উচ্চতা ফাংশন ব্যবহার করি । উদাহরণস্বরূপ, a (হ্রাস) ভগ্নাংশ এর নিষ্পাপ উচ্চতা (এবং অনেক সাধারণীকরণ রয়েছে) দ্বারা দেওয়া হয়েছে by হতে পারে এটি বিকল্প ব্যবস্থা হিসাবে ব্যবহৃত হতে পারে। p/qh=logmax{|p|,|q|}
flawr

1
@ ডাস্টিনজি.মিক্সন আমি নিশ্চিত না আপনি সচেতন কিনা তবে আমাদের কাছে খসড়া পোস্ট করার জন্য এবং চ্যাটের পাশাপাশি একটি চ্যাটের বিবরণ আলোচনা করার জন্য একটি স্যান্ডবক্স রয়েছে
flawr

উত্তর:


6

14,674,000,667 5,436,050 5,403,448 10,385 5,994 4,447
3,806 মোট স্পষ্টতা

একটি বেসলাইন জন্য, আমি নিম্নলিখিত পদ্ধতির তদন্ত: নির্বাচন যেমন যে আমরা বহুপদী নমুনা যদি এM,δ,ϵ>0p(x)=x3+ax2+bx+c

S:={M,M+δ,M+2δ,,M},

তারপরে সন্তুষ্ট মধ্যে বৃহত্তম স্যাম্পল পয়েন্ট অগত্যা উপস্থিত রয়েছে এবং অগত্যা বৃহত্তম মূলের এর মধ্যে বাস করে । যে polynomials আমাদের সংগ্রহে, এক সময় লাগতে পারে দেখাতে পারেন যে , , এবং ।sSp(s)<ϵ0.1pM=11δ=0.1ϵ=104

এই যুক্তি প্রয়োগ করে এমন একটি নিউরাল নেট ডিজাইন করার জন্য, আমরা নিউরনের একটি স্তর দিয়ে শুরু করি যা উপর বহুবর্ষের নমুনা দেয় । প্রতিটি , আমরা নিইSsS

x1,s=s2a+sb+1c+s3.

এর পরে, আমরা চিহ্নিত যা এই কম হয় । দেখা যাচ্ছে যে জন্য , এর জন্য এটি কেবল । এর মতো, আমরা আমাদের নমুনাগুলি সঠিকভাবে সনাক্ত করতে রিলু অ্যাক্টিভেশনগুলি ব্যবহার করতে পারি:ϵ=104sSp(s)<104p(s)0

relu(104t)relu(t)104={1if t00if t104.

আমরা নিউরনের কয়েকটি স্তর সহ এটি বাস্তবায়ন করি:

x2,s=relu(1x1,s+104),x3,s=relu(1x1,s),x4,s=104x2,s104x3,s.

এই মুহুর্তে, আমাদের কাছে যখন , এবং অন্যথায় । মনে রাখবেন যে আমরা বৃহত্তম যার জন্য । এই লক্ষ্যে, আমরা কে ( সুবিধার জন্য) হিসাবে এবং প্রতিটি আমরা পুনরাবৃত্তভাবে সংজ্ঞায়িত করিx4,s=1p(s)<104x4,s=0sx4,s=1x4,Mx5,Mk1

x5,Mkδ=1x4,Mkδ+2x5,M(k1)δ=j=0k2kjx4,Mjδ.

এই রূপান্তর জন্য ধন্যবাদ, যে নন-নেগেটিভ পূর্ণসংখ্যা, এবং অনন্য , যার জন্য । আমরা এখন রিলু অ্যাক্টিভেশনগুলির আরও একটি অ্যাপ্লিকেশন দ্বারা চিহ্নিত করতে পারি:x5,sssx5,s=1s

relu(t2)2relu(t1)+t={1if t=10if tZ0{1}.

স্পষ্টতই, আমরা দ্বারা নিউরনগুলি সংজ্ঞায়িত করি

x6,s=relu(1x5,s2),x7,s=relu(1x5,s1),x8,s=1x6,s2x7,s+1x5s.

তারপরে যদি এবং অন্যথায় । আমাদের আউটপুট নোড উত্পাদন করতে আমরা এগুলিকে একত্রিত করি:x8,s=1s=sx8,s=0

x9=sSsx8,s=s.

স্কোরের জন্য, প্রতিটি স্তরের বিভিন্ন স্তরের নির্ভুলতার নিউরন রয়েছে: (1) , (2) , (3) , (4) , (5) , (6) , (7) , (8) , (9)। তদ্ব্যতীত, দুটি স্তর ছাড়া অন্য সমস্তগুলির মধ্যে নিউরন রয়েছে; স্তর 5 এর নিউরন এবং স্তর 9 এর নিউরন রয়েছে।6+3+1+9=191+4=515+5=101+1=21+1=21+1=21+1+1=33|S||S|=221|S|11

সম্পাদনা: উন্নতি: (1) সীমাবদ্ধ পার্থক্য ব্যবহার করে আমরা বহুগুণকে আরও দক্ষতার সাথে নমুনা করতে পারি। (২) সিগময়েড অ্যাক্টিভেশন ব্যবহার করে আমরা স্তরগুলি ২ থেকে ৪ টি বাইপাস করতে পারি। (3) স্তর 5 এর ওভারফ্লো বিষয়গুলি আরও যত্ন সহকারে রিলু অ্যাক্টিভেশন প্রয়োগ করে এড়ানো যায় (এবং পরবর্তী স্তরগুলি একত্রিত করা যায়)। (4) চূড়ান্ত যোগফল অংশ দ্বারা সংক্ষেপণ সহ সস্তা ।

ম্যাটল্যাব কোডটি যা অনুসরণ করে তা হল। স্পষ্ট করে বলতে precগেলে , এটি একটি ফাংশন ( এখানে পাওয়া যায় ) যা ওজন বা বায়াসগুলির ভেক্টরের যথার্থতার গণনা করে।

function sstar = findsstar2(a,b,c)

relu = @(x) x .* (x>0);

totprec = 0;

% x1 samples the polynomial on -11:0.1:11
x1=[];
for s = -11:0.1:11
    if length(x1) < 5
        w1 = [s^2 s 1];
        b1 = s^3;
        x1(end+1,:) = w1 * [a; b; c] + b1;
        totprec = totprec + prec(w1) + prec(b1);
    else
        w1 = [-1 4 -6 4];
        x1(end+1,:) = w1 * x1(end-3:end,:);
        totprec = totprec + prec(w1);
    end
end

% x4 indicates whether the polynomial is nonpositive
w4 = -6e5;
b4 = 60;
x4=[];
for ii=1:length(x1)
    x4(end+1) = sigmf(w4 * x1(ii) + b4, [1,0]);
    totprec = totprec + prec(w4) + prec(b4);
end

% x6 indicates which entries are less than or equal to sstar
x5 = zeros(size(x1));
x6 = zeros(size(x1));
x5(end) = 0;
x6(end) = 0;
for ii = 1:length(x5)-1
    w5 = [-1 -1];
    b5 = 1;
    x5(end-ii) = relu(w5 * [x4(end-ii); x6(end-ii+1)] + b5);
    totprec = totprec + prec(w5) + prec(b5);
    w6 = -1;
    b6 = 1;
    x6(end-ii) = w6 * x5(end-ii) + b6;
    totprec = totprec + prec(w6) + prec(b6);
end

% a linear combination produces sstar
w7 = 0.1*ones(1,length(x1));
w7(1) = -11;
sstar = w7 * x6;

%disp(totprec) % uncomment to display score

end

2

53,268 29,596 29,306 মোট নির্ভুলতা

@ এআরেক্সের সাথে ব্যক্তিগত যোগাযোগের ফলে এই সমাধানের দিকে নিয়ে যায়, যাতে আমরা একটি নিউরাল নেট তৈরি করি যা উত্তরগুলি মুখস্ত করে। মূল ধারণাটি হ'ল প্রতিটি ফাংশন একটি সীমাবদ্ধ সেট ক্ষয়ের উপভোগ করেf:SRS

f(x)=sSf(s){1if x=s0else}.

যেমন, এক স্নায়ুর নেট বাস্তবায়ন গঠন করা হতে পারে প্রথম ইনপুটের একটি সূচক ফাংশন মধ্যে ইনপুট রূপান্তর, এবং তারপর সুসংগত ওজন কাঙ্ক্ষিত আউটপুট ব্যবহার মিশ্রন দ্বারা। তদুপরি, রিলু অ্যাক্টিভেশনগুলি এই রূপান্তরটি সম্ভব করে তোলে:f

relu(t1)2relu(t)+relu(t+1)={1if t=00if tZ{0}.

নিম্নলিখিতটি এই পদ্ধতির একটি ম্যাটল্যাব বাস্তবায়ন। স্পষ্টরূপে, roots.txtমূলগুলি এখানে পোস্ট করা ফাইল ( এখানে পাওয়া যায় ), এবং precএটি একটি ফাংশন ( এখানে পাওয়া যায় ) যা ওজন বা বায়াসগুলির কোনও ভেক্টরের মোট নির্ভুলতা গণনা করে।

সম্পাদনা 1: মূলটির তুলনায় দুটি উন্নতি: (1) আমি লুপগুলির বাইরে কিছু নিউরনকে ফ্যাক্টর করেছি। (২) আমি একই স্তরের সেট থেকে প্রথম শর্তাবলী একত্রিত করে চূড়ান্ত সমষ্টিতে " লেবেসগু ইন্টিগ্রেশন " প্রয়োগ করেছি । এইভাবে, আমি প্রতি স্তরের সেটে একবার মাত্র একটি আউটপুটের উচ্চ-নির্ভুল মানের জন্য অর্থ প্রদান করি। এছাড়াও, যৌক্তিক মূল উপপাদ্য দ্বারা নিকটতম পঞ্চম পর্যন্ত গোল আউটপুটগুলি নিরাপদ ।

2 সম্পাদনা করুন: অতিরিক্ত ছোটখাট উন্নতি: (1) লুপের বাইরে আমি আরও নিউরনগুলিকে তৈরি করেছি। (২) আমি আউটপুট ইতিমধ্যে শূন্যের জন্য চূড়ান্ত সমষ্টিতে শব্দটি গণনা করতে বিরক্ত করব না।

function r = approxroot(a,b,c)

relu = @(x)x .* (x>0);

totalprec=0;

% x4 indicates which entry of (-10:10) is a
w1 = ones(21,1);   b1 = -(-10:10)'-1;    x1 = relu(w1 * a + b1);
w2 = ones(21,1);   b2 = -(-10:10)';      x2 = relu(w2 * a + b2);
w3 = ones(21,1);   b3 = -(-10:10)'+1;    x3 = relu(w3 * a + b3);
w4p1 = ones(21,1); w4p2 = -2*ones(21,1); w4p3 = ones(21,1);
x4 = w4p1 .* x1 + w4p2 .* x2 + w4p3 .* x3;
totalprec = totalprec + prec(w1) + prec(w2) + prec(w3) + prec(b1) + prec(b2) + prec(b3) + prec(w4p1) + prec(w4p2) + prec(w4p3);

% x8 indicates which entry of (-10:10) is b
w5 = ones(21,1);   b5 = -(-10:10)'-1;    x5 = relu(w5 * b + b5);
w6 = ones(21,1);   b6 = -(-10:10)';      x6 = relu(w6 * b + b6);
w7 = ones(21,1);   b7 = -(-10:10)'+1;    x7 = relu(w7 * b + b7);
w8p1 = ones(21,1); w8p2 = -2*ones(21,1); w8p3 = ones(21,1);
x8 = w8p1 .* x5 + w8p2 .* x6 + w8p3 .* x7;
totalprec = totalprec + prec(w5) + prec(w6) + prec(w7) + prec(b5) + prec(b6) + prec(b7) + prec(w8p1) + prec(w8p2) + prec(w8p3);

% x12 indicates which entry of (-10:10) is c
w9 = ones(21,1);    b9 = -(-10:10)'-1;     x9 = relu(w9 * c + b9);
w10 = ones(21,1);   b10 = -(-10:10)';      x10 = relu(w10 * c + b10);
w11 = ones(21,1);   b11 = -(-10:10)'+1;    x11 = relu(w11 * c + b11);
w12p1 = ones(21,1); w12p2 = -2*ones(21,1); w12p3 = ones(21,1);
x12 = w12p1 .* x9 + w12p2 .* x10 + w12p3 .* x11;
totalprec = totalprec + prec(w9) + prec(w10) + prec(w11) + prec(b9) + prec(b10) + prec(b11) + prec(w12p1) + prec(w12p2) + prec(w12p3);

% x15 indicates which row of the roots file is relevant
x15=[];
for aa=-10:10
    w13 = 1;
    b13 = -2;
    x13 = w13 * x4(aa+11) + b13;
    totalprec = totalprec + prec(w13) + prec(b13);
    for bb=-10:10
        w14p1 = 1;
        w14p2 = 1;
        x14 = w14p1 * x13 + w14p2 * x8(bb+11);
        totalprec = totalprec + prec(w14p1) + prec(w14p2);
        for cc=-10:10
            w15p1 = 1;
            w15p2 = 1;
            x15(end+1,1) = relu(w15p1 * x14 + w15p2 * x12(cc+11));
            totalprec = totalprec + prec(w15p1) + prec(w15p2);
        end
    end
end

% r is the desired root, rounded to the nearest fifth
A = importdata('roots.txt');
outputs = 0.2 * round(5 * A(:,4)');
uniqueoutputs = unique(outputs);
x16 = [];
for rr = uniqueoutputs
    if rr == 0
        x16(end+1,:) = 0;
    else
        lvlset = find(outputs == rr);
        w16 = ones(1,length(lvlset));
        x16(end+1,:) = w16 * x15(lvlset);
        totalprec = totalprec + prec(w16);
    end
end
w17 = uniqueoutputs;
r = w17 * x16;
totalprec = totalprec + prec(w17);

%disp(totalprec) % uncomment to display score

end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.