আমি নিউরাল নেট সম্পর্কিত বিশেষজ্ঞ নই তবে আমি মনে করি নিম্নলিখিত পয়েন্টগুলি আপনার পক্ষে সহায়ক হতে পারে। এছাড়াও কিছু দুর্দান্ত পোস্ট রয়েছে, যেমন লুকানো ইউনিটগুলিতে এটি একটি যা আপনি এই সাইটটিতে স্নায়বিক জালগুলি কী দরকারী যা আপনাকে দরকারী মনে করতে পারে তা অনুসন্ধান করতে পারেন।
১ টি বৃহত ত্রুটি: আপনার উদাহরণটি মোটেও কার্যকর হয়নি
ত্রুটিগুলি কেন এত বড় এবং কেন সমস্ত পূর্বাভাসিত মানগুলি প্রায় ধ্রুবক?
এটি কারণ যে নিউরাল নেটওয়ার্কটি আপনি এটি দিয়েছিলেন সেই গুণক ফাংশনটি গণনা করতে অক্ষম ছিল এবং প্রশিক্ষণের সময় ত্রুটিগুলি হ্রাস করার সর্বোত্তম উপায় ছিল 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 অনুমানের প্যারামিটারের তুলনায় প্রশিক্ষণের উদাহরণগুলির সংখ্যা
x⋅k>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 টি পরামিতি নির্ভরযোগ্যতার সাথে অনুমান করতে পারবেন না। আমি সন্দেহ করি এক্ষেত্রে আপনি ইউনিটগুলির সংখ্যা কমিয়ে অনুমান করার জন্য প্যারামিটারের সংখ্যাটি কাটাতে সক্ষম হতে পারেন। এবং আপনি এটি করার জন্য স্নায়বিক নেটওয়ার্ক নির্মাণ থেকে দেখতে পাচ্ছেন যে প্রশিক্ষণের সময় কোনও সরল নিউরাল নেটওয়ার্ক সমস্যা হতে পারে এমন সম্ভাবনা কম।
তবে যেকোন মেশিন লার্নিংয়ে (লিনিয়ার রিগ্রেশন সহ) একটি সাধারণ নিয়ম হিসাবে আপনি অনুমান করার জন্য প্যারামিটারের চেয়ে অনেক বেশি প্রশিক্ষণের উদাহরণ পেতে চান।