ভেক্টর অপারেশনের উপর ভিত্তি করে স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত?


10

আসুন ধরে নেওয়া যাক যে আমি এন স্যাম্পল রয়েছে এমন একটি ডেটাসেট ব্যবহার করে স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত আলগরিদমকে প্রশিক্ষণ দিতে চাই। যেহেতু ডেটাসেটের আকার স্থির হয়ে গেছে, তাই আমি টি টি বার পুনরায় ব্যবহার করব। প্রতিটি পুনরাবৃত্তি বা "যুগ" এ, আমি প্রতিটি প্রশিক্ষণের নমুনা এলোমেলোভাবে পুরো প্রশিক্ষণের সেটটিকে পুনরায় অর্ডার করার পরে একবার ব্যবহার করি।

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

কেউ কি স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূতকরণের কোনও ভেক্টরাইজড বাস্তবায়ন জানেন?

সম্পাদনা : আমাকে জিজ্ঞাসা করা হয়েছে কেন আমার ডেটাসেটের আকার ঠিক করা থাকলে আমি কেন অনলাইন গ্রেডিয়েন্ট বংশদ্ভুত ব্যবহার করতে চাই।

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

সম্পাদনা : বন্ধুর অনুরোধ অনুসারে আমি এখানে আমার অন-লাইনের গ্রেডিয়েন্ট বংশোদ্ভূত বাস্তবায়নের সিউডোকোড অন্তর্ভুক্ত করেছি। আমি একটি রিগ্রেশন সমস্যা সমাধান করছি।

Method: on-line gradient descent (regression)
Input: X (nxp matrix; each line contains a training sample, represented as a length-p vector), Y (length-n vector; output of the training samples)
Output: A (length-p+1 vector of coefficients)

Initialize coefficients (assign value 0 to all coefficients)
Calculate outputs F
prev_error = inf
error = sum((F-Y)^2)/n
it = 0
while abs(error - prev_error)>ERROR_THRESHOLD and it<=MAX_ITERATIONS:
    Randomly shuffle training samples
    for each training sample i:
        Compute error for training sample i
        Update coefficients based on the error above
    prev_error = error
    Calculate outputs F
    error = sum((F-Y)^2)/n
    it = it + 1

[1] "বৃহত্তর স্কেল অনলাইন লার্নিং", এল। বোটোউ, ওয়াই লে কান, এনআইপিএস 2003।


2
মিনি ব্যাচগুলিতে ডেটাসেট বিভক্ত করুন এবং প্রতিটি মিনি-ব্যাচে ধারাবাহিকভাবে ফিট করুন model
বন্ধু

ধন্যবাদ @ ফ্রেন্ড। তবে, এটি খাঁটি অন লাইন বাস্তবায়ন হবে না।
পাবলো সুউ

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

আমার খুব দেরিতে সাড়া পাওয়ার জন্য দুঃখিত। দয়া করে, আমি মূল প্রশ্নের সাথে যুক্ত করা পাঠ্যটি পরীক্ষা করে দেখুন।
পাবলো সুউ

1
আপনি কি নিজের বাস্তবায়ন দেখাতে পারবেন? আমি ভুল বোঝাবুঝি দেখছি, তবে কোড নমুনা ছাড়াই এটি ব্যাখ্যা করা শক্ত হবে।
বন্ধু

উত্তর:


10

প্রথমত, "নমুনা" শব্দটি সাধারণত জনসংখ্যার উপসেট বর্ণনা করতে ব্যবহৃত হয় , তাই আমি "উদাহরণ" হিসাবে একই জিনিসটি উল্লেখ করব।

আপনার এসজিডি বাস্তবায়ন এই লাইনের কারণে ধীর:

for each training example i:

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

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

batches = split dataset into mini-batches
for batch in batches: 

এবং ব্যাচ থেকে ত্রুটি গণনা করুন, একটি উদাহরণ থেকে নয়।

যদিও বেশ সুস্পষ্ট, আমার প্রতি-স্তরের স্তরে ভেক্টরাইজেশনের কথাও উল্লেখ করা উচিত। এটি এর পরিবর্তে এই জাতীয় কিছু:

theta = np.array([...])  # parameter vector
x = np.array([...])      # example
y = 0                    # predicted response
for i in range(len(example)):
    y += x[i] * theta[i]
error = (true_y - y) ** 2  # true_y - true value of response

আপনার অবশ্যই এই জাতীয় কিছু করা উচিত:

error = (true_y - sum(np.dot(x, theta))) ** 2

যা, আবার মিনি-ব্যাচের জন্য সাধারণকরণ করা সহজ:

true_y = np.array([...])     # vector of response values
X = np.array([[...], [...]]) # mini-batch
errors = true_y - sum(np.dot(X, theta), 1)
error = sum(e ** 2 for e in errors)

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

দুজন কেই ধন্যবাদ. একগুঁয়েভাবে মিনি ব্যাচ প্রত্যাখ্যান করার জন্য ক্ষমা চেয়েছিলাম, তবে আমি রূপান্তর হারে এই পদ্ধতির প্রভাব সম্পর্কে অনিশ্চিত ছিলাম। নিল, আপনার নিশ্চয়তা আপনার নিজের অভিজ্ঞতা থেকে আসছে, বা কোনও তাত্ত্বিক / অভিজ্ঞতাগত প্রকাশিত ফলাফল আছে?
পাবলো সুউ

1
@ পাবলোসউ আপনি 10 সপ্তাহের কোর্সেরায় অ্যান্ড্রু এনগের মেশিন লার্নিং ক্লাসটি পরীক্ষা করতে পারেন, তিনি ব্যাখ্যা করেছেন যে কেন এসজিডি এবং ব্যাচের জিডি উভয়ের তুলনায় অভিব্যক্তিটি দ্রুত হতে পারে। আরও সুনির্দিষ্টভাবে বলতে গেলে: এটি সর্বদা এসজিডি হিসাবে দ্রুত হওয়া উচিত তবে কখনও কখনও এটি অনুশীলনে আরও দ্রুত হওয়া উচিত।
চমত্কার

1

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

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