স্টকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত মান স্ট্র্যাডেন্ট ডিসেন্টের তুলনায় কীভাবে সময় বাঁচাতে পারে?


15

স্ট্যান্ডার্ড গ্রেডিয়েন্ট বংশোদ্ভূত পুরো প্রশিক্ষণ ডেটাসেটের জন্য গ্রেডিয়েন্ট গণনা করবে।

for i in range(nb_epochs):
  params_grad = evaluate_gradient(loss_function, data, params)
  params = params - learning_rate * params_grad

একটি প্রাক সংজ্ঞায়িত সংখ্যার জন্য, আমরা প্রথমে সম্পূর্ণ ডেটাসেটের জন্য আমাদের প্যারামিটার ভেক্টর প্যারামগুলির জন্য ক্ষতির ফাংশনের গ্রেডিয়েন্ট ভেক্টর ওয়েট_ গ্রেড গণনা করি।

বিপরীতে স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত প্রতিটি প্রশিক্ষণের উদাহরণ x (i) এবং লেবেল y (i) এর জন্য একটি প্যারামিটার আপডেট সম্পাদন করে।

for i in range(nb_epochs):
  np.random.shuffle(data)
  for example in data:
    params_grad = evaluate_gradient(loss_function, example, params)
    params = params - learning_rate * params_grad

বলা হয় এসজিডি অনেক দ্রুত। তবে, আমরা বুঝতে পারি না যে কীভাবে আরও দ্রুত হতে পারে যদি আমাদের সমস্ত ডেটা পয়েন্টের উপরে লুপ থাকে op জিডি তে গ্রেডিয়েন্টের গণনা পৃথকভাবে প্রতিটি ডাটা পয়েন্টের জন্য জিডির গণনার তুলনায় অনেক ধীর গতিতে হয়?

কোড থেকে আসে এখানে


1
দ্বিতীয় ক্ষেত্রে আপনি সম্পূর্ণ ডেটা সেটটি আনুমানিক করতে একটি ছোট ব্যাচ নিতে চান। এটি সাধারণত বেশ ভাল কাজ করে। সুতরাং বিভ্রান্তিমূলক অংশটি সম্ভবত এটি উভয় ক্ষেত্রেই দেখতে পর্বের সংখ্যা একরকমের মতো মনে হচ্ছে তবে 2 ক্ষেত্রে আপনার অনেকগুলি পর্বের প্রয়োজন হবে না "" হাইপারপ্যারামিটারগুলি "এই দুটি পদ্ধতির জন্য আলাদা হবে: জিডি এনবি_পোকস! = এসজিডি nb_epochs। আসুন আর্গুমেন্টের উদ্দেশ্যে বলি: জিডি এনবি_পচস = এসজিডি উদাহরণগুলি * এনবি_পচস, যাতে মোট লুপের সংখ্যা একই হয় তবে গ্রেডিয়েন্টের গণনা এসজিডিতে আরও দ্রুততর হয়।
নিমা মুসাবি

সিভিতে এই উত্তরটি একটি ভাল এবং সম্পর্কিত একটি।
ঝুবার্ব

উত্তর:


23

সংক্ষিপ্ত উত্তর:

  • অনেক বড় ডেটা সেটিংয়ে (কয়েক মিলিয়ন ডেটা পয়েন্ট বলুন), ব্যয় বা গ্রেডিয়েন্ট গণনা করতে খুব দীর্ঘ সময় লাগে, কারণ আমাদের সমস্ত ডেটা পয়েন্টের উপরে যোগফল প্রয়োজন।
  • আমরা কি খরচ কমানোর জন্য সঠিক গ্রেডিয়েন্ট আছে, দরকার নেই একটি প্রদত্ত পুনরাবৃত্তির। গ্রেডিয়েন্টের কিছু অনুমানের কাজ ঠিক আছে।
  • স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট (এসজিডি) কেবলমাত্র একটি ডেটা পয়েন্ট ব্যবহার করে গ্রেডিয়েন্টের আনুমানিক। সুতরাং, গ্রেডিয়েন্টের মূল্যায়ন করা সমস্ত ডেটার সংমিশ্রণের তুলনায় অনেক সময় সাশ্রয় করে।
  • "যুক্তিসঙ্গত" সংখ্যার পুনরাবৃত্তির সাথে (এই সংখ্যা কয়েক হাজার হতে পারে, এবং ডেটা পয়েন্টগুলির সংখ্যার তুলনায় অনেক কম, যা মিলিয়ন হতে পারে), স্টোকাস্টিক গ্রেডিয়েন্ট শালীন একটি যুক্তিসঙ্গত ভাল সমাধান পেতে পারে।

দীর্ঘ উত্তর:

আমার স্বীকৃতি অ্যান্ড্রু এনজির মেশিন লার্নিং কোর্সেয়ার কোর্সটি অনুসরণ করে follows আপনি যদি এটির সাথে পরিচিত না হন তবে আপনি এখানে বক্তৃতা সিরিজটি পর্যালোচনা করতে পারেন ।

আসুন আমরা বর্গক্ষেত্রের ক্ষতির উপর রিগ্রেশন ধরে নিই, ব্যয়ের কাজটি হয়

জে(θ)=12মিΣআমি=1মি(θ(এক্স(আমি))-Y(আমি))2

এবং গ্রেডিয়েন্ট হয়

জে(θ)θ=1মিΣআমি=1মি(θ(এক্স(আমি))-Y(আমি))এক্স(আমি)

গ্রেডিয়েন্ট ডিসেন্ট (জিডি) এর জন্য, আমরা এর মাধ্যমে প্যারামিটার আপডেট করি

θএনW=θ-α1মিΣআমি=1মি(θ(এক্স(আমি))-Y(আমি))এক্স(আমি)

1/মিএক্স(আমি),Y(আমি)

θএনW=θ-α(θ(এক্স(আমি))-Y(আমি))এক্স(আমি)

এখানে কেন আমরা সময় বাঁচাচ্ছি:

মনে করুন আমাদের কাছে 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_approx3001000


আমি ভেবেছিলাম "গতি" সম্পর্কে তর্কটি স্থানীয় অপটিমেটে রূপান্তরিত করার জন্য কতগুলি অপারেশন / পুনরাবৃত্তি প্রয়োজন? (এবং সেই স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত আরও ভাল
ऑपটিমাতে

আমি যতদূর বুঝতে পেরেছি, পাইথন কোডে আমি "ডেটা" সরবরাহ করেছি - পরিবর্তনশীল একই। মিনি ব্যাচের গ্রেডিয়েন্ট শালীন - কোড এসডিজি থেকে আলাদা (এবং ঠিক সেখানে তিনি কেবলমাত্র ডেটার একটি ছোট ভগ্নাংশ ব্যবহার করেন)। এছাড়াও, আপনার প্রদত্ত ব্যাখ্যায়, যদিও আমরা এসডিজিতে যোগফল থেকে মুক্তি পেয়েছি, তবুও আমরা প্রতিটি ডেটা পয়েন্টের জন্য আপডেট গণনা করি। আমি এখনও বুঝতে পারি না যে প্রতিটি ডাটা পয়েন্টের উপরে লুপিংয়ের সময় কোনও প্যারামিটার আপডেট করা কীভাবে একবারে সমস্ত ডেটাপয়েন্টগুলিতে একবার যোগ করার চেয়ে দ্রুত হয়।
অ্যালিনা

@ জিওম্যাটট 22 লিঙ্কটিতে আমি এটি সরবরাহ করেছি: "অন্যদিকে, এটি শেষ পর্যন্ত সঠিক ন্যূনতমটিতে রূপান্তরকে জটিল করে তোলে, কারণ এসজিডি অতিরিক্ত চালনা চালিয়ে যাবে" " মানে এটি আরও ভাল অপটিমে রূপান্তরিত হয় না। নাকি আমি ভুল পেয়েছি?
অ্যালিনা

@ টনজা আমি কোনও বিশেষজ্ঞ নই, তবে উদাহরণস্বরূপ গভীর শিক্ষার এই অত্যন্ত প্রভাবশালী গবেষণাপত্র স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত হওয়ার জন্য "দ্রুততর আরও নির্ভরযোগ্য প্রশিক্ষণ" যুক্তি দেয়। নোট করুন যে এটি "কাঁচা" সংস্করণ ব্যবহার করে না, তবে শিখার হার (সমন্বয়-নির্ভর) সেট করতে বিভিন্ন বক্রতা অনুমান ব্যবহার করে।
জিওম্যাটট 22

1
@ টনজা, হ্যাঁ গ্রেডিয়েন্টের কোনও "দুর্বল" আনুমানিক কাজ করবে। আপনি "গ্রেডিয়েন্ট বুস্টিং" চেক করতে পারেন, এটি একই ধারণা। অন্যদিকে, আমি ধারণাটি ডেমো করতে কিছু কোড লিখছি। এটি প্রস্তুত হলে আমি এটি পোস্ট করব।
হাইতাও ডু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.