আর নিউরালনেট - গণনা একটি ধ্রুব উত্তর দেয়


11

আমি পূর্বাভাসের জন্য আর এর neuralnetপ্যাকেজ ( এখানে ডকুমেন্টেশন ) ব্যবহার করার চেষ্টা করছি ।

এখানে আমি যা করার চেষ্টা করছি:

library(neuralnet)
x <- cbind(runif(50, min=1, max=500), runif(50, min=1, max=500))
y <- x[, 1] * x[, 2]
train <- data.frame(x, y)
n <- names(train)
f <- as.formula(paste('y ~', paste(n[!n %in% 'y'], collapse = ' + ')))
net <- neuralnet(f, train, hidden = c(5, 5), threshold=0.01)
print(net)

all: neuralnet(formula = f, data = train, hidden = c(5, 5), threshold = 0.01)

1 repetition was calculated.

    Error Reached Threshold Steps
1 66136930789    0.004658283648 97938

test <- cbind(runif(10, min=1, max=500), runif(10, min=1, max=500))
res <- compute(net, test)
res$net.result
         [,1]
[1,] 58749.01798
[2,] 58749.01798
[3,] 58749.01798
[4,] 58749.01798
[5,] 58749.01798
[6,] 58749.01798
[7,] 58749.01798
[8,] 58749.01798
[9,] 58749.01798
[10,] 58749.01798

কেউ আমাকে ব্যাখ্যা করতে পারে যে ত্রুটিগুলি এত বড় কেন এবং সমস্ত পূর্বাভাসিত মানগুলি কেন প্রায় ধ্রুবক?

উত্তর:


6

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

১ টি বৃহত ত্রুটি: আপনার উদাহরণটি মোটেও কার্যকর হয়নি

ত্রুটিগুলি কেন এত বড় এবং কেন সমস্ত পূর্বাভাসিত মানগুলি প্রায় ধ্রুবক?

এটি কারণ যে নিউরাল নেটওয়ার্কটি আপনি এটি দিয়েছিলেন সেই গুণক ফাংশনটি গণনা করতে অক্ষম ছিল এবং প্রশিক্ষণের সময় ত্রুটিগুলি হ্রাস করার সর্বোত্তম উপায় ছিল yনির্বিশেষে, নির্ধারিত পরিসরের মাঝখানে একটি ধ্রুবক সংখ্যা আউটপুট করা x। (লক্ষ্য করুন যে ৫৮74৪৯ একসাথে ১ এবং ৫০০ এর মধ্যে দুটি সংখ্যা গুণনের গড়ের খুব কাছাকাছি।)

11

2 স্থানীয় মিনিমা: কেন তাত্ত্বিকভাবে যুক্তিসঙ্গত উদাহরণটি কাজ করতে পারে না

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

x <- cbind(runif(50, min=1, max=500), runif(50, min=1, max=500))
y <- x[, 1] + x[, 2]
train <- data.frame(x, y)
n <- names(train)
f <- as.formula(paste('y ~', paste(n[!n %in% 'y'], collapse = ' + ')))
net <- neuralnet(f, train, hidden = 0, threshold=0.01)
print(net) # Error 0.00000001893602844

অবশ্যই, আপনি লগগুলি নিয়ে আপনার মূল সমস্যাটিকে একটি অতিরিক্ত সমস্যায় রূপান্তর করতে পারেন, তবে আমি মনে করি না এটি আপনি যা চান তাই তাই ...

3 অনুমানের প্যারামিটারের তুলনায় প্রশিক্ষণের উদাহরণগুলির সংখ্যা

xk>ck=(1,2,3,4,5)c=3750

নীচের কোডটিতে আমি আপনার সাথে খুব অনুরূপ দৃষ্টিভঙ্গি নিয়েছি আমি ব্যতীত আমি দুটি স্নায়ু জাল প্রশিক্ষণ করি, প্রশিক্ষণ সেট থেকে 50 টি উদাহরণ সহ একটি এবং 500 এর সাথে একটি।

library(neuralnet)
set.seed(1) # make results reproducible
N=500
x <- cbind(runif(N, min=1, max=500), runif(N, min=1, max=500), runif(N, min=1, max=500), runif(N, min=1, max=500), runif(N, min=1, max=500))
y <- ifelse(x[,1] + 2*x[,1] + 3*x[,1] + 4*x[,1] + 5*x[,1] > 3750, 1, 0)
trainSMALL <- data.frame(x[1:(N/10),], y=y[1:(N/10)])
trainALL <- data.frame(x, y)
n <- names(trainSMALL)
f <- as.formula(paste('y ~', paste(n[!n %in% 'y'], collapse = ' + ')))
netSMALL <- neuralnet(f, trainSMALL, hidden = c(5,5), threshold = 0.01)
netALL <- neuralnet(f, trainALL, hidden = c(5,5), threshold = 0.01)
print(netSMALL) # error 4.117671763
print(netALL) # error 0.009598461875

# get a sense of accuracy w.r.t small training set (in-sample)
cbind(y, compute(netSMALL,x)$net.result)[1:10,]
      y                 
 [1,] 1  0.587903899825
 [2,] 0  0.001158500142
 [3,] 1  0.587903899825
 [4,] 0  0.001158500281
 [5,] 0 -0.003770868805
 [6,] 0  0.587903899825
 [7,] 1  0.587903899825
 [8,] 0  0.001158500142
 [9,] 0  0.587903899825
[10,] 1  0.587903899825

# get a sense of accuracy w.r.t full training set (in-sample)
cbind(y, compute(netALL,x)$net.result)[1:10,]
      y                 
 [1,] 1  1.0003618092051
 [2,] 0 -0.0025677656844
 [3,] 1  0.9999590121059
 [4,] 0 -0.0003835722682
 [5,] 0 -0.0003835722682
 [6,] 0 -0.0003835722199
 [7,] 1  1.0003618092051
 [8,] 0 -0.0025677656844
 [9,] 0 -0.0003835722682
[10,] 1  1.0003618092051

এটা আরও netALLঅনেক ভাল যে স্পষ্ট ! কেন? একটি plot(netALL)আদেশ দিয়ে আপনি কী পান তা একবার দেখুন :

এখানে চিত্র বর্ণনা লিখুন

আমি এটিকে 66 টি প্যারামিটার তৈরি করি যা প্রশিক্ষণের সময় অনুমান করা হয় (11 টি নোডের প্রতিটিতে 5 ইনপুট এবং 1 বায়াস ইনপুট)। 50 টি প্রশিক্ষণের উদাহরণ সহ আপনি 66 টি পরামিতি নির্ভরযোগ্যতার সাথে অনুমান করতে পারবেন না। আমি সন্দেহ করি এক্ষেত্রে আপনি ইউনিটগুলির সংখ্যা কমিয়ে অনুমান করার জন্য প্যারামিটারের সংখ্যাটি কাটাতে সক্ষম হতে পারেন। এবং আপনি এটি করার জন্য স্নায়বিক নেটওয়ার্ক নির্মাণ থেকে দেখতে পাচ্ছেন যে প্রশিক্ষণের সময় কোনও সরল নিউরাল নেটওয়ার্ক সমস্যা হতে পারে এমন সম্ভাবনা কম।

তবে যেকোন মেশিন লার্নিংয়ে (লিনিয়ার রিগ্রেশন সহ) একটি সাধারণ নিয়ম হিসাবে আপনি অনুমান করার জন্য প্যারামিটারের চেয়ে অনেক বেশি প্রশিক্ষণের উদাহরণ পেতে চান।


1
চিন্তা করার জন্য প্রচুর তথ্য, ধন্যবাদ! তুমি একদম সঠিক! যদি ভেরিয়েবলগুলি স্বাভাবিক করা হয়, তবে প্রশিক্ষণের উদাহরণগুলির সংখ্যা আরও বড় এবং একের সমান একটি লুকানো স্তরে নিউরনের সংখ্যা, এটি আরও ভাল দেখায়। অবশ্যই, একটি গুণ গুণ নয়, অনুরূপ কিছু। আহা, যদি আমি 2 সপ্তাহ আগে এত বড় সাড়া পাই তবে জিনিসগুলি আরও সহজ হবে। তবে, আপনার জবাবের জন্য খুব কৃতজ্ঞ, আপনাকে ধন্যবাদ!
ভাগ্যী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.