সংক্ষিপ্ত উত্তর:
- অনেক বড় ডেটা সেটিংয়ে (কয়েক মিলিয়ন ডেটা পয়েন্ট বলুন), ব্যয় বা গ্রেডিয়েন্ট গণনা করতে খুব দীর্ঘ সময় লাগে, কারণ আমাদের সমস্ত ডেটা পয়েন্টের উপরে যোগফল প্রয়োজন।
- আমরা কি খরচ কমানোর জন্য সঠিক গ্রেডিয়েন্ট আছে, দরকার নেই একটি প্রদত্ত পুনরাবৃত্তির। গ্রেডিয়েন্টের কিছু অনুমানের কাজ ঠিক আছে।
- স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (এসজিডি) কেবলমাত্র একটি ডেটা পয়েন্ট ব্যবহার করে গ্রেডিয়েন্টের আনুমানিক। সুতরাং, গ্রেডিয়েন্টের মূল্যায়ন করা সমস্ত ডেটার সংমিশ্রণের তুলনায় অনেক সময় সাশ্রয় করে।
- "যুক্তিসঙ্গত" সংখ্যার পুনরাবৃত্তির সাথে (এই সংখ্যা কয়েক হাজার হতে পারে, এবং ডেটা পয়েন্টগুলির সংখ্যার তুলনায় অনেক কম, যা মিলিয়ন হতে পারে), স্টোকাস্টিক গ্রেডিয়েন্ট শালীন একটি যুক্তিসঙ্গত ভাল সমাধান পেতে পারে।
দীর্ঘ উত্তর:
আমার স্বীকৃতি অ্যান্ড্রু এনজির মেশিন লার্নিং কোর্সেয়ার কোর্সটি অনুসরণ করে follows আপনি যদি এটির সাথে পরিচিত না হন তবে আপনি এখানে বক্তৃতা সিরিজটি পর্যালোচনা করতে পারেন ।
আসুন আমরা বর্গক্ষেত্রের ক্ষতির উপর রিগ্রেশন ধরে নিই, ব্যয়ের কাজটি হয়
জে( θ ) = 12 মিΣi = 1মি( এইচθ( এক্স( i )) - y( i ))2
এবং গ্রেডিয়েন্ট হয়
ঘজে( θ )ঘθ= 1মিΣi = 1মি( এইচθ( এক্স( i )) - y( i )) x( i )
গ্রেডিয়েন্ট ডিসেন্ট (জিডি) এর জন্য, আমরা এর মাধ্যমে প্যারামিটার আপডেট করি
θএন ই ডব্লিউ= θo l d- α 1মিΣi = 1মি( এইচθ( এক্স( i )) - y( i )) x( i )
৫ / মিএক্স( i ), y( i )
θএন ই ডব্লিউ= θo l d- α ⋅ ( এইচθ( এক্স( i )) - y( i )) x( i )
এখানে কেন আমরা সময় বাঁচাচ্ছি:
মনে করুন আমাদের কাছে 1 বিলিয়ন ডেটা পয়েন্ট রয়েছে।
জিডিতে, একবারে প্যারামিটারগুলি আপডেট করার জন্য, আমাদের (সঠিক) গ্রেডিয়েন্ট থাকা দরকার। 1 টি আপডেট করার জন্য এই 1 বিলিয়ন ডেটা পয়েন্ট যোগ করতে হবে sum
এসজিডিতে আমরা এটিকে সঠিক গ্রেডিয়েন্টের পরিবর্তে একটি আনুমানিক গ্রেডিয়েন্ট পাওয়ার চেষ্টা হিসাবে ভাবতে পারি । অনুমানটি একটি ডেটা পয়েন্ট (বা মিনি ব্যাচ নামে পরিচিত বেশ কয়েকটি ডেটা পয়েন্ট) থেকে আসছে। অতএব, এসজিডিতে আমরা খুব দ্রুত প্যারামিটারগুলি আপডেট করতে পারি। তদ্ব্যতীত, আমরা যদি সমস্ত ডেটা (একটি যুগকে বলা হয়) "লুপ" করি, আমাদের আসলে 1 বিলিয়ন আপডেট রয়েছে।
কৌশলটি হ'ল, এসজিডিতে আপনার 1 বিলিয়ন পুনরাবৃত্তি / আপডেট হওয়া দরকার না, তবে অনেক কম পুনরাবৃত্তি / আপডেট হওয়া দরকার, 1 মিলিয়ন বলুন এবং আপনার ব্যবহারের জন্য "যথেষ্ট যথেষ্ট" মডেল থাকবে।
আমি ধারণাটি ডেমো করতে একটি কোড লিখছি। আমরা প্রথমে সাধারণ সমীকরণ দ্বারা লিনিয়ার সিস্টেমটি সমাধান করি, তারপরে এটি এসজিডি দিয়ে সমাধান করুন। তারপরে আমরা ফলাফলগুলি প্যারামিটার মান এবং চূড়ান্ত উদ্দেশ্যমূলক ফাংশন মানগুলির সাথে তুলনা করি। এটি পরে দেখার জন্য, আমাদের টিউন করার জন্য 2 টি প্যারামিটার থাকবে।
set.seed(0);n_data=1e3;n_feature=2;
A=matrix(runif(n_data*n_feature),ncol=n_feature)
b=runif(n_data)
res1=solve(t(A) %*% A, t(A) %*% b)
sq_loss<-function(A,b,x){
e=A %*% x -b
v=crossprod(e)
return(v[1])
}
sq_loss_gr_approx<-function(A,b,x){
# note, in GD, we need to sum over all data
# here i is just one random index sample
i=sample(1:n_data, 1)
gr=2*(crossprod(A[i,],x)-b[i])*A[i,]
return(gr)
}
x=runif(n_feature)
alpha=0.01
N_iter=300
loss=rep(0,N_iter)
for (i in 1:N_iter){
x=x-alpha*sq_loss_gr_approx(A,b,x)
loss[i]=sq_loss(A,b,x)
}
ফলাফলগুলো:
as.vector(res1)
[1] 0.4368427 0.3991028
x
[1] 0.3580121 0.4782659
124.1343123.0355
এখানে পুনরাবৃত্তির তুলনায় ব্যয় ফাংশনের মান রয়েছে, আমরা দেখতে পাচ্ছি এটি কার্যকরভাবে ক্ষতি হ্রাস করতে পারে, যা ধারণাটি চিত্রিত করে: আমরা গ্রেডিয়েন্টের আনুমানিকতা আনতে এবং "যথেষ্ট ভাল" ফলাফল পেতে উপাত্তের একটি উপসেট ব্যবহার করতে পারি।
1000sq_loss_gr_approx
3001000